勘误
2012-08-04
核对了若干处,总的来说,这本书编辑和翻译还是很严谨的,瑕不掩瑜。
练习题 2.21
-
P64: “列出将OpenGL显示窗口左下角设定到像素位置(200,200)、窗口宽度为100像素且高度为75像素的语句。“
勘误:结合英文版习题解答可以推断出,原文应为”列出将OpenGL显示窗口‘右下角’……“,这样也更符合题意。
-
3.11.1 圆锥曲线
-
P95: ”通常,我们可以使用二次方程来描述圆锥曲线(conic section):
Ax^2+By^2+Cxy+Dx+Ey+F = 0 (3.52)
其中,参数A、B、C、D、E、F的值决定所要显示的曲线类型。给定这组系数,就可以通过对判别式B^2-4AC求值来确定所要生成的特定圆锥曲线:
B^2-4AC{ < 0, 生成椭圆或圆
{ = 0,生成抛物线
{> 0, 生成双曲线“
勘误:这里是一个很严重的错误。按照(3.52),判别式应为:C^2-4AB。或者把(3.52)写做:Ax^2+Bxy+Cy^2+Dx+Ey+F = 0。这个错误在原书第2版中就已经存在,我有些惊讶它一直活到第三版的中文版中。此书第四版已出,待考察。
3.5.2 DDA算法
-
P72:程序部分line4 “inline int round (const float a){return int (a + 0.5);}”
把这个说成是勘误可能不合适,但它又确实是个小错误。函数round的目的是进行四舍五入,但如果a是负数,则它的算法是错误的。而程序中允许a为负的可能性。
3.5.3 Bresenham算法
-
P75和P76中的程序流和程序代码中,都标记这两种算法适用于|m|<1的情况,但实际上,只有P76程序上面的文字说明是准确的,这种算法只适用于0<m<1.0的情况。适用于任意的m值代码可以参考我相关章节的笔记。
.
.
4.7 OpenGL点属性函数
-
P154,代码:"
glColor3f (1.0, 0.0, 0.0);
glBegin (GL_POINTS);
glVertex2i (50, 100);
glPointSize (2.0);
glColor3f (0.0, 1.0, 0.0);
glVertex2i (75, 150);
glPointSize (3.0);
glColor3f (0.0, 0.0, 1.0);
glVertex2i (100, 200);
glEnd ();"
《OpenGL超级宝典》中明确说明“初学者必须注意,必须在glBegin()/glEnd()语句之外调用glPointSize()函数”。可见书中这段代码这错误的,不论作者是否在某个平台上调通了,应该是不符合规范的。