textbook review copies
Quick Search      
      
Search
Browse by Topic
Browse by Title
Browse by Author
View Out Of Print
About CRM
Author Guidelines
Contact Us
Distributors
Ordering (20% Off!)
Home
Sign In
Shopping Cart
Request Alerts

Game Programming Gems 5

Kim Pallister

Table of Contents Book/CD Update Reviews

With every new volume, the Game Programming Gems series continues to provide a road map through the vast array of development challenges facing today‚s game programmers. With the wisdom of many industry experts, Gems 5 includes 62 newly unearthed gems that were polished up for your reading pleasure. These gems are filled with practical insights and techniques that will solve your current problems and help inspire future games. You and your team need to develop for today‚s platforms, while preparing for the new technology looming on the horizon and with the tools provided here, you can! So dig into this new collection and put it to work.

On the CD

The CD-ROM is packed with source code and listings from the book and demos to compliment the articles. Windows demos were compiled using Microsoft Visual C++® 6.0 (.dsw files) or Microsoft Visual C++ 7.0 (.sln files). OpenGL® utility Toolkit (GLUT v3.7.6), Sun‚s J2SE?, and Microsoft DirectX® 9 SDK are also included.

Section Highlights

  • GENERAL PROGRAMMING: parsing text data in games, using templates for reflection in C++, a generic pager, CSG construction using BSP trees, building Lua into games
  • MATHEMATICS: geometric algebra for computer graphics, minimal acceleration hermite curves, minimal numerical approximation, oblique view frustums for mirrors and portals
  • ARTIFICIAL INTELLIGENCE: fast target ranking using an AI potential field, parallel AI development with PVM, beyond A*, Dynamic A star, cover finding with navigation meshes
  • PHYSICS: aerodynamics for game physics, realistic cloth animation using the mass-spring model, pressurized soft-body model, realistic camera movement in a 3D car simulator
  • GRAPHICS: dimensional impostors for realistic trees and forests, gridless controllable fire, explosion effects using billboard particles, gemstone rendering, procedural level generation
  • NETWORK & MULTIPLAYER: keeping an MMOG online & persistent, seamless world server, a vulgarity filtering system, remote procedure call system, safe random number systems
  • AUDIO: multithreaded audio techniques, sound management by group, using 3D surfaces as audio emitters, reverb based on feedback delay networks, single-speaker speech recognition

EDITOR BIO

Kim Pallister is a Technical Marketing Manager and Processor Evangelist with Intel’s Software and Solutions Group. He is currently focused on realtime 3D graphics technologies and game development. He has contributed many articles to the series and was the Programming section editor in Volume 3.

ISBN 1-58450-352-1
PRICE $69.95
PUB DATE February 24, 2005
FORMAT Clothbound/CD (Windows/Linux ) - 791 pages
SYSTEM REQUIREMENTS Windows®: Intel® Pentium ® series, AMD Athlon or newer processor, Windows® XP (64MB RAM) or Windows® 2000 (128MB RAM) or later required. 3D graphics card required for some sample applications and DirectX® 9 and GLUT 3.7 or newer required. Linux systems require the Linux kernel 2.4.x or later, XFree86 4.0, and OpenGL driver, glibc 2.1 or newer. Mesa can be used in place of 3D hardware support. Videos require the DivX codec.


Book/CD Update

Article 7.4 errata:

Page 733
In the formula for the Householder reflection, a (2/n) is missing:

2
A_n = I_n - - U_n
n

Page 735
Line 16 of article text, a half (1/2) is missing:

"... the desired half life at the low end of the spectrum at f = 0 (DC), and \lambda_H = \lambda( 1/2 f_s ) ..."

Page 735
the formula for g_i(f) has a missing exponent:

-m_i / \lambda(f)
g_i(f) = 2

Page 739
line 7 of article text, must read
"... and recalculates the filter alphas \alpha_i from \beta_i' every time dp changes."

Page 35 second paragraph
"GetObjectManagar() as a global"
Should read
"GetObjectManagar() is a global"

Page 36 line 3
spurious apostrophe in "Dest'royMe()" (should read: "DestroyMe()")

Page 41
paragraph that begins "The class name will be..."
The "@T:" shouldn't be there.

Page 63
first paragraph, line 6
The correct equation in the sixth line is O(n) (instead of )

Page 76
second to last paragraph
"Determining intersection against an axis-align bounding box is almost [...]"
Should read
"Determining intersection against an axis-aligned bounding box is
almost [...]"
(note conjugation of "aligned")

Page 100, line 10
"*** Insert CD Icon Here ***"" -- This text should be deleted.

Page 103, first paragraph
"Subtraction (_)"
Should read
"Subtraction (-)"

Page 105, line 6
for_each(vertex in m_poins)
Should read
for_each(vertex in m_points)

Page 108, table under paragraph 2
"Subtraction _"
Should read
"Subtraction -" (note hyphen instead of underscore)

Page 111
Two changes. Not errors, but the code is a bit confusing

Because of the shadowing of the 'node' variable. The following will make
it more readable:
Page 111, First line of the sample code:
void Bsp::Recurs_Clip(int node,
Should read
void Bsp::Recurs_Clip(int node_idx,

111, fifth line of the sample code
BspNode node = GetNode(node)
Should read
BspNode node = GetNode(node_idx)

Page 596
Unfortunately the author of this article did not provide the files as referenced here, so there are no files available for the example of the fixed-function style pipeline using recombinant shaders.

Page 63, First Paragraph.
The correct equation in the the sixth line is O(n) (instead of ).
Article 4.5
Source Code and demo update for article 4.5


Page 204
On page 204, figure 2.1.3 (basis of CV) the 6th and 7th term should be e1 ^ e3 and e2 ^ e3 .
The examples on page 208, figure 2.1.11 is incorrect, for the given A and B. ie A^B,AB,A_B should be corrected.


Article 1.6
In article 1.6 “Improved Frustum Culling"  the formulation is slightly off in cFrustum::ClassifySphere. The radius of the sphere must be divided by the constant value cos(fov/2). In your figure 1.6.7, if you actually move the sphere shown so that its leftmost point touches the  rLimit line, according to the test the sphere is outside the frustum. But actually, the sphere will overlap the frustum along the upper-left edge of the sphere. To make sure the sphere does not overlap the frustum, you need to move it out further than the radius, you need radius/cos(fov/2). Figure attached.

The code for right/left testing would then be something like:

float r = OP * RightVector;
float rLimit = rFactor * f;
float scaledRadius = Radius / cos(fov/2); // this cosine term should

be computed once and saved, of course

if ( r < -rLimit-scaledRadius || rLimit+scaledRadius < r ) return false;

rLimit is the distance from the center line to the edge of the frustum at the sphere's distance from the eye.
Instead of moving out by the radius, you need to move out by a bit more to ensure that the sphere doesn't hit the frustum further out.

Odds are that most people using this code won't notice the problem,
since bounding spheres are rarely tight against the object. But in
theory this problem means that the sphere could be rejected when it
should not be.

Thanks to Eric Haines for this catch.



CHARLES RIVER MEDIA
EMail Charles River Media Back to Charles River Media's Homepage ©1996- Charles River MediaAll Rights Reserved
Designed by DaLee & Company, Inc.
Disclaimer