为什么在OpenGL LookAt中,如果你的脸几乎朝向天空,我们仍然可以在我们面前看到正确的东西?

时间:2012-05-17 13:46:39

标签: opengl opengl-es glulookat

  

可能重复:
  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)时的结果完全相同?

2 个答案:

答案 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方向的情况。