我从阅读许多资料中学习并通过重新实现该功能并自己研究矩阵,gluLookAt()等效于旋转,然后转换为逆眼坐标。 OpenGL,MESA,Cogl等实现类似......这里有一个很好的总结: http://pic.dhe.ibm.com/infocenter/aix/v7r1/topic/com.ibm.aix.opengl/doc/openglrf/gluLookAt.htm
然而,考虑观察目标在原点即(0,0,0)的情况,并且虚拟相机稍微偏离Z轴,例如, (2,2,10)。 gluLookAt()的结果应该是原点在视野的中心。初始旋转步骤无关紧要,但后面的平移步骤将原点移离中心!
你能解释一下我的gluLookAt()误解吗?
答案 0 :(得分:1)
您链接的文档确实是错误的。
如果我们看一下another documentation,我们会看到视图矩阵是由旋转矩阵和平移矩阵构成的,如下所示:
V = R * T
要变换顶点v
,我们计算
v' = V * v = R * T * v = R * (T * v)
所以我们首先应用翻译然后轮换。并且由于存在平移,旋转部分也影响原点。这就是为什么可以将原点映射到屏幕中心。
答案 1 :(得分:0)
请解释我的gluLookAt()误解吗?
你的错误在于将其视为一系列步骤。这不是它的工作原理。 gluLookAt计算转换矩阵,该矩阵以所需方式直接映射坐标。没有“中间”轮换步骤。