我和一位同事正在讨论在复杂游戏中通常如何渲染场景。他相信世界是以最真实的面向对象的方式递归渲染的,世界上的许多演员都覆盖了像 Actor.Draw() 这样的虚拟函数(例如 Koopa.Draw()、Goomba.Draw())。
相比之下,我想象今天的复杂游戏会迭代他们的场景图,避免虚拟函数开销,并为专门的迭代器提供更大的灵活性(例如,近到远与远到近,跳过树中的某些对象等.) 我在 OpenGL 和 DirectX 方面的经验告诉我,他们倾向于批量绘制对象,并通过递归调用(即类的 Draw() 函数将绘制到的批处理)传递批处理上下文似乎是额外的参数 -传递可以通过迭代避免的开销。
如今,一种方法比另一种更受欢迎吗?如果是这样,为什么?