我已经将 C++ 源代码从使用 GLUT 转换为使用 SDL/OpenGL 问题是因为我已经从 GLUT 更改为“相机的位置没有得到更新,所以与其使用键盘四处移动,屏幕只是坐在那里渲染什么它需要但不会更新。
键盘敲击按照我的设置工作,所以当按下 ESC 时它退出,这很好。
这是我的 Display 函数,它在每个循环和按键(wasd)时都会被调用:
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
Camera.Render();
glTranslatef(0.0,-0.5,-6.0);
....Draw some stuff....
SDL_GL_SwapBuffers();
接下来是 Camera.Render();
SF3dVector ViewPoint = Position+ViewDir;
gluLookAt(Position.x,Position.y,Position.z,ViewPoint.x,ViewPoint.y,ViewPoint.z,UpVector.x,UpVector.y,UpVector.z);
现在按下一个键会发生什么(w 应该向前移动相机):
case SDLK_w:
CCamera().MoveForward( -0.1 ) ;
Display();
break;
最后是 CCamera().MoveForward() 函数:
MoveForward(GLfloat Distance){
Position = Position + (ViewDir*-Distance);
}
我这辈子都弄不明白为什么一旦按下某个键它就不会更新位置。 任何帮助将不胜感激!谢谢。
最佳答案
CCamera()
只是创建一个临时相机。 (然后你移动它。)然后临时消失。
也许您打算修改Camera
?
关于c++ - 更新屏幕以渲染相机位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5454370/