3D Game Engine Design by David H. Eberly
August 10, 2002
Written by David H. Eberly Hardcover
561 pages Book & CD-ROM 1st edition (September 2000)
Morgan Kaufmann Publishers
So you know OpenGL and you want to write your own 3D game engine? Then
this book is for you; more or less. I have been working on my own game
engine while learning more advanced OpenGL in the process and found this
book to be a great help. However, it is not a complete guide and other
supporting texts will be necessary in order to fully dive into the world
of 3D graphics. In a nutshell, the book contains two important topics
for working with 3D: the structure of a 3D engine and the 3D equations
that need to be implemented.
Each chapter in the book details a new concept for the engine. The
second chapter is probably the most useful for the majority of us. It
has a lot of information on 3D geometry and its application in a game
engine. The book goes on to introduce the process of creating an
efficient scene including how to use culling and clipping (removing
objects from the rendering queue that are not in the scene in order to
speed up rendering). It also covers “picking” (mouse selection within a
3D environment), collision detection and bounce. Any developer who has
written or tried to write a 3D game engine may find the chapter on
collision detection worth the price of the book alone.
After these, the chapters become very advanced and may not be useful for
all game engines. The chapter on curves was an interesting read but was
far out of my league. Other chapters covered surfaces (including rounded
surfaces); dynamic objects (moving objects); bones within a character;
changing the level of detail as an object moves further from the camera;
and working with terrain. I found the latter to be extremely
interesting; it gave some very useful equations for creating landscapes
that, when further from the camera, began to drop polygons but still
retained the general look. Around chapter twelve, the chapters started
covering ideas that seemed very abstract and did not make a whole lot of
sense to me. The final chapter provides some good examples of special
effects such as lens flares and particle systems.
Although reading theory and application of 3D game engines is all fine
and good, what I was really looking for in this book were the equations.
How do you know if a line (defined by two points) is intersecting a
plane (defined by three points)? This book will tell you exactly how to
do it. It does not just do points, lines and planes though, it also
discusses spheres, ellipses, capsules and many other mathematical
objects. In addition, the author covers polygon reduction, with the
specific example of how to take a two-hundred polygon object and reduce
it to just twenty polygons. Equations like these are priceless when it
comes to coding a game engine. However, they are not explained in the
book with source code examples but by using matrix and vector algebra.
Luckily the book includes a CD which has nearly every equation discussed
in the book implemented in a C++ source file.
Unfortunately, the book is written for an audience of people who have a
basic understanding of vector and matrix algebra, linear algebra,
multivariate calculus, and data structures. Depending on your
mathematics background, you may find some chapters too advanced or,
alternatively, just right. Fortunately, the source code goes a long way
in helping “mathematically-challenged” programmers to include certain
features in their engine without necessarily understanding why they
I found the title of the book slightly misleading. Programmers may
purchase the book thinking that it will step them through the process of
creating a feature-rich game engine but that is not quite what it does.
This book helps you through the tougher aspects of creating a game
engine (such as the mathematics) but it does not include anything that
discusses in detail certain aspects like realistic physics (character
movement, realistic terrain for example) or the simplifications that can
be made to optimise a game/opengl/downloads.html”>3D API on the
Macintosh platform, many Mac game developers are looking for
documentation which uses it to help them with their projects. However,
you should be aware that this book is not a guide to OpenGL. In fact, it
only discusses OpenGL very briefly. So my advice to beginner OpenGL
programmers is use this text along with an OpenGL specific guide and
also download the various tutorials at NeHe.gamedev.net.
With Mac OS X and Cocoa on developers’ minds, I expect to see more books
in the future with the word “Mac” somewhere on the cover but many of the
titles available today are targeted at Windows developers. In the case
of this book, the publisher, rather annoyingly, printed that the
included CD-ROM was for use on Windows and Linux machines. As a Mac
enthusiast, I was slightly turned off by the comment but from what I
have seen of the source code on the CD, Mac programmers should have no
problems using it. In addition to forgetting the Mac platform, a quick
review of the CD-ROM’s license gave me pause, which was a bit too
restrictive in my opinion, so if you plan on using the code I recommend
you read it carefully to avoid any legal problems.
Overall, the author shows a deep understanding for the material that
he covers in the text. Unfortunately that does not mean you will too.
That said, this book is a must have for anyone interested in developing
their own professional quality 3D game engine, even if you cannot
understand it all. Not only does it cover the basics but it also
discusses some of the technologies that will push the game consoles of
tomorrow (e.g. Nintendo’s GameCube and Microsoft’s X-Box).
In conclusion, if you are thinking of writing your own 3D game
engine then I would begin with downloading the tutorials from
NeHe.gamedev.net first and then, once you have a solid understanding of
OpenGL, pick up this book.
Highlights of topics covered:
Geometrical transformations and coordinate systems
Quaternions and Euler angles
Distance methods for a variety of shapes
Introduction to the graphics pipeline
Model and world coordinates
Projecting perspective and Camera models
Efficiency issues for clipping and lighting
Skinning Techniques for generating game terrain
Character animation, using keyframe animation and inverse kinematics
Collision detection for static and dynamic graphical objects
Geometrical level of detail considerations
SFX: lens flare, bump mapping, volumetric fogging, projected light and
shadows, particle systems, morphing techniques
C++ language features for effective object-oriented design
Please log in or register to post a reply.
you really like these articles don’t you? ;)
Trying to make this site alive :D .
I like those articles :lol:
hey! so do I!
yes, nkharrat is doing a good job with article contribution. keep it up.
Just a note: just to comply with copyright, please mention any resources
There are many sources used… I forgot them :confused:. I will
certainly do that next time..