试图理解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)
谢谢.
JCo*_*per 52
草图救援!

你的形象有一个"向上",可以与世界分开.此图像中的蓝色窗口可以被视为绘制图像的"近平面":显示器,如果可以的话.如果您提供的只是眼点和点,那么该窗口可以自由旋转.你需要给出一个额外的"向上"方向来固定它.如果不是单位长度,OpenGL将标准化您提供的向量.OpenGL也将它向下投射,使其与由眼睛和at定义的'z'向量形成90度角(除非你给出一个'向上'向量与'眼'到''的行方向完全相同 '在').一旦定义了'in'(z)和'up'(y)方向,就可以很容易地从这两个方向计算'right'或(x)方向.
在该图中,如果蓝轴在y方向,则"提供的"向上矢量为(0,1,0).如果您要给(1,1,1),它很可能将图像旋转45度,因为这表示蓝色窗口的顶部应指向该方向.因此,该家伙的形象似乎是倾斜的(在相反的方向上).
gluLookAt 的“向上向量”就是相机的方向。如果你在某个位置有一个摄像机,直接观察一个物体,那么仍然存在一个自由来源:旋转。想象一下,相机直接指向固定在适当位置的物体。但是,您的相机仍然可以旋转,从而旋转您的图像。OpenGL 将这种旋转锁定到位的方式是使用“向上向量”。
想象一下 (0, 0, 0) 正对着您的相机。现在,“向上向量”只是相机周围的坐标。不过,一旦获得“向上向量”,OpenGL 就会旋转相机,直到相机的顶部直接面向“向上向量”的坐标。
如果“向上向量”位于 (0, 1, 0),那么你的相机将正常指向,因为向上向量位于相机的正上方,因此相机的顶部将位于顶部,因此你的相机是定向的正确。不过,将向上矢量移动到 (1, 1, 0),为了将相机的顶部指向“向上矢量”,您的相机需要旋转 45 度,从而将整个图像旋转 45 度。
这个答案并不是一个深入的教程,而是作为一种掌握“向上向量”概念的方法,以帮助更好地理解您问题的其他优秀答案。
前3个参数是相机位置接下来3个参数是目标位置最后3个参数代表相机的滚动。
非常重要的是在“glMatrixMode(GL_MODELVIEW);”之后使用 gluLookAt
其他有用的提示总是将最后 3 个参数指定为 0,0,1。通常坐标写为 x,y,z。z 是向上向量。0,1,0 导致混淆为 x,z,y。
所以最好将它保留为 0,0,1。
最后一个向量,也称为相机向上向量,定义相机的方向。
想象一下一根棍子连接在“真实”相机的顶部。棍子的方向是向上向量。
通过将其从 (0,1,0) 更改,您可以进行侧向滚动。