こんにちは、Game Development SE!
私は、シンプルで非常に軽量なゲームエンジンを作成することを期待して、OpenGLを駆け巡っています。私はこのプロジェクトを、最終的には少しお金を稼ぐかもしれないが、どちらにしても楽しい学習体験だと思っています。
これまで、GLFWを使用して、基本的なI / O、ウィンドウ(非常に派手なF11フルスクリーンキー)、そしてもちろんOpenGLコンテキストを取得しました。また、GLEWを使用して、残りのOpenGL拡張機能を公開しました。これは、Windowsを使用しており、OpenGL 3.0+をすべて使用するためです。
これでシーングラフが表示されます。要するに、私は自分で転がしたいと思います。この決定は、OSGを見て、シーングラフの概念がどのようにねじれ、曲がり、壊れたのかに関するいくつかの記事を読んだ後に決定されました。そのような記事の 1 つでは、シーングラフがどのように開発されているかを説明しています...
次に、クリスマスツリーに飾りを吊るすなど、これらすべての余分なものを追加しました。ただし、飾りの一部はジューシーなステーキで、一部は生きた牛全体です。
類推に続いて、余分なコードの山や牛全体を縛る必要なしに、ステーキ、シーングラフがどうあるべきかの肉が欲しいです。
それで、それを念頭に置いて、私はシーングラフがどうあるべきか、単純なシーングラフをどのように実装すべきかを正確に疑問に思っていますか?ここに私が持っているものがあります...
1つの親、n子ツリーまたはDAG ...
- ゲームオブジェクトの変換(位置、回転、スケール)を追跡する必要があります
- 最適化のためにレンダリング状態を保持する必要があります
- ビュー錐台内にないオブジェクトを選別する手段を提供する必要があります
次のプロパティで...
すべてのノードはレンダリング可能として扱われる必要があります(レンダリングしない場合でも)これは、...
- すべてにcull()、state()、draw()メソッドが必要です(非表示の場合は0を返します)
- cull()は、すべての子に対して再帰的にcull()を呼び出し、ノード全体およびすべての子に対して完全なカリングメッシュを生成します。もう1つのメソッドhasChanged()を使用すると、いわゆる静的メッシュでカリングジオメトリを各フレームで計算する必要がなくなります。これは、サブツリー内のノードが変更された場合、ルートまでのすべてのジオメトリが再構築されるように機能します。
レンダリング状態は単純な列挙で保持され、各ノードはこの列挙から必要なOpenGL状態セットを選択し、そのノードでdraw()が呼び出される前に状態がセットアップされます。これにより、バッチ処理が可能になり、指定された状態セットのすべてのノードが一緒にレンダリングされ、次の状態セットがセットアップなどになります。
ジオメトリ/シェーダー/テクスチャデータを直接保持するノードはありません。代わりに、ノードは共有オブジェクト(リソースマネージャーなどのシングルトンオブジェクトによって管理される可能性があります)を指す必要があります。
シーングラフのような状況可能にするために(多分プロキシノードを使用して)他のシーングラフを参照することができる必要があり、これをこのように複雑なマルチメッシュモデルを可能にする、/データのトンを追加することなく、シーングラフの周りにコピーするオブジェクト。
現在の設計について貴重なフィードバックを得たいと思っています。機能がありませんか?非常に優れた方法/デザインパターンはありますか?ややシンプルな3Dゲームのために、このデザインに含める必要のあるより大きなコンセプトがありませんか?等。
ありがとう、コーディ