2

C++、SDL、および OpenGL を使用して (単純な) ゲーム エンジンを構築しようとしていますが、次のステップがわかりません。これは私がこれまでに持っているものです...

メイン ゲーム ループを制御するエンジン オブジェクト

シーンをレンダリングするシーン レンダラー

プッシュおよびポップできるゲーム ステートのスタック

各状態にはアクターのコレクションがあり、各アクターには三角形のコレクションがあります。シーン レンダラーはビュー プロジェクション マトリックスを正常にセットアップします

私が抱えている問題が、アクターの位置を保存する方法に関連しているのか、それともレンダリング キューを作成する方法に関連しているのかはわかりません。

不透明なポリゴンを前から後ろに描画し、次に透明なポリゴンを後ろから前に描画するレンダリング キューを作成すると効率的であると読みました。このため、アクターはシーン レンダラー オブジェクトの「queueTriangle」メソッドを呼び出します。次に、シーン レンダラー オブジェクトは各アクターの三角形へのポインターを格納し、位置に基づいて並べ替えてレンダリングします。

私が直面している問題は、これが起こるために三角形がワールド座標での位置を知る必要があることですが、glTranslatef と glRotatef を使用している場合、これらの座標がわかりません!

誰かが私に解決策を提供してください。または、これを解決する方法に関する(簡単な)ガイドにリンクしてください。

ありがとうございました!

4

2 に答える 2

2

カメラクラスを作成し、その関数を使用してワールド内で移動/回転する場合、内部クォータニオンから取得したマトリックスを使用して頂点を変換し、カメラスペース内の位置を指定して、三角形を後ろからに並べ替えることができます。前面。

于 2009-10-11T15:30:36.590 に答える
1

「queueTriangle」呼び出しは非常に効率が悪いように思えます。最新のエンジンは、一度に何千もの三角形を処理することが多いため、通常、1 つの三角形のレベルで何かを処理することはほとんどありません。そして、この順序付けを行うためにテクスチャを何度も変更していた場合は、さらに悪いことになります。

より単純なアプローチをお勧めします。個々の三角形の位置ではなく、ワールド空間でアクターの位置を並べ替えることにより、不透明なポリゴンをはるかに厳密でない順序で描画し、一度にアクターを前から後ろにレンダリングします。透明/半透明のポリゴンには引き続きバックツーフロントのアプローチが必要ですが (事前に乗算されたアルファを使用していない場合)、他のすべてはよりシンプルで高速になるはずです。

于 2009-10-12T09:35:44.943 に答える