Welcome to the official website for Beginning OpenGL Game Programming, available now from Course Technology PTR (formerly Premier Press). Here you will find information about what's contained in the book. You'll also find material supporting the book, including an FAQ and any errata we find.

Beginning OpenGL Game Programming is a book by Dave Astle and Kevin Hawkins, co-creators of GameDev.net. The book will teach you OpenGL, and then show you how to use it to create 3D games for Windows.

Where to get it

Beginning OpenGL Game Programming is available now at the following online booksellers:

You should also be able to find it at the following stores

  • Borders
  • CompUSA
  • Barnes and Noble
  • Best Buy

Table of Contents

Part I - The Basics
Chapter 0 - Introduction
0.1 - What You Should Know
0.2 - Your Tools
0.3 - Who Should Read This
0.4 - What we Will and Won't Cover
0.5 - About the Target Platform
0.6 - Using This Book
0.7 - What's New

Chapter 1 - The Exploration Begins… Again
1.1 - Why Make Games?
  1.1.1 - The World of 3D Games
1.2 - What is OpenGL?
  1.2.1 - OpenGL History
  1.2.2 - OpenGL Architecture
1.3 - Related Libraries
  1.3.1 - GLUT
  1.3.2 - SDL
1.4 - OpenGL vs. DirectX
1.5 - A Sneak Peek
1.5 - Summary

Chapter 2 - Creating a Simple OpenGL Application
2.1 - OpenGL and Microsoft Windows
  2.1.1 - Introduction to WGL
  2.1.2 - The Rendering Context
  2.1.3 - Pixel Formats
  2.1.4 - Going Fullscreen
  2.1.5 - A Complete Windows Application
2.2 -- Summary

Chapter 3 - OpenGL States and Primitives
4.1 - State Functions
  4.1.1 - Querying Numeric States
  4.1.2 - glIsEnabled()
  4.1.3 - Enabling and Disabling States
  4.1.4 - Querying String Values
  4.1.5 - Finding Errors
  4.1.6 - Giving OpenGL a Hint
4.2 - Handling Primitives
  4.2.1 - Drawing Points in 3D
  4.2.2 - Drawing Lines in 3D
  4.2.3 - Drawing Polygons in 3D
  4.2.4 - Using Primitives: Triangles and Quads Example
4.3 - Attributes
4.4 - Summary
  4.4.1 - What You Have Learned
  4.4.2 - Review Questions
  4.4.3 - On Your Own 

Chapter 4 - Coordinate Transformations and OpenGL Matrices
4.1 - Understanding Coordinate Transformations
  4.1.1 - Eye Coordinates
  4.1.2 - Viewing Transformations
  4.1.3 - Modeling Transformations
  4.1.4 - Projection Transformations
  4.1.5 - Viewport Transformations
4.2 - OpenGL and Matrices
  4.2.1 - The Modelview Matrix
  4.2.2 - Translation
  4.2.3 - Rotation
  4.2.4 - Scaling
  4.2.5 - Matrix Stacks
  4.2.6 - The Robot Example
4.3 - Projections
  4.3.1 - Orthographic
  4.3.2 - Perspective
  4.3.3 - Setting the Viewport
  4.3.4 - Projection Example
4.4 - Manipulating the Viewpoint
  4.4.1 - Using the gluLookAt() Function
  4.4.2 - Using the glRotate() and glTranslate() Functions
  4.4.3 - Creating Your Own Custom Routines
4.5 - Using Your Own Matrices
  4.5.1 - Loading Your Matrix
  4.5.2 - Multiplying Matrices
4.6 - Summary
  4.6.1 - What You Have Learned
  4.6.2 - Review Questions
  4.6.3 - On Your Own

Chapter 5 - Adding Colors, Blending, and Lighting
5.1 - How Does Color Work?
5.2 - Using Colors in OpenGL
  5.2.1 - Setting the Color
  5.2.2 - A Colorful Example
5.3 - Shading
5.4 - Lighting in OpenGL
  5.4.1 - OpenGL Lighting and the Real World
  5.4.2 - Light Sources
  5.4.3 - Materials
  5.4.4 - Normals
  5.4.5 - The Lighting Model
5.5 - Blending
  5.5.1 - Transparency
5.6 - Fog
  5.6.1 - OpenGL Fog
  5.6.2 - Fog Coordinates
  5.6.3 - Fog in Action
5.7 -- Summary

Chapter 6 - Bitmaps and Images with OpenGL
6.1 - The OpenGL Bitmap
  6.1.1 - Positioning the Bitmap
  6.1.2 - Drawing the Bitmap
  6.1.3 - An OpenGL Bitmap Example
6.2 - Using Images
  6.2.1 - Drawing Image Data
  6.2.2 - Reading from the Screen
  6.2.3 - Copying Screen Data
  6.2.4 - Magnification, Reduction, and Flipping
6.3 - Managing Pixel Storage
6.4 - Targa Image Files
  6.4.1 - The .TGA File Format
  6.4.2 - Loading .TGA Files
6.5 - Summary
  6.5.1 - What You Have Learned

Chapter 7 - Texture Mapping 
7.1 - An Overview of Texture Mapping
7.2 - Texture Coordinates
7.3 - Using the Texture Map
  7.3.1 - Texture Objects
  7.3.2 - Specifying Textures
    7.3.2.1 - 2D Textures
    7.3.2.2 - 1D Textures
    7.3.2.3 - 3D Textures
    7.3.2.4 - Cube Map Textures
  7.3.3 - Texture Filtering
7.4 - Mipmaps
  7.4.1 - Mipmaps and the OpenGL Utility Library
  7.4.2 - Automatic Mipmap Generation
7.5 - Texture Parameters
  7.5.1 - Texture Wrap Modes
  7.5.2 - Texture Level of Detail
7.6 - Texture Environments and Texture Functions
  7.6.1 - Specifying the Texture Environment
7.7 - Textured Terrain
  7.7.1 - Building the Mesh
7.10 -- Summary
  7.10.1 - What You Have Learned

Part II - Beyond the Basics
Chapter 8 - OpenGL Extensions
8.1 - Anatomy of an Extension
  8.1.1 - Extension Names
  8.1.2 - Name Strings
  8.1.3 - Functions
  8.1.4 - Tokens
8.2 - Using Extensions
  8.2.1 - Checking the Name String
  8.2.2 - Obtaining the Function's Entry Point
  8.2.3 - Declaring Enumerants
8.3 - WGL Extensions
8.4 - Introduction to GLee
  8.4.1 - Setting up GLee
  8.4.2 - Using GLee
  8.4.3 - Using GLee with Core Extensions
8.5 - Extensions in Action
10.6 - Summary
  10.6.1 - What You Have Learned

Chapter 9 - More on Texture Mapping
9.1 - More on Texture Specification
  9.1.1 - Sub-Images
  9.1.2 - Copying from the Color Buffer
9.2 - The Texture Matrix Stack
9.3 - Texture Coordinate Generation
  9.3.1 - Environment Mapping
9.4 - Multitexturing
  9.4.1 - Textured Terrain
  9.4.2 - Texture Combine
9.5 - Summary

Chapter 10 - Display Lists and Vertex Arrays
10.1 - Display Lists
  10.1.1 - Creating a Display List
  10.1.2 - Filling a Display List with Commands
  10.1.3 - Executing Display Lists
  10.1.4 - Display List Gotchas
  10.1.5 - Destroying Display Lists
  10.1.6 - Display Lists and Textures
10.2 - Vertex Arrays
  10.2.1 - Array-based Data
  10.2.1 - Enabling Vertex Arrays
  10.2.2 - Working with Arrays
  10.2.3 - Interleaved Arrays
  10.2.4 - Vertex Arrays and Multitexturing
  10.2.5 - Locking Arrays
  10.2.6 - Example: Marbles Demo
10.3 - Frustum Culling
  10.3.1 - Determining the View Frustum
10.3.2 - Testing Points
  10.3.3 - Testing Spheres
  10.3.4 - Frustum Culling Applied
10.4 - Summary
  10.4.1 - What You Have Learned

Chapter 11 - Displaying Text
11.1 - Bitmap Fonts
11.2 - Outline Fonts
11.3 - Texture Mapped Fonts
11.4 -- Summary

Chapter 12 - OpenGL Buffers
12.1 - What is an OpenGL Buffer?
  12.1.1 - Clearing the Buffers
  12.1.2 - Scissor Boxes
12.2 - The Color Buffer
  12.2.1 - Alpha Test
  12.2.2 - Color Masking
  12.2.3 - Logical Operations
12.3 - The Depth Buffer
  12.3.1 - Depth Comparison Functions
  12.3.2 - Read-Only Depth Buffer
12.4 - The Stencil Buffer
  12.4.1 - An Example of Stencil Testing
12.5 - The Accumulation Buffer
  12.5.1 - Using the Accumulation Buffer
12.6 -- Summary
  12.6.1 - What You Have Learned
Chapter 13 - The Endgame