gpt4 book ai didi

c++ - OpenGL 围绕相机移动场景

转载 作者:太空宇宙 更新时间:2023-11-04 13:49:24 25 4
gpt4 key购买 nike

我正在制作小型 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 轴移动。

关于c++ - OpenGL 围绕相机移动场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24145513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com