c++ - 更新屏幕以渲染相机位置

标签 c++ opengl sdl

我已经将 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/

相关文章:

C++ 优先级队列 - 根据更新的优先级重新排序

c++ - 在 C++ 中从 cin 按下 ESC 按钮之前如何读取符号

c++ - 在同一对象内插入 vector

c++ - 为什么 glUseProgram 用 glUniform 调用每一帧?

optimization - 绘制全屏四边形的最便宜方法

c++ - 在什么情况下,编译器在比较两种类型时会创建新的临时局部值?

qt - 在 QML 中控制带纹理的 3D 对象不透明度

c++ - 用于 SDL 纹理的内存高效 ResourceManager

c - 在 OS X 上加载表面时 SDL2 预乘 alpha channel ?

c++ - CMake 禁用库的所有选项