Граф сцены обычно живет в слое View системы MVC. В конце концов, сцена подразумевает ту часть, которую вы видите. Как правило, после установки правильного контекста OpenGL (или любого другого чертежа, который вы используете для определения в качестве эквивалента), можно было бы вызвать некоторый метод «рендеринга» в корневом узле графа сцены, а затем он рекурсивно отображает всех его потомков.
Графы сцены не часто представляют другие виды состояния. Например, в игре с симуляцией физики вы должны держать граф сцены для выполнения рендеринга, но список физических объектов поддерживается физическим движком отдельно и следует очень отдельной структуре. Физические механизмы работают лучше всего, если объекты, которые физически находятся рядом друг с другом, также перемещаются локальным образом. Рендеринг работает лучше всего, если объекты с похожими характеристиками рендеринга (сделанные из одинаковых текстур) просматриваются локальным образом.
Таким образом, узел на графе сцены будет знать, как найти положение экземпляра модели, который он представляет, передать его в средство визуализации и затем выдать примитивы рисования для этого типа объекта.
с учетом этого, на самом деле реализация такой вещи, вероятно, означает думать о видах взаимодействий, на глобальном уровне, на которые должен реагировать корневой узел графа сцены. В типичном случае это, вероятно, означает рендеринг.
class SceneNode
{
public:
virtual void render() = 0;
};
Самое очевидное, что можно сделать из этого, - создать узел с дочерними элементами, чтобы у нас на самом деле было дерево узлов.
class ListSceneNode : public SceneNode
{
private:
typedef std::vector<std::shared_ptr<SceneNode> > ChildList;
ChildList children;
public:
void render() {
for(ChildList::iterator i = children.begin() ; i != children.end(); ++i)
i->render();
}
};