他のシーングラフテクノロジーが行っていることをよく読んでおけば、多くのメリットが得られると思います。
背景
たとえば、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クラス(オブジェクト固有のロジックを含む)と、オブジェクトをレンダリングするための適切な情報(位置、方向など)を取得するためのEntityメンバーポインターを持つベースSceneNodeがあります。
編集:ここではシーングラフにゲームアクターを含めないように言っているわけではありません(そうしないと、何も表示されません:P)論理ゲームアクタークラスへの参照を持つシーンノードがあると言っているので、ゲームオブジェクトのレンダリングと更新の疎結合がまだあります。
単純な静的ゲームOjbectsの
はい
ゲームトリガー?
いいえ、これはゲーム固有のロジックのように聞こえます。
ゲームライト?
はい
ゲームカメラ?
はい
武器弾丸?
これについては完全には定かではありませんが、おそらく「はい」と言いますが、「BulletCollection」の親シーンノードの子としてすべての弾丸を必要とするので、その位置をキャッシュできるので、レンダリングする弾丸を削除および追加するためのシーングラフ。
ゲームの爆発と特殊効果?
確かではありませんが、誰かに答えさせてください。
シーングラフのカバレッジ
レベルが比較的小さい場合は、レベル全体をシーングラフに格納し、Octree(通常は屋外環境用)またはBSPツリー(通常は屋内環境用)を使用して可視性を最適化できるはずです。
はるかに大きなレベルがあり、レベルのロードを実行したくない場合は、ここでストリーミングが始まりますが、それは完全に別の問題です。私は小さなレベルから始めて、パフォーマンスに悪影響を与えずにどれだけ大きくできるかを段階的に見ていきます。
結論
私にとって、シーングラフはゲームループのレンダリング部分です。レンダリングとロジックの更新を近づけすぎないようにしてください。そうしないと、厄介な依存関係の問題が発生します。