-3

可能重复:
OpenGL 的 LookAt 函数中的 UP 向量到底是什么?

这与:OpenGL 的 LookAt 函数中的 UP 向量到底是什么有关?

如果来电是:

      gluLookAt(512, 384, 2000,
                512, 384, 0,
                0.0f, 1.0f, 0.0f);

如果我坐在椅子上直视前方,将 iPad 放在眼前,那么我的头顶就指向天空。因此(0, 1, 0)对于 UP 向量,如第 3 行所示。如果我把它改成(0, 0.00001, 1)怎么办?这意味着我几乎要躺下,现在我的脸和眼睛都朝向天空。那么为什么结果和我使用的时候完全一样(0, 1, 0)呢?

4

2 回答 2

1

你可能期望会发生什么?

您传递了 3 组值:一个摄像头位置、一个摄像头要查看的位置以及向上的方向。在你的类比中,如果你在仰望天空,你就不是在看你的 iPad。因此,您的观看位置必须随着您的向上方向而改变。如果你没有改变你的观察位置,那么当你改变向上的方向时,你期望会发生什么?

向上方向影响向上相对于您正在寻找的位置。如果你想改变你正在看的东西,你必须真正改变观察点。这就是它在那里的原因。

于 2012-05-17T13:52:19.767 回答
-2

经过更多的试验和错误,正如我刚开始学习 OpenGL 一天一样,向上向量必须在平面中具有一些分量,这些分量与相机到目标向量“正常”(或垂直)。

也就是说,例子中是从(512,384,2000)到(512,384,0),所以向量只有Z方向。上向量必须在 XY 平面上有一些分量(XY 平面是垂直于只有 Z 方向的向量的那个)。

如果没有 x 和 y 分量,也就是说,如果它们都是 0,那么在我的 iPad 2 上,图像根本不显示。因此,在这种情况下,向上向量处理 XY 平面中的旋转,而不是关于 Z 方向的情况。

于 2012-05-17T16:09:05.117 回答