Als Lernübung habe ich eine verzögerte Rendering-Engine geschrieben. Jetzt möchte ich dieser Engine ein Szenendiagramm hinzufügen, aber ich bin ein bisschen verwirrt, wie das geht.
Bei einer normalen (Forward-Rendering-Engine) würde ich einfach alle Elemente (alle, die IDrawable und IUpdateAble implementieren) zu meinem Szenendiagramm hinzufügen, dann zuerst die Breite des Szenendiagramms durchlaufen und überall Draw () aufrufen.
In einer verzögerten Rendering-Engine muss ich jedoch Draw-Aufrufe trennen. Zuerst muss ich die Geometrie zeichnen, dann die Schattenwerfer und dann die Lichter (alle zu verschiedenen Renderzielen), bevor ich sie alle kombiniere. In diesem Fall kann ich also nicht einfach über das Szenendiagramm fahren und einfach Zeichnen aufrufen. So wie ich es sehe, muss ich entweder dreimal über das gesamte Szenendiagramm fahren und prüfen, welche Art von Objekt gezeichnet werden muss, oder ich muss drei separate Szenendiagramme erstellen, die irgendwie miteinander verbunden sind. Beides scheint eine schlechte Lösung zu sein. Ich möchte Szenenobjekte transparenter behandeln.
Eine andere Lösung, an die ich gedacht habe, war, wie gewohnt durch das Szenendiagramm zu reisen und Elemente zu 3 separaten Listen hinzuzufügen, Geometrie, Schattenwerfer und Lichter zu trennen und diese Listen dann zu wiederholen, um das richtige Material zu zeichnen. Ist das besser und ist es? klug, 3 Listen pro Frame neu zu füllen?