Я пишу простой 3D-движок с использованием OpenGL. Я уже реализовал простой граф сцены со следующим шаблоном:
ISceneNode
IMeshSceneNode
StaticMeshSceneNode
ICameraSceneNode
StaticCameraSceneNode
TrackBallCameraSceneNode
ILightSceneNode
PointLightSceneNode
Но мне интересно, может ли «Renderer» (класс, который реализует программу шейдера) также быть узлом сцены (извлечь код рендеринга из MeshSceneNode в RenderSceneNode). Для меня это может быть правильным выбором, потому что, если я должен визуализировать несколько мешей (например, 42 меша) с использованием одних и тех же вершинных и фрагментных шейдеров, было бы полезно связать и развязать шейдерную программу только один раз, а не 42 раза!
Итак, что вы думаете о следующих схемах:
Первый представляет мою текущую концепцию (ради простоты я не представляю узлы сцены «Свет» и «Камера»).
Итак, здесь, если я хочу визуализировать свои 3 сетки (с 3 шейдерными программами, использующими одни и те же шейдеры), я буду привязывать и отвязывать свои шейдерные программы 3 раза для каждого кадра (в методе «рендеринга» каждого узла сетки).
Вот другая концепция:
Как вы можете видеть выше, на этот раз я привяжу уникальную программу шейдера к узлу рендеринга для всех дочерних узлов. Так что может быть быстрее.
Что вы думаете о моей идее?