试图了解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 */
感谢。
答案 0 :(得分:48)
草图救援!
你的形象有一个“向上”,可以与世界分开。此图像中的蓝色窗口可以被视为绘制图像的“近平面”:显示器,如果可以的话。如果您提供的只是眼点和点,那么该窗口可以自由旋转。你需要给出一个额外的“向上”方向来固定它。如果不是单位长度,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 度。
这个答案并不是一个深入的教程,而是作为一种掌握“向上向量”概念的方式,以帮助更好地理解您问题的其他优秀答案。