Contents

Preface

Acknowledgments

About the Author

1 Game Programming Overview

Setting Up a Development Environment

Microsoft Windows

Apple macOS

Getting This Book’s Source Code

Beyond the C++ Standard Library

The Game Loop and Game Class

Anatomy of a Frame

Implementing a Skeleton Game Class

Main Function

Basic Input Processing

Basic 2D Graphics

The Color Buffer

Double Buffering

Implementing Basic 2D Graphics

Drawing Walls, a Ball, and a Paddle

Updating the Game

Real Time and Game Time

Logic as a Function of Delta Time

Updating the Paddle’s Position

Updating the Ball’s Position

Game Project

Summary

Additional Reading

Exercises

Exercise 1.1

Exercise 1.2

2 Game Objects and 2D Graphics

Game Objects

Types of Game Objects

Game Object Models

Integrating Game Objects into the Game Loop

Sprites

Loading Image Files

Drawing Sprites

Animating Sprites

Scrolling Backgrounds

Game Project

Summary

Additional Reading

Exercises

Exercise 2.1

Exercise 2.2

Exercise 2.3

3 Vectors and Basic Physics

Vectors

Getting a Vector between Two Points: Subtraction

Scaling a Vector: Scalar Multiplication

Combining Two Vectors: Addition

Determining a Distance: Length

Determining Directions: Unit Vectors and Normalization

Converting from an Angle to a Forward Vector

Converting a Forward Vector to an Angle: Arctangent

Determining the Angle between Two Vectors: Dot Product

Calculating a Normal: Cross Product

Basic Movement

Creating a Basic MoveComponent Class

Creating an InputComponent Class

Newtonian Physics

Linear Mechanics Overview

Computing Positions with Euler Integration

Issues with Variable Time Steps

Basic Collision Detection

Circle-Versus-Circle Intersection

Creating a CircleComponent Subclass

Game Project

Summary

Additional Reading

Exercises

Exercise 3.1

Exercise 3.2

Exercise 3.3

4 Artificial Intelligence

State Machine Behaviors

Designing a State Machine

Basic State Machine Implementation

States as Classes

Pathfinding

Graphs

Breadth-First Search

Heuristics

Greedy Best-First Search

A* Search

Dijkstra’s Algorithm

Following a Path

Other Graph Representations

Game Trees

Minimax

Handling Incomplete Game Trees

Alpha-Beta Pruning

Game Project

Summary

Additional Reading

Exercises

Exercise 4.1

Exercise 4.2

5 OpenGL

Initializing OpenGL

Setting Up the OpenGL Window

The OpenGL Context and Initializing GLEW

Rendering a Frame

Triangle Basics

Why Polygons?

Normalized Device Coordinates

Vertex and Index Buffers

Shaders

Vertex Shaders

Fragment Shaders

Writing Basic Shaders

Loading Shaders

Drawing Triangles

Transformation Basics

Object Space

World Space

Transforming to World Space

Matrices and Transformations

Matrix Multiplication

Transforming a Point by Using a Matrix

Transforming to World Space, Revisited

Adding World Transforms to Actor

Transforming from World Space to Clip Space

Updating Shaders to Use Transform Matrices

Texture Mapping

Loading the Texture

Updating the Vertex Format

Updating the Shaders

Alpha Blending

Game Project

Summary

Additional Reading

Exercises

Exercise 5.1

Exercise 5.2

6 3D Graphics

The Actor Transform in 3D

Transform Matrices for 3D

Euler Angles

Quaternions

New Actor Transform in Action

Loading 3D Models

Choosing a Model Format

Updating the Vertex Attributes

Loading a gpmesh File

Drawing 3D Meshes

Transforming to Clip Space, Revisited

Out with the Painter’s Algorithm, in with Z-Buffering

The BasicMesh Shader

The MeshComponent Class

Lighting

Revisiting Vertex Attributes

Types of Lights

Phong Reflection Model

Implementing Lighting

Game Project

Summary

Additional Reading

Exercises

Exercise 6.1

Exercise 6.2

7 Audio

Bootstrapping Audio

FMOD

Installing FMOD

Creating an Audio System

Banks and Events

The SoundEvent Class

3D Positional Audio

Setting Up a Basic Listener

Adding Positional Functionality to SoundEvent

Creating an AudioComponent to Associate Actors with Sound Events

The Listener in a Third-Person Game

The Doppler Effect

Mixing and Effects

Buses

Snapshots

Occlusion

Game Project

Summary

Additional Reading

Exercises

Exercise 7.1

Exercise 7.2

8 Input Systems

Input Devices

Polling

Positive and Negative Edges

Events

Basic InputSystem Architecture

Keyboard Input

Mouse Input

Buttons and Position

Relative Motion

Scroll Wheel

Controller Input

Enabling a Single Controller

Buttons

Analog Sticks and Triggers

Filtering Analog Sticks in Two Dimensions

Supporting Multiple Controllers

Input Mappings

Game Project

Summary

Additional Reading

Exercises

Exercise 8.1

Exercise 8.2

9 Cameras

First-Person Camera

Basic First-Person Movement

Camera (Without Pitch)

Adding Pitch

First-Person Model

Follow Camera

Basic Follow Camera

Adding a Spring

Orbit Camera

Spline Camera

Unprojection

Game Project

Summary

Additional Reading

Exercises

Exercise 9.1

Exercise 9.2

10 Collision Detection

Geometric Types

Line Segments

Planes

Bounding Volumes

Intersection Tests

Contains Point Tests

Bounding Volume Tests

Line Segment Tests

Dynamic Objects

Adding Collisions to Game Code

The BoxComponent Class

The PhysWorld Class

Ball Collisions with SegmentCast

Testing Box Collisions in PhysWorld

Player Collision Against the Walls

Game Project

Summary

Additional Reading

Exercises

Exercise 10.1

Exercise 10.2

Exercise 10.3

11 User Interfaces

Font Rendering

UI Screens

The UI Screen Stack

The Pause Menu

Buttons

Dialog Boxes

HUD Elements

Adding an Aiming Reticule

Adding Radar

Localization

Working with Unicode

Adding a Text Map

Other Localization Concerns

Supporting Multiple Resolutions

Game Project

Summary

Additional Reading

Exercises

Exercise 11.1

Exercise 11.2

Exercise 11.3

12 Skeletal Animation

Foundations of Skeletal Animation

Skeletons and Poses

The Inverse Bind Pose Matrix

Animation Data

Skinning

Implementing Skeletal Animation

Drawing with Skinning Vertex Attributes

Loading a Skeleton

Loading the Animation Data

The Skinning Vertex Shader

Updating Animations

Game Project

Summary

Additional Reading

Exercises

Exercise 12.1

Exercise 12.2

13 Intermediate Graphics

Improving Texture Quality

Texture Sampling, Revisited

Mipmapping

Anisotropic Filtering

Rendering to Textures

Creating the Texture

Creating a Framebuffer Object

Rendering to a Framebuffer Object

Drawing the Mirror Texture in the HUD

Deferred Shading

Creating a G-Buffer Class

Writing to the G-buffer

Global Lighting

Adding Point Lights

Improvements and Issues

Game Project

Summary

Additional Reading

Exercises

Exercise 13.1

Exercise 13.2

14 Level Files and Binary Data

Level File Loading

Loading Global Properties

Loading Actors

Loading Components

Saving Level Files

Saving Global Properties

Saving Actors and Components

Binary Data

Saving a Binary Mesh File

Loading a Binary Mesh File

Game Project

Summary

Additional Reading

Exercises

Exercise 14.1

Exercise 14.2

A Intermediate C++ Review

Index

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.16.139.62