Contents
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xvii
Part I OpenGL Basics . . . . . . . . . . . . . . . . . . . . .1
Chapter 1 The Exploration Begins . . . Again . . . . . . . . . . . . . . . . . . . . .3
Why Make Games? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
The World of 3D Games . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4
The Elements of a Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4
What Is OpenGL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6
OpenGL History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7
OpenGL Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7
Related Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
A Sneak Peek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
Chapter 2 Creating a Simple OpenGL Application . . . . . . . . . . . . . . . .13
Introduction to WGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 The Rendering Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14 Pixel Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 dwFlags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 iPixelType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 cColorBits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19 Setting the Pixel Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19
x
TLFeBOOK
Contents xi
An OpenGL Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
Full-Screen OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
Chapter 3 OpenGL States and Primitives . . . . . . . . . . . . . . . . . . . . . . .35
State Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35 Querying Numeric States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36 Enabling and Disabling States . . . . . . . . . . . . . . . . . . . . . . . . . . .36 glIsEnabled() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37 Querying String Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37 Finding Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38 Giving OpenGL a Hint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
Handling Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39 Drawing Points in 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42 Drawing Lines in 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47 Drawing Polygons in 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52 Using Primitives: Triangles and Quads Example . . . . . . . . . . . . . .60
Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
Chapter 4 Transformations and Matrices . . . . . . . . . . . . . . . . . . . . . . .67
Understanding Coordinate Transformations . . . . . . . . . . . . . . . . . . . .67
Eye Coordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
Viewing Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70
Modeling Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
Projection Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
Viewport Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
OpenGL and Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
The Modelview Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
Rotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
Scaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
Matrix Stacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
The Robot Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84
Projections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
Orthographic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
Perspective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
Setting the Viewport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89
Projection Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
TLFeBOOK
xii |
Contents |
|
|
|
|
Manipulating the Viewpoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. .91 |
|
|
Using gluLookAt() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
.92 |
|
|
Using glRotate() and glTranslate() . . . . . . . . . . . . . . . . . . . . . . . |
.93 |
|
|
Creating Your Own Custom Routines . . . . . . . . . . . . . . . . . . . . . |
.94 |
|
|
Using Your Own Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
.95 |
|
|
Loading Your Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
.95 |
|
|
Multiplying Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
.96 |
|
|
Transpose Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
.96 |
|
|
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
.97 |
|
Chapter 5 |
Colors, Lighting, Blending, and Fog . . . . . . . . . . . . . . . . . |
.99 |
|
|
Using Colors in OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
.99 |
|
|
Setting the Color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
100 |
|
|
Secondary Color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
101 |
|
|
Shading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
102 |
|
|
A Colorful Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
104 |
|
|
Lighting in OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
104 |
|
|
OpenGL Lighting and the Real World . . . . . . . . . . . . . . . . . . . . |
104 |
|
|
Light Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
106 |
|
|
Spotlights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
109 |
|
|
Materials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
111 |
|
|
Normals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
115 |
|
|
The Lighting Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
118 |
|
|
Lighting in Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
120 |
|
|
Blending . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
121 |
|
|
Separate Blend Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
125 |
|
|
The Blend Equation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
125 |
|
|
Constant Blend Color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
127 |
|
|
Disk Blender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
127 |
|
|
Fog 128 |
|
|
|
OpenGL Fog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
128 |
|
|
Fog Coordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
130 |
|
|
Fog in Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
131 |
|
|
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
131 |
|
Chapter 6 |
Bitmaps and Images with OpenGL . . . . . . . . . . . . . . . . . . |
133 |
|
|
The OpenGL Bitmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
133 |
|
|
Positioning the Bitmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
134 |
|
|
Drawing the Bitmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
135 |
|
|
An OpenGL Bitmap Example . . . . . . . . . . . . . . . . . . . . . . . . . . . |
136 |
TLFeBOOK
|
|
Contents |
xiii |
|
Using Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .138 |
|
|
Drawing Image Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .139 |
|
|
Reading from the Screen . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .141 |
|
|
Copying Screen Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .141 |
|
|
Magnification, Reduction, and Flipping . . . . . . . . . . . . . . . |
. . . .142 |
|
|
Managing Pixel Storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .142 |
|
|
Targa Image Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .143 |
|
|
The Targa File Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .143 |
|
|
Loading Targa Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .145 |
|
|
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .147 |
|
Chapter 7 |
Texture Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .149 |
|
|
An Overview of Texture Mapping . . . . . . . . . . . . . . . . . . . . . . . |
. . . .150 |
|
|
Texture Coordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .151 |
|
|
Using the Texture Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .152 |
|
|
Texture Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .152 |
|
|
Specifying Textures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .155 |
|
|
Texture Filtering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .161 |
|
|
Basic Texture Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .163 |
|
|
Mipmaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .166 |
|
|
Mipmaps and the OpenGL Utility Library . . . . . . . . . . . . . . |
. . . .167 |
|
|
Automatic Mipmap Generation . . . . . . . . . . . . . . . . . . . . . |
. . . .168 |
|
|
Texture Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .169 |
|
|
Texture Wrap Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .170 |
|
|
Texture Level of Detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .173 |
|
|
Texture Environments and Texture Functions . . . . . . . . . . . . . . |
. . . .174 |
|
|
Specifying the Texture Environment . . . . . . . . . . . . . . . . . . |
. . . .175 |
|
|
Textured Terrain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .178 |
|
|
Building the Mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .178 |
|
|
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . .181 |
|
Part II |
Beyond the Basics . . . . . . . . . . . . . . . . |
183 |
Chapter 8 |
OpenGL Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. .185 |
|
Anatomy of an Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .185 |
|
Extension Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .186 |
|
Name Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .187 |
|
Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .187 |
|
Tokens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .188 |
TLFeBOOK
xiv Contents
Using Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .188
Checking the Name String . . . . . . . . . . . . . . . . . . . . . . . . . . . . .189
Obtaining the Function’s Entry Point . . . . . . . . . . . . . . . . . . . . .190
Declaring Enumerants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .191
WGL Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .191
Introduction to GLee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .192
Setting Up GLee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .193
Using GLee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .193
Using GLee with Core Extensions . . . . . . . . . . . . . . . . . . . . . . . .194
Extensions in Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .195
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .195
Chapter 9 More on Texture Mapping . . . . . . . . . . . . . . . . . . . . . . . . .197
More on Texture Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . .197
Sub-Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .197
Copying from the Color Buffer . . . . . . . . . . . . . . . . . . . . . . . . . .198
The Texture Matrix Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201
Texture Coordinate Generation . . . . . . . . . . . . . . . . . . . . . . . . . . . .202
Environment Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .205
Example: Reflective Cube Mapping . . . . . . . . . . . . . . . . . . . . . .206
Multitexturing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .208
Texture Units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .208
Specifying Texture Coordinates . . . . . . . . . . . . . . . . . . . . . . . . .210
Example: Multitextured Terrain . . . . . . . . . . . . . . . . . . . . . . . . .210
Texture Combine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .213
Example: Image Interpolation . . . . . . . . . . . . . . . . . . . . . . . . . .216
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .219
Chapter 10 Up Your Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . .221
Display Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221
Creating a Display List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .222
Filling a Display List with Commands . . . . . . . . . . . . . . . . . . . . .223
Executing Display Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .223
Display List Gotchas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224
Destroying Display Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225
Display Lists and Textures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .226
Vertex Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .226
Array-Based Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .228
TLFeBOOK
Contents xv
Enabling Vertex Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .228
Working with Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .229
Interleaved Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235
Vertex Arrays and Multitexturing . . . . . . . . . . . . . . . . . . . . . . . .237
Locking Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .238
Marbles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .239
Frustum Culling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .241
Determining the View Frustum . . . . . . . . . . . . . . . . . . . . . . . . .243
Testing Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .244
Testing Spheres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .244
Frustum Culling Applied . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .245
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .247
Chapter 11 Displaying Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249
Bitmap Fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249
Outline Fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253
Using glFont . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257
The Executable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257
The Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .258
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .258
Chapter 12 OpenGL Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261
What Is an OpenGL Buffer? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261
Clearing the Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262
Scissor Boxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262
The Color Buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .263
Alpha Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .263
Color Masking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .265
Logical Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .265
The Depth Buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .266
Depth-Comparison Functions . . . . . . . . . . . . . . . . . . . . . . . . . . .266
Read-Only Depth Buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .267
The Stencil Buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268
An Example of Stencil Testing . . . . . . . . . . . . . . . . . . . . . . . . . .270
The Accumulation Buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .271
Example: Using the Accumulation Buffer . . . . . . . . . . . . . . . . . .272
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .275
TLFeBOOK
xvi |
Contents |
|
|
|
Chapter 13 |
The Endgame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .277 |
|
|
The Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .277 |
|
|
Using OpenGL in the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .279 |
|
|
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .282 |
|
Part III |
Appendices . . . . . . . . . . . . . . . . . . . . . . |
283 |
|
Appendix A |
Answers to Review Questions and Exercises . . . . . . . . |
. .285 |
|
Appendix B |
Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. .295 |
|
|
Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .295 |
|
|
Game Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .295 |
|
|
Game Tutorials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .296 |
|
|
Flipcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .296 |
|
|
OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .297 |
|
|
Books . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .297 |
|
|
C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .297 |
|
|
Windows Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .297 |
|
|
3D Math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .298 |
|
|
OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .298 |
|
|
Graphics Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .298 |
|
|
Game Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .298 |
|
Appendix C What’s on the CD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. .299 |
|
|
|
Source Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .299 |
|
|
GLee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .299 |
|
|
Bonus Chapters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .300 |
|
|
Bonus Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . .300 |
|
|
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. .301 |
TLFeBOOK