渲染循环与明确调用更新方法

时间:2017-04-03 08:37:31

标签: graphics 3d rendering

我正在使用openGL进行3D模拟程序,该程序使用具有固定帧率的渲染循环来保持屏幕在世界变化时更新。标准程序真的,对于典型的视频游戏,这当然是最好的方法(我最初从openGL游戏教程中获取此代码)。但对我来说,3D场景不会像电脑游戏那样快速且不可预测地改变。 3D场景本身可能会不时发生变化,但一般情况下它不会在渲染调用之间发生变化(它更像是几何问题的可视化工具)。用户将能够控制相机的位置/方向,但通常有时相机不会移动几秒钟/几分钟(可能有数百个渲染调用),并且因为3D场景很可能是静态的大部分时间,我想知道我是否真的需要一个连续的渲染循环......?

我的想法是,我将删除自动渲染循环,而是在显示时,我将显式调用 update 方法,

  1. 3D场景发生变化(非常罕见)
  2. 相机移动(有点罕见)
  3. 由于我将主要用于研究目的,场景/摄像机可能会一次保持一个状态几分钟,并且当帧缓冲区没有改变时连续更新帧缓冲区似乎很愚蠢。

    我的问题是,这是一个好方法吗?所有用于3D图形渲染的在线教程似乎都处理游戏设计,但这并不是我的要求。换句话说,使用渲染循环与手动调用" update()"的优点和缺点是什么?每当有什么变化?

    由于

1 个答案:

答案 0 :(得分:1)

这种方法没有问题,事实上许多3D应用程序,如3DS MAX都使用显式渲染。您只需选择更适合您需求的内容,在大多数游戏场景中每帧更改一次,以便更新循环更好,但如果您正在做一些国际象棋游戏,没有动画UI,您也可以使用显式渲染场景变化。

对于具有罕见更改的应用,例如3DS或Blender,最好只在更改时调用渲染。通过这种方式,您可以节省CPU / GPU,但也可以节省电量,PC也不会太热。

通过显式渲染,您还可以获得一些性能技巧,例如在相机移动时绘制简化场景,以获得更好的性能。然后当相机停止时,您再次在背景中渲染完整场景,并用新的渲染替换低质量渲染。