List of Figures


Chapter 1: Introduction to 3D Game Development

Figure 1.1: Think Tanks—a 3rd PPOV action game made by BraveTree Productions using the Torque Game Engine.
Figure 1.2: Tubettiworld—an action-adventure FPS hybrid game being developed by Tubetti Enterprises using the Torque Game Engine.
Figure 1.3: Myrmidon—a science fiction RPG, another Torque-based game, being developed by 21-6 Productions.
Figure 1.4: Marble Blast—a maze-and-puzzle hybrid game by GarageGames using its Torque Game Engine.
Figure 1.5: Chain Reaction—a puzzle game by Monster Studios using its Reaction Engine.
Figure 1.6: Center World—a submarine sim in development by Michael Hense, an independent game developer, using the Torque Game Engine.
Figure 1.7: Maximum Football—a football sports game in development by David A. Winter, an independent game developer.
Figure 1.8: Turf—a 3D real-time multiplayer strategy game in development by Tubetti Enterprises, using a heavily modified version of the Torque Game Engine.
Figure 1.9: Conceptual design sketch.
Figure 1.10: Elements of a game engine.
Figure 1.11: An example of a main menu GUI.
Figure 1.12: A 3D wire-frame and textured models of an old-style helicopter.
Figure 1.13: The textures used as the skin of the old-style helicopter.
Figure 1.14: A graphical view of a gunshot sound-effect waveform.

Chapter 2: Introduction to Programming

Figure 2.1: Locating the File Tree/Project View.
Figure 2.2: Changing the File List View to the Project View.
Figure 2.3: Project dialog box with folder hierarchy.
Figure 2.4: Final form of the Project/Workspace Setup dialog box.
Figure 2.5: Final form of the Example Project View.
Figure 2.6: The Find dialog box set for a basic search.
Figure 2.7: The Replace dialog box set for a basic search-and-replace operation.
Figure 2.8: The Find in Files dialog box.
Figure 2.9: Bookmarked text shown in lighter gray.
Figure 2.10: Output of the Hello World program.

Chapter 3: 3D Programming Concepts

Figure 3.1: XYZ-axis system.
Figure 3.2: Left-handed coordinate system with vertical Y-axis.
Figure 3.3: Right-handed coordinate system with vertical Y-axis.
Figure 3.4: Right-handed coordinate system with vertical Z-axis depicting world space.
Figure 3.5: A point specified using an XYZ coordinate triplet.
Figure 3.6: Simple cube shown in a standard XYZ axis chart.
Figure 3.7: Simple cube with reduced XYZ-axis key.
Figure 3.8: Simple cube with axis key at geometric center.
Figure 3.9: Screen shot of sphere model.
Figure 3.10: Polygons of varying complexity.
Figure 3.11: Polygons decomposed into triangle meshes.
Figure 3.12: The parts of a 3D shape.
Figure 3.13: Scaling.
Figure 3.14: Rotation.
Figure 3.15: Translation.
Figure 3.16: Fully transforming the cube.
Figure 3.17: Faces on an irregularly shaped object.
Figure 3.18: Faces on an irregularly shaped object.
Figure 3.19: Lambert-shaded object.
Figure 3.20: Flat-shaded (A) and gouraud-shaded (B) spheres.
Figure 3.21: Phong-shaded sphere.
Figure 3.22: Example of a fake phong highlight map.
Figure 3.23: Texture-mapped and gouraud-shaded cube.
Figure 3.24: Mipmap textures for a stone surface.
Figure 3.25: Receding mipmap textures on a stone surface.
Figure 3.26: Simple scene graph.
Figure 3.27: Finding the pyramid object's instance ID.

Chapter 4: Game Programming

Figure 4.1: General game folder tree.
Figure 4.2: The Emaga4 folder tree.
Figure 4.3: Player-avatar in Emaga4.
Figure 4.4: Looking around the Emaga4 game world.

Chapter 5: Game Play

Figure 5.1: The Emaga5 folder tree.
Figure 5.2: The Emaga5 splash screen.
Figure 5.3: The Emaga5 MenuScreen.
Figure 5.4: The Avatar in Emaga5.

Chapter 7: Common Scripts

Figure 7.1: Mission download phases.
Figure 7.2: Mission download process.

Chapter 8: Introduction to Textures

Figure 8.1: Structure definition through using textures.
Figure 8.2: Rock and icefalls appearance on a mountainside.
Figure 8.3: Shoreline foam and deepwater textures.
Figure 8.4: Clouds in a skybox using textures.
Figure 8.5: Terrain accents.
Figure 8.6: Weapon detail using textures.
Figure 8.7: Vehicle detail and structure.
Figure 8.8: Player clothing, skin, and other details.
Figure 8.9: Distant objects.
Figure 8.10: Creating a new blank image.
Figure 8.11: Texture dialog box with woodgrain texture.
Figure 8.12: Color dialog box for woodgrain.
Figure 8.13: Woodgrain texture.
Figure 8.14: Texture dialog box with default preset.
Figure 8.15: Color dialog box for sidewalk texture.
Figure 8.16: Initial sidewalk texture.
Figure 8.17: Highlight/Midtone/Shadow dialog box.
Figure 8.18: Enhanced highlight sidewalk texture.
Figure 8.19: Hue/Saturation/Lightness dialog box.
Figure 8.20: Desaturated sidewalk texture.
Figure 8.21: Add Noise dialog box.
Figure 8.22: Final sidewalk texture.
Figure 8.23: Spawn view in the fps demo game.
Figure 8.24: Materials palette.
Figure 8.25: Noise image.
Figure 8.26: Noise image with shape.
Figure 8.27: Tool palette, with tool names.
Figure 8.28: Noise image.
Figure 8.29: Creating an alpha channel selection.
Figure 8.30: The Materials palette.
Figure 8.31: The Layer palette.
Figure 8.32: The Tool Options palette for the Paint Brush.
Figure 8.33: The Text Entry dialog box.

Chapter 9: Skins

Figure 9.1: The victim—a simple can of soup.
Figure 9.2: Laying it all out—the unwrapped can.
Figure 9.3: After applying textures.
Figure 9.4: Aha! Not such a simple can anymore. Nutritious, too!
Figure 9.5: Materials and Layer palettes.
Figure 9.6: The Shapes List.
Figure 9.7: The red rectangle.
Figure 9.8: The white rectangle.
Figure 9.9: Selecting the mapped sides of the can.
Figure 9.10: Soft Focus dialog box.
Figure 9.11: Adding the metal lips.
Figure 9.12: Adding the ridges.
Figure 9.13: Text tool cursors.
Figure 9.14: Point to Point Segment Type button.
Figure 9.15: Tracing the cab roof.
Figure 9.16: Edit Mode button.
Figure 9.17: Arrows indicate the editable node handles.
Figure 9.18: Before using Send to Bottom, and after using it.
Figure 9.19: Spray-painting the body base color.
Figure 9.20: Spray-painting the accent color.
Figure 9.21: Adding the racing stripe.
Figure 9.22: The fender thingies.
Figure 9.23: The Tubettiworld Standard Male Character model rendered by the Torque Engine.
Figure 9.24: Concept artwork for the Standard Male Character.
Figure 9.25: UV template for the Standard Male.
Figure 9.26: Basic flesh tone applied to the skin layer.
Figure 9.27: Hilite template.
Figure 9.28: Hilite template applied over the head and neck UV template.
Figure 9.29: Hilite template applied over the skin layer.
Figure 9.30: An eye.
Figure 9.31: Finished face and neck.
Figure 9.32: Filled hair template area.
Figure 9.33: Textured hair.
Figure 9.34: The font of wisdom under construction—the bald spot.
Figure 9.35: Hand area.
Figure 9.36: Finger lines and fingernails.
Figure 9.37: Adding hand details.
Figure 9.38: The finished hands.
Figure 9.39: The jacket pieces.
Figure 9.40: Getting close to that leathery look.
Figure 9.41: That leathery look.
Figure 9.42: Standard Male skin.

Chapter 10: Creating GUI Elements

Figure 10.1: Common graphical user interface elements.
Figure 10.2: Scroll bar widgets.
Figure 10.3: Start mission interface screen.
Figure 10.4: GuiChunkedBitmapCtrl background sample.
Figure 10.5: GuiControl sample.
Figure 10.6: GuiTextCtrl sample.
Figure 10.7: GuiButtonCtrl sample.
Figure 10.8: GuiCheckBoxCtrl sample.
Figure 10.9: GuiScrollCtrl sample.
Figure 10.10: GuiTextListCtrl sample.
Figure 10.11: GuiTextEditCtrl sample.
Figure 10.12: The Torque GUI Editor.

Chapter 11: Structural Material Textures

Figure 11.1: Real-world candidate for sidewalk texture.
Figure 11.2: Alternate candidate for sidewalk texture.
Figure 11.3: Reference image for three color temperatures.
Figure 11.4: Pebbled surface with lighting adjustment.
Figure 11.5: A photograph that needs to be cropped.
Figure 11.6: Crop tool icon.
Figure 11.7: Cropped portion of unaltered photo.
Figure 11.8: Rectangular Selection tool icon.
Figure 11.9: The Free Rotate dialog box.
Figure 11.10: The rotated woodgrain.
Figure 11.11: The cropped woodgrain image.
Figure 11.12: Example textures.
Figure 11.13: Scaling bricks.
Figure 11.14: Scaling error.
Figure 11.15: Tiled brick texture.
Figure 11.16: The brick texture with asymmetric shading.
Figure 11.17: A stone texture.
Figure 11.18: Poorly tiled stone texture.
Figure 11.19: Replicating the left edge.
Figure 11.20: Replicating the bottom edge.
Figure 11.21: Properly tiled stone texture.
Figure 11.22: An irregular texture.
Figure 11.23: A rough texture.
Figure 11.24: A pebbled texture.
Figure 11.25: A woodgrain texture.
Figure 11.26: A smooth texture.
Figure 11.27: A patterned texture.
Figure 11.28: A fabric texture.
Figure 11.29: A metallic texture.
Figure 11.30: A reflective texture.
Figure 11.31: A plastic texture.

Chapter 12: Terrains

Figure 12.1: An untextured terrain tile.
Figure 12.2: A terrain height map.
Figure 12.3: A terrain created from a height map.
Figure 12.4: Some example terrain textures.
Figure 12.5: A terrain with tiling artifacts.
Figure 12.6: A texture with an undesirable feature.
Figure 12.7: A texture without the undesirable feature.
Figure 12.8: The terrain with improved tiled texture.
Figure 12.9: Contour map.
Figure 12.10: Cropped and resized contour map.
Figure 12.11: Contour map with grayscale values.
Figure 12.12: Terraced height map.
Figure 12.13: Blurred height map.
Figure 12.14: World Editor Window menu with Terrain Terraform Editor checked.
Figure 12.15: Terraform Editor.
Figure 12.16: The Operation dialog box.
Figure 12.17: The Load File dialog box.
Figure 12.18: The overhead view.
Figure 12.19: The terrain boundary.
Figure 12.20: The mission area.
Figure 12.21: Checkerboard texture.
Figure 12.22: Grid texture.
Figure 12.23: World Editor Window menu with Terrain Texture Painter checked.
Figure 12.24: Material Selection dialog box.
Figure 12.25: Image Load File dialog box.
Figure 12.26: Painting Terrain with a brush size set to 1.
Figure 12.27: Terrain Grid with a brush size set to 1.

Chapter 13: Introduction to Modeling with MilkShape

Figure 13.1: MilkShape 3D.
Figure 13.2: The toolbox contents.
Figure 13.3: Checking the zoom in the Right Side view.
Figure 13.4: Torque-oriented object in the MilkShape viewports.
Figure 13.5: Making a cylinder.
Figure 13.6: Assigned texture.
Figure 13.7: Unwrapping the can in UVMapper.
Figure 13.8: Selecting the bottom vertices.
Figure 13.9: Selecting the center vertex.
Figure 13.10: The can with lid opened.
Figure 13.11: The File menu.
Figure 13.12: The Edit menu.
Figure 13.13: The Vertex menu.
Figure 13.14: The Face menu.
Figure 13.15: The Animate menu.
Figure 13.16: The Tools menu.
Figure 13.17: The Window menu.
Figure 13.18: The Model tab.
Figure 13.19: The Groups tab.
Figure 13.20: The Materials tab.
Figure 13.21: The Joints tab.
Figure 13.22: The Keyframer.
Figure 13.23: The Preferences dialog box.
Figure 13.24: The Planar Mapping dialog box.
Figure 13.25: The Box Mapping dialog box.
Figure 13.26: The Cylindrical Mapping dialog box.
Figure 13.27: The Cylindrical Cap Mapping dialog box.
Figure 13.28: The Spherical Mapping dialog box.

Chapter 14: Making a Character Model

Figure 14.1: The initial cylinder.
Figure 14.2: Selecting the bottom vertices.
Figure 14.3: Tapering the cylinder.
Figure 14.4: Shifting the layers.
Figure 14.5: Shaping the jaw.
Figure 14.6: Shaping the head.
Figure 14.7: Back of the head/upper neck.
Figure 14.8: The smaller back of the head area.
Figure 14.9: The temple vertices.
Figure 14.10: Scaling the temple vertices.
Figure 14.11: Scaling the cranium.
Figure 14.12: The ear vertices.
Figure 14.13: The scaled ear vertices.
Figure 14.14: Selecting the three columns of vertices.
Figure 14.15: Dragging the vertices forward.
Figure 14.16: After dragging the vertices.
Figure 14.17: Shaping the scalp.
Figure 14.18: The nose vertices before scaling.
Figure 14.19: The eye-socket vertices after scaling.
Figure 14.20: The finished hero head.
Figure 14.21: Positioning the head mesh.
Figure 14.22: The relationship of the chest cylinder to the head.
Figure 14.23: The cylinder caps after scaling and moving.
Figure 14.24: The sternum vertices after moving.
Figure 14.25: The middle back vertices.
Figure 14.26: The ab cylinder relative to the chest.
Figure 14.27: Hiding the lower chest vertices.
Figure 14.28: The ab vertices dragged over on top of the chest vertices.
Figure 14.29: Dragging some end cap vertices over on top of chest vertices.
Figure 14.30: Dragging the end cap neighbor vertices over on top of the chest vertices.
Figure 14.31: Dragging the next set of vertices into position.
Figure 14.32: The final Front view layout.
Figure 14.33: Select and hide these vertices.
Figure 14.34: The top center cylinder vertex.
Figure 14.35: Selecting the common chest and ab vertices.
Figure 14.36: After snapping to gridoops!
Figure 14.37: The well-aligned vertices.
Figure 14.38: The final torso.
Figure 14.39: Matching head to torso.
Figure 14.40: The reshaped head.
Figure 14.41: The shoulder socket vertices.
Figure 14.42: Shape and placement of the foot.
Figure 14.43: The knee.
Figure 14.44: The left thigh.
Figure 14.45: The finished left leg.
Figure 14.46: The Hero model with head, torso, and legs.
Figure 14.47: Alignment of the three boxes.
Figure 14.48: Welding the hand vertices.
Figure 14.49: Rotating the two bottom rows.
Figure 14.50: Moving the two bottom rows.
Figure 14.51: The bottom row of vertices.
Figure 14.52: Two sets of shaped boxes abutting each other.
Figure 14.53: Three sets of shaped boxes.
Figure 14.54: The start of the thumb.
Figure 14.55: Welding the hand vertices.
Figure 14.56: After the hand welding.
Figure 14.57: The scaled baby finger area.
Figure 14.58: Placing the scaled baby finger vertices.
Figure 14.59: The thumb positioning.
Figure 14.60: Comparison of torso with hand.
Figure 14.61: The left arm.
Figure 14.62: The completed arms.
Figure 14.63: The completed Hero model.
Figure 14.64: Planar mapping settings for Hero model.
Figure 14.65: The unwrapped Hero model.
Figure 14.66: Settings for the spherical mapping of the head.
Figure 14.67: The unwrapped head.
Figure 14.68: The adjusted triangles.
Figure 14.69: The reorganized map.
Figure 14.70: The Box Mapping settings.
Figure 14.71: The UV mapped hands.
Figure 14.72: The UV mapped feet.
Figure 14.73: The final UV mapping layout.
Figure 14.74: The 3D view showing the UV template texture.
Figure 14.75: Bone movement during joint rotation.
Figure 14.76: Placing the base and pelvis nodes.
Figure 14.77: The Hero skeleton with labeled nodes.
Figure 14.78: The pose-adjusted skeleton.
Figure 14.79: The abdomen vertices.
Figure 14.80: The chest vertices.
Figure 14.81: Bending at the lower spine.
Figure 14.82: The Keyframer control panel.
Figure 14.83: The difference in poses.
Figure 14.84: Frame 31.
Figure 14.85: Frame 40.
Figure 14.86: Frame 50.
Figure 14.87: Frame 60.
Figure 14.88: Frame 70.
Figure 14.89: Head sequence frames.
Figure 14.90: Frame 90.
Figure 14.91: Frame 100.
Figure 14.92: Frame 110.
Figure 14.93: Frame 120.
Figure 14.94: Torque Game Engine (DTS) Exporter dialog box.

Chapter 15: Making a Vehicle Model

Figure 15.1: Side view sketch of the runabout.
Figure 15.2: Top view sketch of the runabout.
Figure 15.3: Side view sketch adjusted for use in MilkShape.
Figure 15.4: MilkShape windows with reference sketch.
Figure 15.5: Placing vertices over the reference sketch.
Figure 15.6: Vertex order for creating faces.
Figure 15.7: Creating faces starting from the right.
Figure 15.8: Finishing the top row of faces.
Figure 15.9: Working the bottom row of faces.
Figure 15.10: Completed plane of body faces.
Figure 15.11: The 3D view of the initial body faces.
Figure 15.12: First extrusion.
Figure 15.13: After extruding the body faces five times.
Figure 15.14: After duplicating and moving the copies.
Figure 15.15: Scaling the nose of the runabout.
Figure 15.16: After scaling the bottom nine rows.
Figure 15.17: After scaling the nose.
Figure 15.18: After scaling the tail.
Figure 15.19: Shaping the Front view.
Figure 15.20: Centering the Front view.
Figure 15.21: Fender sphere.
Figure 15.22: Lopping off the bottom of the fender sphere.
Figure 15.23: Stretching the fender.
Figure 15.24: Shaping the fender.
Figure 15.25: The fender vertices.
Figure 15.26: Close-up of moved vertices.
Figure 15.27: All vertices moved.
Figure 15.28: Finished fender.
Figure 15.29: All fenders and body completed.
Figure 15.30: Mounts on all four corners.
Figure 15.31: Eye and camera mounts.
Figure 15.32: Seat mounts.
Figure 15.33: Collision mesh.

Chapter 16: Making Weapons and Items

Figure 16.1: The Health Kit in game.
Figure 16.2: The box.
Figure 16.3: The Health Kit model.
Figure 16.4: Locating the big gray block.
Figure 16.5: The rock in game.
Figure 16.6: The sphere.
Figure 16.7: The truncated sphere.
Figure 16.8: The stretched rock-sphere.
Figure 16.9: The almost rock.
Figure 16.10: The rock model.
Figure 16.11: Locating the rock.
Figure 16.12: Four-stack cylinder.
Figure 16.13: Crooked cylinder.
Figure 16.14: Crooked cylinder becomes a tree trunk.
Figure 16.15: Branching out.
Figure 16.16: Adding more branches.
Figure 16.17: The textured tree.
Figure 16.18: The tree collision mesh.
Figure 16.19: The tree triangle.
Figure 16.20: The textured tree.
Figure 16.21: Tommy gun sketch.
Figure 16.22: Tommy gun vertices.
Figure 16.23: Tommy gun muzzle faces.
Figure 16.24: Tommy gun barrel and forestock faces.
Figure 16.25: Tommy gun metal body faces.
Figure 16.26: Tommy gun shoulder stock faces.
Figure 16.27: Tommy gun loses face—film at 11.
Figure 16.28: Extruded Tommy gun.
Figure 16.29: Shrunken gun.
Figure 16.30: The Tommy gun nodes.
Figure 16.31: The rotated Tommy gun.
Figure 16.32: Texture Coordinate Editor dialog box.
Figure 16.33: Remapped view.
Figure 16.34: Finished Tommy gun.

Chapter 17: Making Structures

Figure 17.1: QuArK directory structure.
Figure 17.2: QuArK Edit menu.
Figure 17.3: Configuration sections and categories.
Figure 17.4: Torque configuration page.
Figure 17.5: The Torque button in QuArK.
Figure 17.6: The Torque Map Editor in QuArK.
Figure 17.7: The Tree view.
Figure 17.8: Selecting Build DIF only.
Figure 17.9: The texture information alert.
Figure 17.10: The test structure in Emaga6.
Figure 17.11: The Cube brush.
Figure 17.12: A new cube.
Figure 17.13: Reshaped cube.
Figure 17.14: A new cube.
Figure 17.15: The Texture item in the Object pop-up menu.
Figure 17.16: The Texture Browser.
Figure 17.17: The finished bridge.
Figure 17.18: The bridge in Emaga6.
Figure 17.19: The Stair brush.
Figure 17.20: The stairs.
Figure 17.21: The hollowed room.
Figure 17.22: The Subtraction brush.
Figure 17.23: The doorway.
Figure 17.24: The portal entity.
Figure 17.25: The portal entity in the Tree view.
Figure 17.26: The portal entity's brush in the Tree view.
Figure 17.27: The portal in place.
Figure 17.28: The light entity.
Figure 17.29: The repositioned light entity.

Chapter 18: Making the Game World Environment

Figure 18.1: A serene scene.
Figure 18.2: A pictorial skybox.
Figure 18.3: An exploded skybox.
Figure 18.4: Skybox edge distances.
Figure 18.5: Distorted image.
Figure 18.6: Predistorted image.
Figure 18.7: Foreground and Stroke Properties check box.
Figure 18.8: The Gradient scale.
Figure 18.9: Image with gradient.
Figure 18.10: Some clouds.
Figure 18.11: Applying perspective-correcting warp.
Figure 18.12: Wind velocity conversion correcting warp.
Figure 18.13: A simple cloud texture.
Figure 18.14: Raindrop images.
Figure 18.15: Lightning stroke images.
Figure 18.16: A lightning bolt.
Figure 18.17: Water in a game setting.
Figure 18.18: Terrain brush.
Figure 18.19: Terrain Terraform Editor.

Chapter 19: Creating and Programming Sound

Figure 19.1: Audacity main window.
Figure 19.2: The Record button.
Figure 19.3: Recording in progress.
Figure 19.4: Waveform in Audacity.
Figure 19.5: Stop recording.
Figure 19.6: Playback.
Figure 19.7: Selecting a portion of the waveform.
Figure 19.8: The final waveform of the sound effect.
Figure 19.9: The Audacity main screen.
Figure 19.10: File menu.
Figure 19.11: Edit menu.
Figure 19.12: View menu.
Figure 19.13: Project menu.
Figure 19.14: Effect menu.

Chapter 20: Game Sound and Music

Figure 20.1: World Editor.
Figure 20.2: World Editor Creator.
Figure 20.3: The Creator Tree view.
Figure 20.4: Tommy gun model.
Figure 20.5: The Z label.
Figure 20.6: Repositioned Tommy gun.
Figure 20.7: Placing ammo box.
Figure 20.8: AudioEmitter in Tree view.
Figure 20.9: The Building Object: AudioEmitter dialog box.
Figure 20.10: The AudioEmitter marker.
Figure 20.11: The AudioEmitter spheres.
Figure 20.12: World Editor Inspector frame.

Chapter 21: Creating the Game Mission

Figure 21.1: Campfire.
Figure 21.2: Adding smoke.
Figure 21.3: Particle system elements.
Figure 21.4: Locating the falls.
Figure 21.5: The falls.
Figure 21.6: trackA.ter.
Figure 21.7: trackB.ter.
Figure 21.8: The start/finish line.
Figure 21.9: Barrier.
Figure 21.10: Direction sign.
Figure 21.11: Checkpoint locations.

Chapter 22: The Game Server

Figure 22.1: Sitting pose.
Figure 22.2: Car mount nodes.
Figure 22.3: Placing a trigger.
Figure 22.4: The Add Dynamic Field dialog box.

Chapter 23: The Game Client

Figure 23.1: MenuScreen interface.
Figure 23.2: SoloPlay interface.
Figure 23.3: Host interface.
Figure 23.4: FindServer interface.
Figure 23.5: ChatBox interface.
Figure 23.6: MessageBox interface.

Appendix D: QuArK Reference

Figure D.1: The Map Editor.
Figure D.2: File menu.
Figure D.3: Layout menu.
Figure D.4: Edit menu.
Figure D.5: Toolboxes menu.
Figure D.6: Search menu.
Figure D.7: Commands menu.
Figure D.8: Selection menu.
Figure D.9: Torque menu.
Figure D.10: Toolbars menu.
Figure D.11: Options menu.




3D Game Programming All in One
3D Game Programming All in One (Course Technology PTR Game Development Series)
ISBN: 159200136X
EAN: 2147483647
Year: 2006
Pages: 197

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net