通过阅读许多参考资料和重新实现函数并亲自研究矩阵,我了解到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()的误解吗?
发布于 2013-07-20 19:51:04
您链接的文档确实是错误的。
如果我们看一下another documentation,我们会看到视图矩阵是由旋转矩阵和平移矩阵构成的,如下所示:
V = R * T为了变换顶点v,我们计算
v' = V * v = R * T * v = R * (T * v)因此,我们首先应用平移,然后应用旋转。因为存在平移,所以旋转部分也会影响原点。这就是为什么可以将原点映射到屏幕中心的原因。
发布于 2013-07-20 17:22:55
您能解释一下我对gluLookAt()的误解吗?
你的错误在于把它看作是一系列的步骤。这不是它的工作方式。gluLookAt计算一个转换矩阵,该矩阵以所需的方式直接映射坐标。没有“中间”的旋转步骤。
https://stackoverflow.com/questions/17759269
复制相似问题