1.哪些代码更常见,为什么? 2.您将如何描述此代码的含义?
一个。
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluLookAt(1,1,1,0,0,0,1,1,0);
B中。
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(1,1,1,0,0,0,1,1,0);
答案 0 :(得分:2)
B中。它正确地将模型视图/“相机”类型转换与投影矩阵分开。
There are some concerns with putting "camera"-type transforms in the projection matrix:
- 光照:OpenGL必须将顶点法线转换为世界坐标 空间 - 也就是说没有透视效果 - 但是WITH 相机位置的影响。因此,只有GL_MODELVIEW 矩阵应用于法线以进行照明。如果你把相机 转换为GL_PROJECTION矩阵然后您的照明将是 错误。然而,有些人自己照明 - 无论如何, 它可能是您之前可能没有注意到的一个微妙错误。
- 雾:OpenGL必须弄清楚每个顶点离相机的距离。 透视效果再次与此计算无关 - 所以不使用GL_PROJECTION矩阵。如果你把相机 转换为GL_PROJECTION矩阵然后你的雾化将 错误。由于很少有人使用雾,很多人都有错误而没有 知道了。
- TexGen:由于OpenGL使用eyepoint来找出一些 TexGen的纹理坐标,如果相机位置全部混淆了 随着投影信息,你会得到一些漂亮 奇怪的纹理坐标。 (感谢Brian Sharp在3Dfx的支持 指出这一个)