gluLook解释?

时间:2011-04-19 14:07: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 */
  1. “Y向量向量”究竟是什么意思?
  2. 是否可以将最后的向上矢量3参数作为全1,例如1,1,1?并且,如果可能的话,究竟是什么意思?
  3. 向上矢量是否有可能具有大于1的值,例如2,3,4?
  4. 感谢。

4 个答案:

答案 0 :(得分:48)

草图救援!

GluLookAt params

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

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

答案 1 :(得分:3)

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

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

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

所以最好把它留给0,0,1。

答案 2 :(得分:2)

最后一个矢量,也称为摄像机向上矢量,用于定义摄像机的方向。

想象一根棍子贴在“真实”相机的顶部。棒子的方向是向上的。

通过从(0,1,0)更改它可以横向滚动。

答案 3 :(得分:2)

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

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

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

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