Game Engine Development
This is the errata page for the Foundations of Game Engine Development book series. Corrections are listed by volume and printing.
To find out which printing you have, look on the copyright page. Errors listed for any particular printing also appear in earlier printings,
but were corrected in all later printings.
Volume 1: Mathematics
- There are no known errors in the fifth printing.
- Page 92. In the second line preceding Equation (2.72), the reference to Equation (2.70) should instead be a reference to Equation (2.71).
- Page 21. The end of the sentence preceding Equation (1.33) should read “then the dot product can also be expressed as”.
- Page 18. The third line following Equation (1.28) should begin with “v = (0,0,1)”.
- Page 21. In the caption for Listing 1.6, the listing number should be set in bold type.
- Page 45. In the paragraph that begins with “Steps A and B are called pivoting”, the fourth line should read
“by choosing the largest entry in each column because this causes the scalar factors”.
- Page 65. In Equation (2.23), all of the off-diagonal elements in the left matrix should be negated. For example, the (0,1) and (1,0) entries should both be −axay.
Volume 2: Rendering
- There are no known errors in the third printing.
- Page 77. In Listing 6.5, the last row of the matrix should be
0.0F, 0.0F, 0.0F, 1.0F.
- Page 182. In Equation (8.66), both minus signs should be plus signs.
- Page 184. Related to previous item. In Equation (8.73), both minus signs should be plus signs.
- Page 286. There is a bug in the last part of Listing 9.20. (The code on this website has been corrected.) The final loop should be the following:
for (int32 i = 0; i < vertexCount; i++)
bool cull = false; int32 j = i & 1;
const Vector3D *v2 = &vertex[i];
Vector3D planeNormal = Normalize(Cross(*v2, *v1));
for (int32 k = 0; k < 4; k++)
const Vector3D& frustumNormal = frustumPlane[k].GetNormal();
float d = Dot(frustumNormal, *v2);
vertexDistance[j ^ 1][k] = d;
// Cull edge lying in frustum plane, but only if its extrusion points inward.
if ((fmax(d, vertexDistance[j][k]) < kOccluderEpsilon) &&
(Dot(planeNormal, frustumNormal) > 0.0F)) cull = true;
if (!cull) occluderPlane[planeCount++] = Plane(planeNormal, 0.0F) * McamInverse;
v1 = v2;