我正在 opengl 中创建一个渲染成本非常高的场景(使用顶点缓冲区对象),当所有对象都保持原位时,我想做一些类似于“平滑追求”对象的事情。即:将物体留在原处,并以一定的恒定速度向左或向右移动相机/视点。目前,我通过调用glTranslatef
我的draw
函数来完成此操作,然后是重新绘制所有对象的代码。然而,这是非常昂贵的(很多对象!)。有没有办法只移动相机而不重绘整个场景?
OpenGL 中没有相机。或者,如果您真的想认为存在,那么您必须意识到“相机”在 OpenGL 中停留在原点,始终朝同一个方向看。通过移动和旋转世界上的所有对象来模拟“相机”效果,而“相机”则位于原点。
所以如果你想移动“相机”,你真的必须移动世界(或世界上的所有物体)。换句话说,真的没有办法“在不重新绘制所有对象的情况下移动相机”。如果您真的想要,一种选择是将场景渲染为大于屏幕的纹理,然后移动纹理以模拟“相机”移动。请注意,如果您使用的是透视投影,那么执行此操作时看起来会非常错误。如果您使用正交投影,这只会看起来不错。
但是,听起来您是在立即模式下绘图,这是一种古老而缓慢的方法。您应该使用带有着色器和顶点数组对象/顶点缓冲区对象的现代绘制调用。