【问题标题】:Render loop vs. explicitely calling update method渲染循环与显式调用更新方法
【发布时间】:2017-04-03 08:37:31
【问题描述】:

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

我的想法是我将删除自动渲染循环,而是在任一情况下显式调用我的 update 方法,

  1. 3D 场景变化(非常罕见)
  2. 相机移动(有些罕见)

由于我将主要将其用于研究目的,因此场景/相机可能一次保持一种状态几分钟,并且在帧缓冲区没有变化时不断更新它似乎很愚蠢。

那么我的问题是,这是一个好方法吗?所有 3D 图形渲染的在线教程似乎都与游戏设计有关,但这并不是我真正的要求。换句话说,使用渲染循环与在发生变化时手动调用“update()”的优缺点是什么?

谢谢

【问题讨论】:

    标签: graphics 3d rendering


    【解决方案1】:

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

    对于很少更改的应用,例如 3DS 或 Blender,最好只在更改时调用渲染。这样既可以节省 CPU/GPU,又可以节省电力,而且您的 PC 不会过热。

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

    【讨论】:

      猜你喜欢
      • 2013-05-18
      • 2021-06-03
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      相关资源
      最近更新 更多