glulookat()usage-opengl和C ++

时间:2011-12-27 16:24:27

标签: c++ opengl graphics 3d

0请你帮我解决这个问题:我有一个3D世界,我想以第一人称的方式定位相机(真正的目的是从飞船内部的第一人称视角,同时旅行通过小行星带)。在这种情况下,glulookat的参数是什么?我想到了:

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

这是正确的吗?

另外,如果我想让相机随船一起移动,怎么办呢?移动船时我还应该从glulookat移动“眼睛”坐标?像眼睛坐标(glulookat的前3个参数)之类的东西应该与船坐标相同?

1 个答案:

答案 0 :(得分:1)

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