Apr 02 Book Review
Volume Number: 18 (2002)
Issue Number: 04
Column Tag: Review
Book Review: 3D Game Engine Design
by Ron Davis
There are a lot of game programming books out there. They use many different methodologies to teach you something about game programming. 3D Game Engine Design by David H. Eberly is a specialize graphic algorithm book. As the author says in his introduction, most graphic algorithm books either show you code to implement games, or they give you in-depth discussion of 3D algorithms that aren't really useful for the game programmer. This book is in the middle. It is a deep reference of 3D programming, but it focuses on the things you need for the real time graphics of games.
I have to confess much of the math in this book was over my head. It isn't for those of us who didn't pay enough attention to those calculus classes. If this sentence from the introduction of the book scares you, the book isn't for you: "It is assumed that the reader's background includes a basic understanding of vector and matrix algebra, linear algebra, multivariate calculus and data structures."
Even given that caveat I delved on into the book. It is first and foremost a reference. Each aspect of 3D engine development is covered, with no one part being dependent on another. If you do this kind of development, you need this book on your book shelf. There is also a CD that comes with the book that includes a full 3D graphic engine, but, alas, it is not very Mac friendly.
The first chapter is an introduction to the book and how it is organized. The second chapter discusses geometrical methods used to map three dimensional objects onto a two dimensional screen, including transformations, coordinate systems, quaternions, Euler angles and distance methods. There is also a discussion of common shapes like spheres, capsules, cylinders etc.
Chapter 3 discusses the graphic pipeline, which is how a 3D game works, including perspective projection, camera models, culling and clipping. There is also a discussion of surface and vertex attributes including textures, lighting, transparency and fog. According to the summary at the end of the chapter, all of this information is not needed if you are using a 3D API like OpenGL.
No matter what you use for a render, you will have to organize the scene you are going to feed the renderer. The book begins a discussion of these issues with Chapter 4, Hierarchical Scene Representations. It discusses means of organizing objects so they are grouped allowing for easier transformation, collision detection, rendering and persistence.
Picking is the subject of Chapter 5, which is the means of translating a click on the screen to a 3D object in the scene. The author takes a more generalized approach and handles collision detection from any 2D point for a ray into the 3D world. This allows for determining if things like laser beams hit 3D objects.
Chapter 6 covers collision detection. The author notes this can be a very complex problem and that much of the code a game can be taken up with it. He notes at the beginning of the chapter that this needs to be taken into account at design time. The rest of the chapter is dedicated to collisions of various types of objects.
Chapter 7 covers curves which may not at first be obviously used in games, but which the author discusses anyway. This leads to surfaces in Chapter 8, which are a growing part of 3D game engines. The chapter covers different kinds of curves and how to subdivide them.
Chapter 9 is a short chapter on animation covering key frame animation, inverse kinematics and skinning. The author discusses how to create different levels of detail in a 3D scene on demand in chapter 10.
One of the cooler things in 3D to me is terrain generation and that is topic of chapter 11. He discusses an algorithm used to minimize the amount of data and calculations needed to render landscapes.
The last two chapters of the book cover spatial sorting techniques and special effects. The book concludes with an appendix on object oriented infrastructure and numerical methods as wells as a complete glossary.
Ron Davis is a long time Macintosh Software Engineer, having worked for companies like Apple, and Metrowerks on a variety of products from development tools to anti-virus software.