pg. 84 change glBeginGL_TRIANGLES) to glBegin(GL_TRIANGLES) pg. 186, bottom of page. If you want a right handed system u should be u = (-1, 0, 1) so that u x v = n rather than v x u = n. pg 279 first line z = - near pg 279 beta = 2*near*far/(near - far) pg 281 remove minus sign bfore in S(-2*near ......) pg. 355 Figure 33 labels on bottom should use k instead of i to be consistent with text. Also, in the figure on the right, the top of the bracket for m should end at the line. pg. 414 switch "magnification" and "minification" pg. 455 change "Kronos Consortium" to "Kronos Group" pg. 462 rows and columns are swapped in the last part of the last paragraph. It should read: "As with other OpenGL matrices, storage is by column. However, the usual C/C++ referencing applies. If m is a matrix, m[1] is its second column and m[1][2] is the element in column 2, row 3." pg. 466 in readShaderSource change buf[size] = ' '; to buf[size] = '\0'; pg. 467 change GLunit to GLuint pg. 467 in the calls to glAttachShader change "program" to "myProgObj" pg. 468 same change to glGetProgramiv pg. 797 change Fern[03] and [Fern04] to [Fer03] and [Fer04]