Foundations

of

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.

Foundations of Game Engine Development, Volume 1: Mathametics

Volume 1: Mathematics

Sixth Printing

  • There are no known errors in the sixth printing.

Fifth Printing and Earlier

  • Page 162. Every term in the right side of Equation (4.58) should be negated. It's still the same line, but it points in the opposite direction.
  • Page 169. Related to previous item. In Listing 4.1, each component of the returned line should be negated. (The code on this website has been corrected.)

Fourth Printing and Earlier

  • 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).

Third Printing and Earlier

  • Page 21. The end of the sentence preceding Equation (1.33) should read “then the dot product can also be expressed as”.

Second Printing and Earlier

  • Page 18. The third line following Equation (1.28) should begin with “v = (0,0,1)”.

First Printing

  • 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.
Foundations of Game Engine Development, Volume 2: Rendering

Volume 2: Rendering

Fourth Printing

  • Page 249. In Listing 9.10, the last return statement has an extra opening parenthesis. It should read return (Vector3D(0.0F, v.z, −v.y));

Third Printing and Earlier

  • Page 8. The end of the fourth line should read "but it also occurs".

Second Printing and Earlier

  • Page 77. In Listing 6.5, the last row of the matrix should be 0.0F, 0.0F, 0.0F, 1.0F.

First Printing

  • 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;
    }