3D Game Engine Design, Second Edition: A Practical Approach to Real-Time Computer Graphics (The Morgan Kaufmann Series in Interactive 3D Technology) 
This text is a virtual encyclopedia of expertise that's based on the author's own work and research in the gaming industry. It provides the mathematical notation, algorithms, and C++ code (on the accompanying CD-ROM) that are needed to build fast and maintainable game engines. Early sections start with the basics, with the math that's used to work with common 3-D objects (like spheres and boxes). Highlights include a high-powered review of quaternion algebra--in many cases, the preferred way to transform 3-D data.
The chapters on graphics pipelines explain the math that's behind representing and rendering a 3-D world in 2-D with intervening effects like lighting and texture mapping. A variety of current algorithms are provided for representing 3-D scenes, efficient picking (which allows a programmer to determine the object in a 3-D world that has been selected), and collision detection (in which objects collide virtually). In the game software of today, curves--and not individual triangles or polygons--often are used to represent 3-D objects. Algorithms that are used to turn curves into rendered surfaces are provided, too.
Later sections look at the current thinking about animation techniques for characters (including key frames, inverse kinematics, and skinning (in which digital skin is fitted over digital bone to create more realistic-looking movement)). How to represent terrain inside virtual worlds also is explained. The book closes with excellent material on such cutting-edge special effects as lens flare and projected shadows, which can add an extra level of realism to a video game. An appendix examines guidelines for designing object-oriented game software in C++.
Filled with mathematical insight and expert code that puts each principle or algorithm to work, 3D Game Engine Design provides an expert view of what goes into building a state-of-the-art game engine. --Richard Dragan
Topics covered: Mathematical methods and sample source code for 3-D game development Geometrical transformations Coordinate systems Quaternions Euler angles Standard 3-D objects: spheres, oriented boxes, capsules, lozenges, cylinders, ellipsoids Distance methods for a variety of shapes Introduction to the graphics pipeline Model and world coordinates Projecting perspective Camera models Culling techniques Surface and vertex attributes Rasterizing Efficiency issues for clipping and lighting Hierarchical scene representation, using trees and scene graphs Picking algorithms for a variety of 3-D shapes Collision detection for static and dynamic graphical objects Oriented bounding-box (OBB) trees Basics of curves and special curves (including Bezier curves and various splines) Curves (generating surfaces from curves by using different techniques) Character animation, using keyframe animation and inverse kinematics Skinning Geometrical level of detail considerations Techniques for generating game terrain Spatial sorting and binary space partitioning (BSP) Special effects: lens flare, bump mapping, volumetric fogging, projected light and shadows, particle systems, morphing techniques C++ language features for effective object-oriented design Reference to the numerical methods required for game mathematics
Reviews
Even though the title is misleading, it's still a great book if you're looking for a reference on 3D game engine algorithms.
This book is well-written and contains a lot of useful information. The author is one of the few people qualified to write a book of this nature, and he has done an admirable job. That said, the title is pretty misleading, since the book has very little to say about the design of a game engine. Instead, it focuses on implementation details and the math involved with them. Topics covered include geometrical methods, the graphics pipeline, tree-based scene graphics, intersections, collision detection, curves and surfaces, animation, terrain, spatial sorting (quad/octrees, portals, BSPs), special effects, object-oriented infrastructure, and numerical methods. The author doesn't gloss over anything, providing detailed mathematical derivations of how things work.
Unfortunately, the math is so heavy that unless you're already pretty familiar with the subject matter, you'll probably have a hard time with the book. Therefore, I think that the target audience is much smaller that the group that would be attracted by the title.
If you're involved in game engine development or just want to deepen your knowledge, I think you'll appreciate the fact that the author doesn't pull any punches. Otherwise, you'll probably be more interested in the author's new book 3D Game Engine Architecture, which was recently released.
Eberly gives an in-depth look to game development and provides adequate solutions to every problem introduced. He does not cover every possible way each problem could be solved nor does he spend a lot of time introducing and defining each problem. Instead he assumes the reader has a general understanding of the problem and gives a quick review followed by one or two detailed solutions using the most common techniques. Eberly's writing style makes it easy to follow the accumulation of segments to the final solution. His math notation on the other hand was confusing at times. A few places he supplemented words with mathematical notation and allowed the math to do the explaining, which made it seem like he was unable to put it into words.
I have found this book to be very useful and have added it to my reference library of game development, but I would not recommend this book to someone just starting to study game development. For a reader to glean anything of use out of this book he would have to be experienced in object oriented programming, have a basic understanding of 3D rendering technologies and have a working knowledge of calculus and linear algebra.
