Table of Contents for 3D Game Engine Architecture

1   Introduction
    1.1 Drawing a Triangle
    1.2 Drawing a Triangle Mesh
    1.3 Drawing a Complicated Scene
    1.4 Abstraction of Systems

2   Core Systems
    2.1 The Low-Level System
        2.1.1 Basic Data Structures
        2.1.2 Encapsulating Platform-Specific Concepts
        2.1.3 Endianness
        2.1.4 System Time
        2.1.5 File Handling
        2.1.6 Memory Allocation and Deallocation
    2.2 The Mathematics System 
        2.2.1 Basic Mathematics Functions
        2.2.2 Fast Functions
        2.2.3 Vectors
        2.2.4 Matrices
        2.2.5 Quaternions
        2.2.6 Lines and Planes
        2.2.7 Colors
    2.3 The Object System
        2.3.1 Run-Time Type Information
        2.3.2 Names and Unique Identifiers
        2.3.3 Sharing and Smart Pointers
        2.3.4 Controllers
        2.3.5 Streaming
        2.3.6 Cloning
        2.3.7 String Trees
        2.3.8 Initialization and Termination

3   Scene Graphs and Renderers
    3.1 The Core Classes
        3.1.1 Motivation for the Classes
        3.1.2 Spatial Hierarchy Design
        3.1.3 Instancing
    3.2 Geometric State
        3.2.1 Transformations
        3.2.2 Bounding Volumes
        3.2.3 The Core Classes and Geometric Updates
    3.3 Geometric Types
        3.3.1 Points
        3.3.2 Line Segments
        3.3.3 Triangle Meshes
        3.3.4 Particles
    3.4 Render State
        3.4.1 Global State
        3.4.2 Lights
        3.4.3 Textures
        3.4.4 Multitexturing
        3.4.5 Effects
        3.4.6 The Core Classes and Render State Updates
    3.5 Renderers and Cameras
        3.5.1 Camera Models
        3.5.2 Basic Architecture for Rendering
        3.5.3 Single-Pass Drawing
        3.5.4 The DrawPrimitive Function
        3.5.5 Cached Textures and Vertex Attributes
        3.5.6 Global Effects and Multipass Support

4   Advanced Scene Graph Topics
    4.1 Level of Detail
        4.1.1 Billboards
        4.1.2 Display of Particles
        4.1.3 Discrete Level of Detail
        4.1.4 Continuous Level of Detail
        4.1.5 Infinite Level of Detail
    4.2 Sorting
        4.2.1 Binary Space Partitioning Trees
        4.2.2 Portals
        4.2.3 Sorting Children of a Node
        4.2.4 Deferred Drawing
    4.3 Curves and Surfaces
        4.3.1 Parametric Curves
        4.3.2 Parametric Surfaces
        4.3.3 Curve Tessellation by Subdivision
        4.3.4 Surface Tessellation by Subdivision
    4.4 Terrain
        4.4.1 Data Representations
        4.4.2 Level of Detail
        4.4.3 Terrain Pages and Memory Management
    4.5 Controllers and Animation 
        4.5.1 Keyframe Animation
        4.5.2 Morphing
        4.5.3 Points and Particles
        4.5.4 Skin and Bones
        4.5.5 Inverse Kinematics

5   Advanced Rendering Topics
    5.1 Special Effects using the Fixed-Function Pipeline
        5.1.1 Vertex Coloring
        5.1.2 Single Textures
        5.1.3 Dark Maps
        5.1.4 Light Maps
        5.1.5 Gloss Maps
        5.1.6 Bump Maps
        5.1.7 Environment Maps
        5.1.8 Projected Textures
        5.1.9 Planar Shadows
        5.1.10 Planar Reflection
    5.2 Special Effects using Vertex and Pixel Shaders
        5.2.1 Scene Graph Support
        5.2.2 Renderer Support
        5.2.3 Automatic Source Code Generation

6   Collision Detection
    6.1 Distance-Based Methods
        6.1.1 A Plan of Attack
        6.1.2 Root Finding using Newton's Method
        6.1.3 Root Finding using Bisection
        6.1.4 Hybrid Root Finding
        6.1.5 An Abstract Interface for Distance Calculations
    6.2 Intersection-Based Methods
        6.2.1 An Abstract Interface for Intersection Queries
    6.3 Line-Object Intersection
        6.3.1 Intersections between Linear Components and Triangles
        6.3.2 Intersections between Linear Components and Bounding Volumes
        6.3.3 Picking
        6.3.4 Staying on Top of Things
        6.3.5 Staying Out of Things
    6.4 Object-Object Intersection
        6.4.1 Collision Groups
        6.4.2 Hierarchical Collision Detection
        6.4.3 Spatial and Temporal Coherence

7   Physics
    7.1 Numerical Methods for Solving Differential Equations
        7.1.1 Euler's Method
        7.1.2 Midpoint Method
        7.1.3 Runge-Kutta Fourth-Order Method
        7.1.4 Implicit Equations and Methods
    7.2 Particle Physics
    7.3 Mass-Spring Systems
        7.3.1 Curve Masses
        7.3.2 Surface Masses
        7.3.3 Volume Masses
        7.3.4 Arbitrary Configurations
    7.4 Deformable Bodies
    7.5 Rigid Bodies
        7.5.1 The Rigid Body Class
        7.5.2 Computing the Inertia Tensor

8   Applications
    8.1 Abstraction of the Application
        8.1.1 Processing Command-Line Parameters
        8.1.2 The Application Class
        8.1.3 The ConsoleApplication Class
        8.1.4 The WindowApplication Class
        8.1.5 The WindowApplication3 Class
    8.2 Sample Applications
        8.2.1 BillboardNode Sample
        8.2.2 BspNode Sample
        8.2.3 CachedArray Sample
        8.2.4 Castle Sample
        8.2.5 ClodMesh Sample
        8.2.6 Collision Sample
        8.2.7 InverseKinematics Sample
        8.2.8 Portals Sample
        8.2.9 ScreenPolygon Sample
        8.2.10 SkinnedBiped Sample
        8.2.11 SortFaces Sample
        8.2.12 Terrain Sample
    8.3 Sample Tools
        8.3.1 3dsToWmof Importer
        8.3.2 Maya Exporter
        8.3.3 BmpToWmif Converter
        8.3.4 WmifToBmp Converter
        8.3.5 ScenePrinter Tool
        8.3.6 SceneTree Tool
        8.3.7 SceneViewer Tool

Appendix:  Coding Conventions
    A.1 File Naming and Organization
    A.2 Comment Preamble and Separators
    A.3 White Space
        A.3.1 Indentation
        A.3.2 Blank Lines
        A.3.3 Function Declarators
        A.3.4 Constructor Initializers
        A.3.5 Function Calls
        A.3.6 Conditionals
    A.4 Braces
    A.5 Pointer Types
    A.6 Identifier Names
        A.6.1 Variables
        A.6.2 Classes and Functions
        A.6.3 Enumerations
    A.7 C++ Exceptions
    A.8 Header File Organization
        A.8.1 Include Guards and Nested Header Files
        A.8.2 Minimizing Compilation Time