0您能否在这种情况下帮我一个忙:我有一个3D世界,我想以第一人称的方式放置相机(真正的目的是在飞越小行星时从飞船内部观察第一人称视角带)。在这种情况下,glulookat的参数是什么?我想到了:

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


这是正确的吗?

另外,如果我希望相机随船一起移动,那该怎么办?在移动船舶时,我还应该从glulookat移动“眼”坐标吗?像眼睛坐标(glulookat的前三个参数)之类的应该与船坐标相同吗?

最佳答案

您建议的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);
}

10-04 21:57