【发布时间】:2012-04-18 07:16:36
【问题描述】:
我和一位同事正在讨论在复杂游戏中通常如何渲染场景。他相信世界是以最真实的面向对象的方式递归呈现的,世界上的许多演员都覆盖了一个像 Actor.Draw() 这样的虚拟函数(例如 Koopa.Draw()、Goomba.Draw( ))。
相比之下,我想象今天的复杂游戏会迭代他们的场景图,避免虚函数开销,并为专门的迭代器提供更大的灵活性(例如,near-to-far vs. far-to-附近,跳过树中的某些对象等。)而我对 OpenGL 和 DirectX 的经验告诉我,他们倾向于批量绘制对象,并通过递归调用传递批处理上下文(即类的 Draw( ) 函数会绘制) 似乎是可以通过迭代避免的额外参数传递开销。
如今,一种方法比另一种更受青睐吗?如果有,为什么?
【问题讨论】:
标签: optimization recursion iteration scenegraph