2017-01-25 70 views
1

私はDirectX11を学んでいるので、小さなゲームフレームワークで作業しています。 BufferManagerクラス(静的かもしれない)を持って、リアルタイムで作成されたモデルと以前に作成されたモデルのすべてのインデックスデータを処理する最良の方法は何でしょうか。クラスは、モデル情報に応じてバッファをダイナミックまたはスタティックに作成して描画する必要があります。Directx11複数の頂点/インデックスバッファを管理するには?

  • 頂点とインデックスベクトルリストを1つ持ち、すべての新しいモデルを追加する必要があります。新しいデータが追加されるたびにバッファを再作成し、描画する前に新しいバッファを設定します。
  • モデル用に別々の頂点バッファーとインデックスバッファーを用意する必要があります。それぞれのモデルのバッファーにアクセスし、描画呼び出しごとにIASetVertexBuffer(model[i].getVertBuff())に設定します。
  • また、一部のモデルは動的であり、他のモデルは静的である可能性があります。ここでどのようにバッチ処理を行うことができますか?

答えて

1

ここで任意のコードを示したが、次のようにあなたが要求している構文は次のようになりなし:

  • のファイルローダーを作成し、テクスチャ、モデルのメッシュ、頂点データ、通常、オーディオなど
  • モデルの特定のメッシュのすべてのデータを格納する再利用可能な構造を持っています。
  • これを作成するときに、異なるテクスチャに関する情報を保持する別のテクスチャクラスが必要になります。これにより、同じテクスチャを異なるモデルやメッシュで参照することができ、そのたびにそれらをメモリにロードする必要がなくなります。
  • 異なるメッシュについても同じことができます。異なるモデルオブジェクトの一部であるかもしれないメッシュを参照することができます。
  • これを行うには、すべての資産を管理するAsset Storageクラスが必要です。この方法では、アセットがすでにメモリ内にある場合、アセットは再びロードされません。など、フォント、テクスチャ、モデル、オーディオファイル、など
  • その後、次の一部あなたは
    • バッチクラスがのコンテナを定義するバッチクラスおよびバッチマネージャクラスが必要になりますが何でありますかバッチは、いくつかのパラメータに基づいています。プリミティブタイプ(透明性を持つかどうか(優先度キュー)など)
    • バッチマネージャクラスは、組織を行い、レンダリングステージにバッチを送信します。このクラスは、バッチが保持できる頂点数と、バッチ数(バケット数)を指定するためにも使用されます。比率はゲームの内容によって異なります。基本的な2Dスプライト型アプリケーションの良い比率は、各バッチが10,000以上の頂点を含む約10バッチになります。次のステップでは、プリミティブタイプとその優先度(アルファチャンネル - Z深度)に基づいて同様のタイプのバケットを作成し、バケットがデータを保持できない場合は、別のバケットを検索して検索します。データを保持するためのバケットがない場合、バッチマネージャは最も優先度の高いキューで最も多く格納されているバケットを探し、そのバッチをレンダリングするビデオカードに送信し、そのバケットを再利用します。
    • 最後の部分は、プログラムで使用するさまざまな種類のシェーダを管理するShaderManagerクラスです。だから、これらのクラスや構造はすべてつながっています。

あなたが適切にこれを設計する場合することができます離れて、実際のゲームコンテンツ、プロパティとロジックから、または一連のルールエンジンの行動と責任のすべての抽象。このように、ゲームエンジンは複数のゲームで再利用できます。そうすれば、あなたのエンジンは特定のゲームに依存することはなく、再利用の準備ができたら、この静的または動的ライブラリから継承するメインプロジェクトを作成し、すべてのエンジンコンポーネントを組み込みます次の試合に出場する。このコードの分離は、汎用の再利用可能なコードの優れたアプローチです。

このアプローチの優れた表現については、このウェブサイトwww.MarekKnows.comをチェックして、ビデオチュートリアルのShader Engineシリーズに従うことをお勧めします。この特定のWebサイトはC++のWin32に焦点を絞っていますが、DirectXではなくOpenGLを使用しています。しかし、全体的なデザインパターンは同じ概念を持っています。唯一の違いは、OpenGLの部品を取り除き、DirectX APIで置き換えることです。

EDIT - その他の参考資料:

また、私は、これは彼のビデオチュートリアルからであるが、ここBatch Rendering by Marek at Gamedev

+1

うわーたマレックKrzeminskiであるバッチレンダリングプロセス上に書き込みた!!!確かにエンジンを作る方法を知っている、私は多少理解している(私はこのすべてに新しいです)。リンクのためにありがとう、そのような詳細と返信する時間を取る。私はあなたの答えを理解するためにxD。 – Tesla

+0

@Tesla私はずっと今それを独立して勉強してきました、そしてそれは氷山の先端に過ぎません。 –

+0

@Tesla私はまた、いくつかの参考文献を含む編集セクションで私の答えを更新しました。 –

関連する問題