关于opengl:请您解释一下我对gluLookAt() 的误解吗?

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

为了变换一个顶点v,我们计算

1
v' = V * v = R * T * v = R * (T * v)

所以我们首先应用平移,然后应用旋转。而且因为有平移,所以旋转部分也会影响原点。这就是为什么可以将原点映射到屏幕中心的原因。


Please can you explain my gluLookAt() misconception?

您的错误在于将其视为一系列步骤。这不是它的工作原理。 gluLookAt 计算一个变换矩阵,该矩阵以所需的方式直接映射坐标。没有"中间"旋转步骤。