Como ejercicio de aprendizaje, he escrito un motor de renderizado diferido. Ahora me gustaría agregar un gráfico de escena a este motor, pero estoy un poco desconcertado sobre cómo hacerlo.
En un motor de renderizado normal (normal), simplemente agregaría todos los elementos (todos implementando IDrawable e IUpdateAble) a mi gráfico de escena, que viajar primero por la amplitud del gráfico de escena y llamar a Draw () a todas partes.
Sin embargo, en un motor de renderizado diferido, tengo que separar las llamadas de extracción. Primero tengo que dibujar la geometría, luego las ruedas de sombra y luego las luces (todas para diferentes objetivos de renderizado), antes de combinarlas todas. Entonces, en este caso, no puedo simplemente recorrer el gráfico de la escena y simplemente llamar a dibujar. De la forma en que lo veo, tengo que viajar por todo el gráfico de la escena 3 veces, verificando qué tipo de objeto es el que debe dibujarse, o tengo que crear 3 gráficos de escena separados que de alguna manera están conectados entre sí. Ambas parecen soluciones pobres, me gustaría manejar los objetos de escena más transparentes.
Otra solución que he pensado fue viajar a través del gráfico de la escena como normal y agregar elementos a 3 listas separadas, separar la geometría, las ruedas de sombra y las luces, y luego iterar estas listas para dibujar las cosas correctas, es esto mejor, y ¿es ¿Es prudente repoblar 3 listas en cada cuadro?