繁体   English   中英

OpenGL在相机周围移动场景

[英]OpenGL moving a scene around the 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个多边形的简单示例)

在尝试了一些随机的事情后,我发现了解决方案,我只需要交换旋转和平移,x和y旋转必须在平移之前发生。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM