0

一度にすべてのデータを送信するため、メッシュを 1 つのメッシュに結合してレンダリングする方がはるかに高速であると読みました。私はdirectx9.0c、固定機能、c++を使用しています。私は多くの LP3DXMESH を結合して一度に送信して描画したいと考えています。

グーグルで答えを探すと、ジャンクの結果が得られます。これどうやってするの?

4

1 に答える 1

1

複数のメッシュを 1 つに結合するのは非常に簡単で、いくつかの基準が満たされていることを確認します。

すべてのメッシュの頂点サイズ/レイアウト (または宣言)が同じである必要があります。

モデル 1 には 10 個の頂点と 21 個のインデックスがあります モデル 2 には 20 個の頂点と 30 個のインデックスがあります モデル 3 には 25 個の頂点と 45 個のインデックスがあります

すべてのデータを保持できる頂点バッファーを作成します (例: 10+20+25 頂点)

モデル 1、モデル 2、モデル 3 の各頂点をこの新しい頂点バッファーにコピーします。

頂点バッファーと同じ方法でインデックス バッファーを作成します (例: 21 + 30 + 45 インデックス)。

モデル 1 では、インデックスをコピーするだけです。

モデル 2 の場合、インデックスをコピーする必要がありますが、各インデックスに 10 を追加します (最初の頂点バッファーのサイズ)。

モデル 3 の場合、番号 2 と同じことを行いますが、10 + 20 (前の各サイズの合計) を追加する必要があります。

新しいバッファでメッシュを作成します。

いくつかの考慮事項について:

  • モデルを頻繁に描画しない場合 (たとえば、3 つのメッシュを 1 回ずつ描画するなど)、ほとんど利点はありません。
  • 各モデルを異なる変換で描画する必要がある場合 (これも頻繁に変更されます)、CPU で頂点を変換する必要があります (代わりに、パフォーマンスが低下する可能性があります)、またはモデルに余分なデータを追加する必要があります。 (単なる ID のように)、任意の形式のルックアップを使用して頂点シェーダーで変換を行います (配列またはテクスチャ ルックアップが一般的です)。
  • この手法を使用すると、場合によっては (同じオブジェクトを数回繰り返すなど) 実際にはうまくいく可能性がありますが、ユースケースのようには見えません。
于 2013-01-29T17:02:10.603 に答える