__Errata__

This is a list of errata in the book *
3D Computer Graphics: A mathematical introduction with OpenGL,
*by Sam Buss, Cambridge University Press, 2003. Errata will be posted as
I learn about them. Please send further errata to
sbuss@math.ucsd.edu.

The errata are classified as "code (substantive and minor code errors)", "substantive" or "minor" and listed in page order. The first finders of the errata are acknowledged (with thanks!).

Many of these have been fixed in the second printing, but the ones marked with asterisks have not yet been incorporated.

**Errata in C++ code or in pseudo-code (minor and substantive):**

- Page 38, Line 13. "glScalef(-1.0, 0.0, 0.0);" should be "glScalef(-1.0, 1.0, 1.0);". [Nevin Shenoy.]
- Page 115, line 11,12 of the BilinearInvert
function. The symbols "
*s*" in the two assignment statements should be in bold font instead of italic. That is, the variables should read "**s**_{1,β}" and "**s**_{2,β}". [Alex Kulungowski] - Page 180. Line 23. The parameters
*u*and_{start}*u*are of type_{end}*float*, not type*int*. Line 24: The types of*p*were omitted, they should be_{end}, q_{start}, q_{end}*int*. [Warren Mar]^{*} - Page 217, middle of page: Replace "Set µ = the
multiplicity of u
_{s};" should be replaced by "Set µ = Min(k, the multiplicity of u_{s});". The corresponding changes in the text are in the first complete sentence on the same page: replace the four occurrences of "µ" with "Min( k, µ)". Explanation: The multiple knots have no new effect if there are more than k of them. So the value of µ should be capped at k for the purposes of the de Boor algorithm. By the way, if you are coding the algorithm, you may want to code it with µ=0, as this always works, even for u a knot value, and is easier to code and has the advantage of avoiding floating point comparisons. [Mara Silva, Peter Olcott, and others] - Page 337, line 19. "SetAttenuation" should be changed to "SetAttenuate". [Joey Hammer]
- Page 339, line 13. Replace "PixelArray px = new PixelArray( width,
height);" with "PixelArray* px = new PixelArray( width, height);" (Add
asterisk.) [Erik Hill].
^{*}

**Other substantive errata: **

- Page 10, Figure I.10. This shows a non-convex polygon, but should have shown a convex polygon. The non-convex polygon will not render reliably in OpenGL since it may triangulate in an arbitrary order. (The text and caption warn three times about not doing this, so it is not strictly speaking an error, but I should have used a convex polygon for the example.)
- Page 10, Figure I.10. First line of caption: "five" should be "six". The polygon clearly has six vertices. [Craig Donner]
- Page 59, Footnote 11: Replace "least integer" by "greatest integer".
[Erik Hill]
^{*} - Pages 73-75, 239. In equation III.2 and III.3, if
*cos φ*or**v.r**are negative they are clamped at zero. This same change affects the equations on pages 74 and 75, and the quantities**r**_{v}**.l**_{i}in the two equations on page 239.. [Allen Ding]^{*} - Page 143, first line of section V.4.6. Remove the word "only". Since version 1.3, OpenGL also supports cube projection environment maps, not just spherical environment maps. However, as of early 2004, the commonly distributed versions of OpenGL still require using the OpenGL extension mechanism to invoke cube maps.
- Page 153, lines 14-15 from bottom of page: "replacing Max by 1-Max and Min by 1-Min" should read as "replacing Max by 1-Min and Min by 1-Max".
- Page 165, line 20. "H1+H2+H3+H4" should be "H0+H1+H2+H3".
[Annie Tsai.]
^{*} - Page 181, last displayed equation. The subscript on the
*B*in the denominator should be a*j*, not an*i*. [Chih Liang].^{*} - Page 187, line 20. "
*p*_{2}=<4,1,1>" should be "*p**_{2}=<4,1,1>". That is, there should be a superscript "*" added to the*p*_{2}." [Chris Pollett]^{*} - Page 203, line 5: "at integer values of i" should be replaced by "at integer values of u".
- Page 204, line 5 from bottom: Replace "When defining a Bezier curve" with "When defining a B-spline curve". [Alex Kulungowski]
- Page 205, line 17. Replace
**"p**_{i+2}" with**"p**_{i-1}" twice (both occurrences on this line). [Alex Kulungowski] - Page 216, caption of Figure VIII.12: replace "for 0 ≤ i ≤ 10" with "for 0 ≤ i ≤ 11". [Alex Kulungowski]
- Page 227, second line from bottom: "make all knots have multiplicity k-1" should be replaced by "make all knots have multiplicity k". [Mara Silva]
- Page 230, third displayed equation. The
coefficient of
**p**_{n}should be (N_{n+1,4}(u)+N_{n+2,4}(u)); that is, changing "n+2" to "n+1" and "n+3" to "n+2". The rest of the discussion is OK as is, since it correctly assumed this coefficient has value 1 at u=u_{n}. - Page 333, second from last line, and page 334, second line. Change "FindIntersection" to "SeekIntersection". [Mara Silva]

**Other minor errata:**

- Page 4, line 3. Change "is" to "are". [Abbie Whynot]
- Page 48, line 2. After "looking down the
*z*-axis" insert "in the negative*z*-direction". [George Yue] - Page 74, line 16. Remove "." (period) after "perspective". [Allen Lam]
- Page 99, line 4. Change "Gouraud and Phong" to "Gourard".
Phong interpolation was not introduced until Chapter II. [Jorge Fierro Simental]
^{*} - Page 131, line 3. The Greek letter should have been typeset as
φ to be consistent with usage elsewhere.
[Erik Hill]
^{*} - Page 133, line 20. Repeated "the the" should be "the". [Justin Kleffman,
Garrison Ly, and others]
^{*} - Page 153, line 14 from bottom. Insert a space after "by" and before the formula 1-Max (corrected above from 1-Min).
- Page 164, Paragraph starting "In practice,..." The curve
is implicitly being assumed to be continuous. On line 20, replace "the curve" by "a continuous curve" [Erik Hill]**q**(u)^{*} - Page 190, first line of section XII.15.2: Replace "Figure VII.23(b)" by "The second curve shown in Figure VII.23". [Nevin Shenoy.]
- Page 191, line 13. "chord-length interpolation" should be "chord-length
parameterization". [Cameron Chrisman]
^{*} - Page 193, line 2, in the exercise: "Cutmull-Rom" should be replaced by "Catmull-Rom". [Mara Silva]
- Page 200, line 18. Replace "a piecewise Bezier curves" with "a piecewise Bezier curve".
- Page 205, line 16. Remove extra "a". [Alex Kulungowski]
- Page 227, line 2 of section VIII.10. Replace "Suppose are given" with "Suppose we are given". [Alex Kulungowski]
- Page 238, line 2 from bottom. Remove extra "let". [Igor Kaplounenko]
- Color plate #2 (following page 256). The labels "(a)" and "(b)" are double-printed.
- Page 295, next to last line. Delete "in a" before
"straightforwardly". [Jeff Robertson]
^{*} - Page 301, line 3 from bottom. Change the first comma to a semicolon.
[Erik Hill]
^{*} - Page 302, line 3. "unit quaternions" should be "unit quaternion". [Alex Kulungowski]
- Page 335, line 4 in fourth paragraph. Change "will" to "want". [Tak Chu]

^{* }Changes marked with asterisks will not be incorporated in the
forthcoming second printing.