Come esercizio di apprendimento ho scritto un motore di rendering differito. Ora vorrei aggiungere un grafico di scena a questo motore, ma sono un po 'perplesso su come farlo.
Su un normale (motore di rendering in avanti) aggiungerei semplicemente tutti gli elementi (tutti implementando IDrawable e IUpdateAble) al mio grafico di scena, quindi viaggerei prima sull'ampiezza del grafico di scena e chiamerei Draw () ovunque.
Tuttavia, in un motore di rendering differito, devo separare le chiamate di disegno. Per prima cosa devo disegnare la geometria, quindi le rotelle delle ombre e poi le luci (tutte con obiettivi di rendering diversi), prima di combinarle tutte. Quindi, in questo caso, non posso semplicemente viaggiare sul grafico della scena e chiamare semplicemente il disegno. Per come la vedo io devo viaggiare 3 volte sull'intero grafico della scena, controllando che tipo di oggetto deve essere disegnato, oppure devo creare 3 grafici di scena separati che sono in qualche modo collegati tra loro. Entrambe sembrano soluzioni scadenti, mi piacerebbe gestire gli oggetti di scena in modo più trasparente.
Un'altra soluzione a cui ho pensato era viaggiare attraverso il grafico della scena come di consueto e aggiungere elementi a 3 elenchi separati, separare la geometria, le ruote d'ombra e le luci, e poi iterare questi elenchi per disegnare le cose giuste, è meglio, ed è vero? saggio ripopolare 3 elenchi per ogni fotogramma?