初学者如笔者对红宝书中的例程(select.c):
glLoadIdentity ();
glLoadName(1);
drawTriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, -5.0);
glLoadName(2);
drawTriangle (2.0, 7.0, 3.0, 7.0, 2.5, 8.0, -5.0);
glLoadName(3);
drawTriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, 0.0);
drawTriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, -10.0);
不甚理解
glLoadName 替换name stack栈顶的name,那么已经定义的name不是被接下来定义的glLoadName所覆盖?
其实不然:每次调用glLoadName后所定义的primitive都会与之前定义的裁剪体求交,书上的例程为
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glOrtho (0.0, 5.0, 0.0, 5.0, 0.0, 10.0);
然后把hit records以如下形式记录在selectBuf中
击中的物件的名字的数目
这个物件中最近的点的深度值
这个物件中最远的点的深度值
击中的物件的名字之一
击中的物件的名字之二
(若有多个名字,则如此类推...)
(转自 ZwqXin http://www.zwqxin.com/ , 转载请