В качестве учебного упражнения я написал механизм отложенного рендеринга. Теперь я хотел бы добавить граф сцены в этот движок, но я немного озадачен, как это сделать.
В обычном (движок прямого рендеринга) я просто добавил бы все элементы (все реализующие IDrawable и IUpdateAble) в мой граф сцены, а затем сначала переместился в ширину графа сцены и вызвал Draw () везде.
Однако в механизме отложенного рендеринга я должен разделять вызовы отрисовки. Сначала я должен нарисовать геометрию, затем тени и затем источники света (все для разных целей рендеринга), прежде чем объединить их все. Так что в этом случае я не могу просто перемещаться по графу сцены и просто вызывать Draw. То, как я это вижу, мне нужно либо проехать по всему графу сцены 3 раза, проверяя, что это за объект, который нужно нарисовать, или мне нужно создать 3 отдельных графа сцены, которые каким-то образом связаны друг с другом. Оба эти решения кажутся плохими, я бы хотел сделать объекты сцены более прозрачными.
Еще одно решение, о котором я подумал, - это как обычно проходить через граф сцены и добавлять элементы в 3 отдельных списка, разделять геометрию, тени и источники света, а затем повторять эти списки, чтобы нарисовать правильные вещи, это лучше, и так ли это? целесообразно заполнить 3 списка каждый кадр?