OpenGL在相机周围移动场景

时间:2014-06-10 15:53:27

标签: c++ opengl camera

我正在开发一个小型3D世界,现在我正在修理相机。

相机在世界中处于固定位置,而世界可以通过鼠标和键盘在周围移动(模拟相机在世界中移动)。

这是我的绘图功能中的代码:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// store current matrix
glMatrixMode( GL_MODELVIEW );

glLoadIdentity();

glPushMatrix( );

GLfloat light_pos [] = {3, -1, 0, 1};
GLfloat light_dir [] = {0, 0, -1};

glLightfv(GL_LIGHT0, GL_POSITION, light_pos);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, light_dir);

glTranslated(-cam->getXPos(), -8, -cam->getZPos());
glRotated(cam->getYRot(), 1, 0, 0);
glRotated(cam->getXRot(), 0, 1, 0);

GLfloat diff [] = { .5, .5, .5, 1.0 };

glMaterialfv ( GL_FRONT, GL_DIFFUSE, diff );

glPushMatrix();
glTranslated(0, 0, -20);
glCallList(displayLists[LISTWALL]);
glPopMatrix();

// restore current matrix
glMatrixMode( GL_MODELVIEW );
glPopMatrix( );

只要我站着不动,只看周围一切正常。 另一方面,当我移动时,奇怪的事情开始发生。

首先,相机的Y坐标会发生变化,而应该固定在y = 8(这就是我将场景转换为-8的原因)

第二,当我试图穿过世界时,向前按压只应沿z轴行进,但是你会去相机指向的位置(可能与第一个问题有关)

最后当我在场景中移动时,环顾四周开始表现得很奇怪,看起来好像相机不仅绕自身旋转而且还围绕起点旋转。 (这在一个完全3D的世界中是显而易见的,而不是我在这里展示的1个多边形的简单例子)

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,在尝试了一些随机的事情后,我发现我只需要交换旋转和翻译,x和y旋转必须在翻译之前进行。

这解决了我的问题中描述的每个问题,相机停留在y = 8并且旋转不再发生在起点周围,而是发生在相机所在的点周围,运动也是固定的,当向前推进时相机沿原始Z轴移动。