更好的方式来处理可渲染对象的sorting和可见性?

我只是想知道是否有一种更有效的方法来处理适合已有引擎devise的可渲染组件的sorting和可见性。

我现在怎么做:

  1. 在我的SceneHandler的每个更新中,执行此操作:
  2. 检索当前在当前场景中的所有可渲染组件
  3. 将这些组件发送到RenderManager
  4. 调用RenderManager.Update

  5. 在RenderManager的每个更新中,执行以下操作:

  6. 迭代给定列表并执行遮挡testing

  7. 如果对象可见,则将其放入可见项目的新列表中

  8. 按照图层深度的顺序对可见项目列表进行sorting

  9. 当RenderManager.Draw()被调用时,RenderManager迭代可见项目列表并绘制它们

有没有什么比这更明显的方法,或者你通常这样做? 也许我可以保留所有当前场景对象的sorting列表,然后只是执行遮挡testing,因此不需要对每个更新进行sorting?

所建议的方法的优点和缺点,非常感谢。

可能要考虑一个优先级队列,而不是那个列表,如果你想保持构建序列像你一样,因为它会自动sorting插入。

我不确定你在步骤7中是如何进行遮挡testing的, 然后在步骤8中将它们分类为深度顺序。

由于听起来像你通常把这些可渲染的东西放在一大堆混乱中,所以可以考虑把它们保存在一个空间分区结构中,像一个保持相对位置的八叉树(它将取代你在讨论中考虑的caching)。