gluLook解释?

Joh*_*azz 28 opengl

试图理解gluLookAt,特别是最后3个参数.

有人可以解释一下吗?

gluLookAt(camera[0], camera[1], camera[2], /* look from camera XYZ */ 
          0, 0, 0,  /* look at the origin */ 
          0, 1, 0); /* positive Y up vector */
Run Code Online (Sandbox Code Playgroud)
  1. 它是什么意思"正Y向量"?
  2. 是否可以将最后一个向上矢量3参数作为全1,例如1,1,1?并且,如果可能的话,它究竟意味着什么?
  3. up向量是否有可能具有大于1的值,例如2,3,4?

谢谢.

JCo*_*per 52

草图救援!

GluLookAt params

你的形象有一个"向上",可以与世界分开.此图像中的蓝色窗口可以被视为绘制图像的"近平面":显示器,如果可以的话.如果您提供的只是眼点和点,那么该窗口可以自由旋转.你需要给出一个额外的"向上"方向来固定它.如果不是单位长度,OpenGL将标准化您提供的向量.OpenGL也将它向下投射,使其与由眼睛at定义的'z'向量形成90度角(除非你给出一个'向上'向量与'眼'到''的行方向完全相同 '在').一旦定义了'in'(z)和'up'(y)方向,就可以很容易地从这两个方向计算'right'或(x)方向.

在该图中,如果蓝轴在y方向,则"提供的"向上矢量为(0,1,0).如果您要给(1,1,1),它很可能将图像旋转45度,因为这表示蓝色窗口的顶部应指向该方向.因此,该家伙的形象似乎是倾斜的(在相反的方向上).


Use*_*182 8

gluLookAt 的“向上向量”就是相机的方向。如果你在某个位置有一个摄像机,直接观察一个物体,那么仍然存在一个自由来源:旋转。想象一下,相机直接指向固定在适当位置的物体。但是,您的相机仍然可以旋转,从而旋转您的图像。OpenGL 将这种旋转锁定到位的方式是使用“向上向量”。

想象一下 (0, 0, 0) 正对着您的相机。现在,“向上向量”只是相机周围的坐标。不过,一旦获得“向上向量”,OpenGL 就会旋转相机,直到相机的顶部直接面向“向上向量”的坐标。

如果“向上向量”位于 (0, 1, 0),那么你的相机将正常指向,因为向上向量位于相机的正上方,因此相机的顶部将位于顶部,因此你的相机是定向的正确。不过,将向上矢量移动到 (1, 1, 0),为了将相机的顶部指向“向上矢量”,您的相机需要旋转 45 度,从而将整个图像旋转 45 度。

这个答案并不是一个深入的教程,而是作为一种掌握“向上向量”概念的方法,以帮助更好地理解您问题的其他优秀答案。


Fen*_*kin 5

前3个参数是相机位置接下来3个参数是目标位置最后3个参数代表相机的滚动。

非常重要的是在“glMatrixMode(GL_MODELVIEW);”之后使用 gluLookAt

其他有用的提示总是将最后 3 个参数指定为 0,0,1。通常坐标写为 x,y,z。z 是向上向量。0,1,0 导致混淆为 x,z,y。

所以最好将它保留为 0,0,1。


cla*_*amp 2

最后一个向量,也称为相机向上向量,定义相机的方向。

想象一下一根棍子连接在“真实”相机的顶部。棍子的方向是向上向量。

通过将其从 (0,1,0) 更改,您可以进行侧向滚动。

  • 扩展本的解释,想象一下你的相机顶部有一个天线。那是相机“向上”。作为手持式摄像机,想象一下您旋转相机,同时保持其指向拍摄对象!现在相机可以指向任何方向,甚至颠倒!这就是 gluLookAt 的 XYZ 坐标的用途——告诉 GL 相机的握持方式。在大多数情况下,0,1,0 有效,尽管如果相机直视向上或直视向下会出现问题,在这种情况下 0,0,1 是一个很好的起点,尽管您可能想尝试一下。 (3认同)