0

我从阅读许多资料中了解到,通过重新实现函数并自己研究矩阵,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() 的误解吗?

4

2 回答 2

1

您链接到的文档确实是错误的。

如果我们查看另一个文档,我们会看到视图矩阵是由旋转矩阵和平移矩阵构成的,如下所示:

V = R * T

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

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

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

于 2013-07-20T11:51:03.877 回答
0

请你能解释一下我对 gluLookAt() 的误解吗?

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

于 2013-07-20T09:22:54.703 回答