可能重复:
What exactly is the UP vector in OpenGL's LookAt function?
这与:What exactly is the UP vector in OpenGL's LookAt function?
有关如果电话是:
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)
时的结果完全相同?
答案 0 :(得分:1)
你可能会发生什么?
您传递了3组值:摄像机位置,摄像机要查看的位置以及向上的方向。在你的比喻中,如果你仰望天空,你不看着你的iPad。因此,您的观察位置必须随着您的向上方向而改变。如果你没有改变你的观察位置,那么当你改变向上方向时你会发生什么?
向上方向仅影响向上相对于您正在寻找的位置。如果您想要更改正在查看的内容,则必须实际更改 look-at 点。这就是它存在的原因。
答案 1 :(得分:-2)
经过更多的反复试验,我刚开始学习OpenGL一天,就是说,向上矢量必须在平面中有一些与摄像机“正常”(或垂直)到目标矢量的组件。
换句话说,在该示例中,它是从(512,384,2000)到(512,384,0),因此向量仅在Z方向上。向上矢量必须在XY平面上具有一些分量(XY平面是垂直于仅具有Z方向的矢量的平面)。
如果没有x且没有y组件,也就是说,如果它们都是0,那么在我的iPad 2上,图像根本不会显示。因此,在这种情况下,向上矢量处理XY平面中的旋转,而不是关于Z方向的情况。