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 "s1,β" and "s2,β".
[Alex Kulungowski]
- Page 180. Line 23. The parameters ustart
and uend are of type float, not
type int. Line 24: The types of pend, qstart,
qend were omitted, they should be int. [Warren
Mar] *
- Page 217, middle of page: Replace "Set µ = the
multiplicity of us;" should be replaced by "Set µ = Min(k, the
multiplicity of us);". 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 rv.li
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. "p2=<4,1,1>" should be "p*2=<4,1,1>". That is, there
should be a superscript "*" added to the p2." [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 "pi+2"
with "pi-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 pn should be (Nn+1,4(u)+Nn+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=un.
- 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 q(u)
is implicitly being assumed to be continuous. On line 20, replace
"the curve" by "a continuous curve" [Erik Hill]
*
- 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.