可能的重复项:
OpenGL 的 LookAt 函数中的 UP 向量到底是什么?
这与:OpenGL的LookAt函数中的UP向量到底是什么?
如果呼叫是:
gluLookAt(512, 384, 2000,
512, 384, 0,
0.0f, 1.0f, 0.0f);
如果我坐在椅子上直视前方,拿着iPad在我眼前,那么我的头顶就指向天空。因此,UP 向量的(0, 1, 0)
,如第 3 行所示。如果我把它改成(0, 0.00001, 1)
怎么样?这意味着我几乎躺下了,现在我的脸和眼睛面向天空。那么为什么结果和我使用(0, 1, 0)
时完全相同呢?
你可能期待会发生什么?
传递 3 组值:相机位置、相机要查看的位置和向上的方向。在你的类比中,如果你在仰望天空,你就不是在看你的iPad。因此,您的观察位置必须随着您的向上方向而变化。如果你没有改变你的观察位置,那么你期望当你改变向上的方向时会发生什么?
向上方向仅影响向上相对于您正在查找的位置的位置。如果你想改变你正在看的东西,你必须实际改变看点。这就是它存在的原因。
经过更多的试验和错误,因为我刚刚开始学习OpenGL一天,是,Up矢量必须在平面中具有一些"正常"(或垂直(的分量相机到目标矢量。
换句话说,在示例中,它是从 (512, 384, 2000( 到 (512, 384, 0(,因此向量仅在 Z 方向。 向上向量必须在 XY 平面上具有一些分量(XY 平面是垂直于仅具有 Z 方向的向量的平面(。
如果没有 x 和 y 分量,也就是说,如果它们都是 0,那么在我的 iPad 2 上,图像根本不显示。 因此,在这种情况下,向上向量处理 XY 平面中的旋转,而不是关于 Z 方向的情况。