gluLookAt()最佳用法,GL_PROJECTION矩阵或GL_MODELVIEW矩阵

Shi*_*gon 8 opengl matrix glulookat

OpenGL文档说应该在GL_MODELVIEW矩阵上完成gluLookAt()调用:

http://www.opengl.org/resources/faq/technical/viewing.htm

事实上,文档链接到一篇文章,该文章说在GL_PROJECTION矩阵上使用gluLookAt()极其糟糕:

帮助消除GL_PROJECTION滥用行为

另一方面,有许多教程和示例,其中gluLookAt()实际上是在GL_PROJECTION矩阵上调用的.同时,虽然上面提到的文章确实说不在GL_PROJECTION矩阵上使用它,但是在大多数这样的用法中,这样做没有明显的问题.

那么我的问题是:在现实生活中使用gluLookAt()的最佳方法是什么?在GL_PROJECTION矩阵上使用它真的不是很难吗?

Tob*_*gel 8

gluLookAt()函数为您提供转换矩阵,用于转换场景中对象的旋转.所以这显然是模型转换,必须进入GL_MODELVIEW矩阵.

至于为什么,当你在顶点着色器中自己做时,这会变得更清晰:

虽然顶点的位置确实是正确的v.pos * modelview * projection,但是需要模型视图矩阵而没有用于其他计算的投影组件(例如照明和雾).这就是固定功能管道分离这两个矩阵的原因.

所以你应该坚持使用API​​中指定的范例,尤其是永远不要相信任何无数糟糕的opengl"教程".