| About the Author | p. xi |
| About the Technical Reviewer | p. xiii |
| Acknowledgments | p. xv |
| Introduction | p. xvii |
| Getting Started with XNA 2.0 | p. 1 |
| Install XNA Game Studio 2.0 | p. 1 |
| Start Your First XNA 2.0 Project | p. 3 |
| Deploy Your XNA2.0 Game on Xbox 360 | p. 6 |
| Deploy Your XNA2.0 Game on Another PC | p. 8 |
| Customize Game Loop Timing | p. 10 |
| Make Your Code Plug-and-Play Using GameComponents | p. 11 |
| Allow Your GameComponents to Communicate with Each Other by Implementing GameServices | p. 15 |
| Save and Load Data to/from a File | p. 19 |
| Setting Up Different Camera Modes in Your 3D World | p. 25 |
| Set Up the Camera: Position, Target, and View Frustum | p. 25 |
| Specify the Target of Your Camera | p. 33 |
| Create a First-Person Shooter Camera: A Quake-Style Camera | p. 39 |
| Create a Freelancer-Style Camera: Full 3D Rotation Using Quaternions | p. 45 |
| Check Whether an Object Is in Sight of the Camera | p. 52 |
| Detect Camera Collision Against Models, Walls, or Terrains | p. 57 |
| Create a Camera Fly-by Action | p. 60 |
| Remove the Solid Background Color: Skybox | p. 70 |
| Draw Only the Parts of the Scene That Are in Sight of the Camera: Octree | p. 82 |
| Use a Quadtree to Hide Parts of a Grid That Are Not in Sight | p. 104 |
| Set Up a Post-Processing Framework | p. 113 |
| Create a Blur/Glow Post-Processing Effect | p. 125 |
| Define an Orthogonal Projection Matrix to Generate a Depth Map of the Scene | p. 135 |
| Working with 2D Images/Textures in XNA 2.0 | p. 145 |
| Display 2D Images: Load and Render Images Using the SpriteBatch Class | p. 146 |
| Rotate, Scale, and Mirror an Image | p. 151 |
| Render Transparent Images Using Layers | p. 153 |
| Consider Performance When Using the SpriteBatch Class | p. 157 |
| Display Text | p. 160 |
| Create a 2D Menu Interface | p. 162 |
| Create a Texture, Define the Color of Each Pixel, Save a Texture to a File | p. 176 |
| Render the Scene into a Texture | p. 178 |
| Extend the Image Content Processor | p. 182 |
| Extend the Image Content Processor: Grayscale Conversion and Processor Parameters | p. 195 |
| Make Your Scene More Impressive with Billboarding: Render 2D Images in a 3D World So They Always Face the Camera | p. 199 |
| Create a 3D Explosion Effect/Simple Particle System | p. 220 |
| Create a Mirror: Projective Texturing | p. 233 |
| Working with Models | p. 247 |
| Load and Render a Model Using the BasicEffect Class | p. 248 |
| Set Different World Matrices for Different Objects, Combining World Matrices | p. 252 |
| Find the Rotation Angle Corresponding to a Direction | p. 258 |
| Use Acceleration to Control Velocity | p. 260 |
| Construct the Global BoundingSphere Around a Model | p. 265 |
| Scale the Model to a Predefined Size | p. 267 |
| Render a Model Using Custom Effects and Custom Textures (Easy Approach) | p. 269 |
| Visualize the Bone Structure of a Model | p. 274 |
| Make the Bones Move Individually: Model Animation | p. 281 |
| Use BoundingSpheres for Basic Model Collision Detection | p. 286 |
| Use Ray-Traced Collision Detection for Small/Fast Objects | p. 292 |
| Extend the Model Content Processor to Load Custom Effects (Clean Approach) | p. 295 |
| Gain Direct Access to Vertex Position Data by Extending the Model Processor | p. 302 |
| Gain Direct Access to Vertex Position Data of Each ModelMesh by Extending the Model Processor | p. 307 |
| Gain Direct Access to Vertex Position Data by Defining a Custom TypeWriter and TypeReader | p. 312 |
| Store Multiple Objects in the Tag Property by Defining a Custom TypeWriter and TypeReader | p. 322 |
| Correctly Tilt a Model Corresponding to the Terrain Underneath | p. 329 |
| Detect Ray-Model Collisions Using Per-Triangle Checks | p. 340 |
| Detect Whether the Pointer Is Over a Model | p. 349 |
| Getting the Most Out of Vertices | p. 355 |
| Render Triangles, Lines, and Points in a 3D World | p. 356 |
| Apply a Texture to Your Triangles | p. 367 |
| Remove Redundant Vertices Using Indices | p. 375 |
| Store Your Vertices and Indices in the Memory of Your Graphics Card Using a VertexBuffer and an IndexBuffer | p. 379 |
| Store Your Vertices in a DynamicVertexBuffer for Frequently Updated Data | p. 384 |
| Enable Backface Culling: What It Is and What It Can Do for You | p. 387 |
| Automatically Calculate the Normals for All Vertices in a VertexBuffer | p. 391 |
| Create a Terrain Based on a VertexBuffer and an IndexBuffer | p. 397 |
| Calculate the Exact Height of a Terrain Between Vertices Using Bilinear Interpolation | p. 407 |
| Calculate the Collision Point Between the Pointer and the Terrain: Surface Picking | p. 413 |
| Extend the TextureProcessor to Generate a Terrain Object from an Image: Advanced DOM Objects | p. 420 |
| Write a Custom Content Importer: Loading a Terrain from a CSV File | p. 432 |
| Load Data from an XML File | p. 439 |
| Create Your Own Vertex Format | p. 445 |
| Introducing Bump Mapping: Fixed Normal | p. 455 |
| Adding Per-Pixel Detail by Bump Mapping in Tangent Space | p. 460 |
| Add an Ocean to Your 3D World | p. 472 |
| Apply Catmull-Rom Interpolation in 3D to Generate Additional Vertices | p. 485 |
| Create the Vertices for a Racing Track | p. 489 |
| Adding Light to Your Scene in XNA 2.0 | p. 499 |
| Define Normals and Use the BasicEffect | p. 500 |
| Share Normals Between Vertices | p. 506 |
| Add Higher Detail to Your Lighting: Per-Pixel Lighting | p. 511 |
| Add Specular Highlights to Reflective Surfaces | p. 514 |
| Add HLSL Vertex Shading | p. 516 |
| Define a Point Light Using HLSL | p. 522 |
| Add HLSL Per-Pixel Lighting | p. 524 |
| Define a Spotlight Using HLSL | p. 528 |
| Add HLSL Specular Highlights | p. 530 |
| Add Multiple Lights to Your Scene Using Deferred Shading | p. 535 |
| Add Shadowing Capability to Your Deferred Shading Engine | p. 551 |
| Adding Sounds to Your XNA 2.0 Project | p. 559 |
| Play Simple .wav Sound Files | p. 559 |
| Loop Sounds | p. 563 |
| Play Sounds from a 3D Location Relative to the Camera: 3D Sound | p. 567 |
| Networking in XNA 2.0 | p. 571 |
| Sign In for Networking Services | p. 571 |
| Create a Network Session | p. 574 |
| Join a Networking Session | p. 579 |
| Send/Receive Data Over the Network | p. 584 |
| Search for Networking Sessions Asynchronously | p. 592 |
| Move from the Lobby to the Actual Game | p. 595 |
| Index | p. 599 |
| Table of Contents provided by Ingram. All Rights Reserved. |