modelview和projection - 哪个代码更常见?

时间:2014-08-08 15:44:32

标签: opengl

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);

1 个答案:

答案 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的支持   指出这一个)
  •