glulookat() usage-opengl and C++

glulookat() usage-opengl and C++

本文关键字:and C++ usage-opengl glulookat      更新时间:2023-10-16

你能帮我解决这个问题吗:我有一个3D世界,我想以第一人称的方式定位相机(真正的目的是在穿越小行星带的时候从飞船内部获得第一人称视角)。在这种情况下,glulook的参数是什么?我想到:

gluLookAt(30, 30, 30, 0, 0, 0, 0, 1, 0);//the up vector would be normal y axis

这是正确的吗?

如果我想让镜头随着飞船移动,该怎么做呢?当移动船的时候,我也应该移动"眼睛"的坐标。像眼睛的坐标(glulook的前3个参数)应该与船的坐标相同吗?

你所建议的gluLookAt调用会将相机定位在(30,30,30)并将其指向原点。

gluLookAt(Ship_Position_X,Ship_Position_Y,Ship_Position_Z,
          Ship_Forward_X,Ship_Forward_Y,Ship_Forward_Z,
          0,1,0);

这更像是你需要的。你必须每一帧调用它,这样相机就会跟随船的运动。如果你想让船做桶滚,你就必须有额外的变量来跟踪向上的矢量。

我喜欢有某种结构来保存坐标,这样我就可以重载gl函数来获取它们并编写更短的函数调用,例如

// roll your own glVec, or use a co-ordinate class provided by a library you happen to be using.
inline void gluLookAt(glVec position, glVec forward, glVec up)
{
    gluLookAt(position.x,position.y,position.z,forward.x,forward.y,forward.z,up.x,up.y,up.z);
}