Please can you explain my gluLookAt() misconception?
我从阅读许多资料中了解到,通过重新实现函数和自己研究矩阵,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() 的误解吗?
您链接的文档确实是错误的。
如果我们查看另一个文档,我们会看到视图矩阵由旋转矩阵和平移矩阵构成,如下所示:
1 | V = R * T |
为了变换一个顶点
1 | v' = V * v = R * T * v = R * (T * v) |
所以我们首先应用平移,然后应用旋转。而且因为有平移,所以旋转部分也会影响原点。这就是为什么可以将原点映射到屏幕中心的原因。
Please can you explain my gluLookAt() misconception?
您的错误在于将其视为一系列步骤。这不是它的工作原理。 gluLookAt 计算一个变换矩阵,该矩阵以所需的方式直接映射坐标。没有"中间"旋转步骤。