作为学习练习,我编写了一个延迟渲染引擎。现在,我想向该引擎添加一个场景图,但是我有点困惑如何做到这一点。
在普通的(前向渲染引擎)上,我只将所有项目(全部实现IDrawable和IUpdateAble)添加到场景图中,而不是先遍历场景图宽度并在任何地方调用Draw()。
但是,在延迟渲染引擎中,我必须分开进行绘图调用。首先,我必须先绘制几何图形,然后绘制阴影投射器,然后绘制灯光(所有灯光都绘制到不同的渲染目标),然后再将它们组合在一起。因此,在这种情况下,我不能只遍历场景图并仅调用draw。我的观察方式要么是我要遍历整个场景图3次,检查必须绘制哪种对象,要么必须创建3个以某种方式相互连接的独立场景图。这两个似乎都是较差的解决方案,我想使场景对象更透明。
我想到的另一种解决方案是像往常一样通过场景图,然后将项目添加到3个单独的列表中,分离几何图形,阴影投射器和灯光,然后迭代这些列表以绘制正确的内容,这更好吗?明智的每帧重新填充3个列表?