3D game engine design - a practical approach to real-time computer graphics

*Preface *1 Introduction *2 The Graphics System *2.1 The Foundation *2.1.1 Coordinate Systems *2.1.2 Handedness and Cross Products *2.1.3 Points and Vectors *2.2 Transformations *2.2.1 Linear Transformations *2.2.2 Affine Transformations *2.2.3 Projective Transformations *2.2.4 Properties of Perspective Projection *2.2.5 Homogeneous Points and Matrices *2.3 Cameras *2.3.1 The Perspective Camera Model *2.3.2 Model or Object Space *2.3.3 World Space *2.3.4 View, Camera, or Eye Space *2.3.5 Clip, Projection, or Homogeneous Space *2.3.6 Window Space *2.3.7 Putting Them All Together *2.4 Culling and Clipping *2.4.1 Object Culling *2.4.2 Back Face Culling *2.4.3 Clipping to the View Frustum *2.5 Rasterizing *2.5.1 Line Segments *2.5.2 Circles *2.5.3 Ellipses *2.5.4 Triangles *2.6 Vertex Attributes *2.6.1 Colors *2.6.2 Lighting and Materials *2.6.3 Textures *2.6.4 Transparency and Opacity *2.6.5 Fog *2.6.6 And Many More *2.6.7 Rasterizing Attributes *2.7 Issues of Software, Hardware, and APIs *2.7.1 A General Discussion *2.7.2 Portability versus Performance *2.8 API Conventions *2.8.1 Matrix Representation and Storage *2.8.2 Matrix Composition *2.8.3 View Matrices *2.8.4 Projection Matrices *2.8.5 Window Handedness *2.8.6 Rotations *2.8.7 Fast Computations using the Graphics API *3 Renderers *3.1 Software Rendering *3.2 Hardware Rendering *3.3 The Fixed-Function Pipeline *3.4 Vertex and Pixel Shaders *3.5 An Abstract Rendering API *4 Special Effects Using Shaders *4.1 Vertex Colors *4.2 Lighting and Materials *4.3 Textures *4.4 Multitextures *4.5 Bump Maps *4.6 Gloss Maps *4.7 Sphere Maps *4.8 Cube Maps *4.9 Refraction *4.10 Planar Reflection *4.11 Planar Shadows *4.12 Projected Textures *4.13 Shadow Maps *4.14 Volumetric Fog *4.15 Skinning *4.16 Miscellaneous *4.16.1 Iridescence *4.16.2 Water Effects *4.16.3 Volumetric Textures *5 Scene Graphs *5.1 The Need for High-Level Data Management *5.2 The Need for Low-Level Data Structures *5.3 Geometric State *5.3.1 Vertices and Vertex Attributes *5.3.2 Transformations *5.3.3 Bounding Volumes *5.4 Render State *5.4.1 Global State *5.4.2 Lights *5.4.3 Effects *5.5 The Update Pass *5.5.1 Geometric State Updates *5.5.2 Render State Updates *5.6 The Culling Pass *5.6.1 Hierarchical Culling *5.6.2 Sorted Culling *5.7 The Drawing Pass *5.7.1 Single-Pass Drawing *5.7.2 Single Effect, Multipass Drawing *5.7.3 Multiple Effect, Multipass Drawing *5.7.4 Caching Data on the Graphics Hardware *5.7.5 Sorting to Reduce State Changes *5.8 Scene Graph Design Issues *5.8.1 Organization Based on Geometric State *5.8.2 Organization Based on Render State *5.8.3 Scene Graph Operations and Threading *5.8.4 The Producer-Consumer Model *6 Scene Graph Compilers *6.1 The Need for Platform-Specific Optimization *6.2 The Need for Reducing Memory Fragmentation *6.3 A Scene Graph as a Dynamic Expression *6.4 Compilation from High-Level to Low-Level Data *6.5 Control of Compilation via Node Tags *7 Memory Management *7.1 Memory Budgets for Game Consoles *7.2 General Concepts for Memory Management *7.2.1 Allocation, Deallocation, and Fragmentation *7.2.2 Sequential-Fit Methods *7.2.3 Buddy-System Methods *7.2.4 Segregated-Storage Methods *7.3 Design Choices *7.3.1 Memory Utilization *7.3.2 Fast Allocation and Deallocation *8 Controller-Based Animation *8.1 Vertex Morphing *8.2 Keyframe Animation *8.3 Inverse Kinematics *8.4 Skin and Bones *8.5 Particle Systems *9 Spatial Sorting *9.1 Spatial Partitioning *9.1.1 Quadtrees and Octrees *9.1.2 BSP Trees *9.1.3 User-Defined Maps *9.2 Node-Based Sorting *9.3 Portals *9.4 Occlusion Culling *10 Level of Detail *10.1 Discrete Level of Detail *10.1.1 Sprites and Billboards *10.1.2 Model Switching *10.2 Continuous Level of Detail *10.2.1 General Concepts *10.2.2 Application to Regular Meshes *10.2.3 Application to General Meshes *10.3 Infinite Level of Detail *10.3.1 General Concepts *10.3.2 Application to Parametric Curves *10.3.3 Application to Parametric Surfaces *11 Terrain *11.1 Data Representations *11.2 Level of Detail for Height Fields *11.3 Terrain Pages and Memory Management *12 Collision Detection *12.1 Static Line-Object Intersections *12.2 Static Object-Object Intersections *12.3 Dynamic Line-Object Intersections *12.3.1 Distance-Based Approach *12.3.2 Intersection-Based Approach *12.4 Dynamic Object-Object Intersections *12.4.1 Distance-Based Approach *12.4.2 Intersection-Based Approach *12.5 Path Finding to Avoid Collisions *13 Physics *13.1 Basic Concepts *13.2 Particle Systems *13.3 Mass-Spring Systems *13.4 Deformable Bodies *13.5 Rigid Bodies *14 Object-Oriented Infrastructure *14.1 Object-Oriented Software Construction *14.2 Style, Naming Conventions, and Namespaces *14.3 Run-Time Type Information *14.4 Templates *14.5 Shared Objects and Reference Counting *14.6 Streaming *14.7 Startup and Shutdown *14.8 An Application Layer *15 Mathematical Topics *15.1 Standard Objects *15.2 Curves *15.3 Surfaces *15.4 Distance Algorithms *15.5 Intersection Algorithms *15.6 Numerical Algorithms *15.7 All About Rotations *15.7.1 Rotation Matrices *15.7.2 Quaternions *15.7.3 Euler Angles *15.7.4 Performance Issues *15.8 The Curse of Nonuniform Scaling * Bibliography * Index