Я думаю, що хороший прочитання того, що роблять інші графічні технології сцени, принесе багато користі для вас.
Передумови
Наприклад, подивіться опис Ogre3D. Це графічний двигун на основі графічного сцена, який є відкритим кодом. Я б запропонував переглянути підручники і побачити, як використовуються вузли сцени (Примітка. Я не кажу вам, щоб навчитися використовувати Ogre, а які функції є у вузлах сцени та менеджерах сцен Ogre)
Документація до SceneNode:
http://www.ogre3d.org/docs/api/1.9/class_ogre_1_1_scene_node.html
Документація до SceneManager:
http://www.ogre3d.org/docs/api/1.9/class_ogre_1_1_scene_manager.html
Щось ще варто поглянути за наступним посиланням:
http://sgl.sourceforge.net/#features
Це рішення на основі OpenGL, графік сцени і на сторінці функцій показані всі вузли, які він може містити.
Ваші запропоновані вузли
Я вважаю, що графік сцени повинен бути максимально відсторонений від логіки гри, щоб у вас не виникло проблем із залежністю. Для кожного вашого пункту кулі я сказав би наступне:
Ігрові актори
я, мабуть, скажу "ні". Як і у Ogre, у мене був би базовий клас Entity (який містив би певну логіку об'єкта) та базовий SceneNode з вказівником члена Entity, щоб отримати відповідну інформацію для візуалізації об'єкта (положення, орієнтація тощо)
EDIT: Я не кажу, щоб сюди не включали ваших ігрових акторів у графі сцени (інакше нічого не з’явиться: P) Я кажу, що у вас є вузол сцени з посиланням на логічний клас акторів гри, тож ви все ще отримано вільне з'єднання візуалізації та оновлення ігрових об'єктів.
Проста статична гра ojbects
Так
Ігрові тригери?
Ні, це для мене звучить як гра специфічна логіка.
Ігрові вогні?
Так
Ігрові камери?
Так
Кулі зброї?
Не зовсім впевнений у цьому, але, напевно, я б сказав так, але ви, мабуть, хочете, щоб усі кулі, як діти, були у батьківському вузлі сцени "BulletCollection", просто щоб ви могли кешувати цю позицію, і вам не доведеться переходити графік сцени багато для видалення та додавання куль для візуалізації.
Ігрові вибухи та спецефекти?
Не впевнений, я дозволю комусь відповісти на це.
Покриття
діаграми сцен Якщо у вас порівняно невеликий рівень, ви повинні мати можливість зберігати весь рівень у графіку сцени, а потім оптимізувати його для видимості за допомогою Octree (як правило, для зовнішнього середовища) або дерева BSP (зазвичай для внутрішніх приміщень).
Якщо у вас набагато більший рівень, і ви не хочете виконувати будь-яке завантаження рівня, саме тут поточна гра може вступати в гру, але це вже інше питання. Я б почав з невеликого рівня і поступово побачив, наскільки великі ви можете зробити це, не впливаючи на продуктивність.
Висновок
Для мене графік сцен призначений для частини Render ігрового циклу. Ви не повинні поєднувати своє відображення і логіку оновлень занадто тісно разом, інакше ви зіткнетеся з набридливими проблемами залежності.