2

私のシーンにはメッシュの木があります。各メッシュには、変換行列、頂点、法線、UVのリスト、および子メッシュのリストが含まれています。

VBOを使用して「構造体の配列」でジオメトリをglslに送信したいのですが、親メッシュの行列変換が発生した場合に各メッシュの行列を更新する方法がわかりません。メッシュツリーをトラバースして、フレームごとにすべての頂点にマトリックスを追加する必要がありますか?フレームごとに頂点を事前に乗算する必要がありますか?行列のリストを均一に保持し、現在の頂点の行列をインデックスで参照する必要がありますか?メッシュごとに1つのglDrawArraysまたはglDrawElementsを使用する必要がありますか?

4

1 に答える 1

1

「標準」のアプローチは、メッシュごとの glDraw 呼び出しで使用することです。

メッシュごとに、メッシュ全体に適用される単一のユニフォームでその変換行列をフィードします。次に、このマトリックスを頂点シェーダーで使用して、メッシュを「オブジェクト空間」から「クリップ空間」に変換します。

1 つのメッシュ (またはドロー コール) に対して複数のマトリックスを使用することは、通常、メッシュの非剛体変換 (ボーンによって引き起こされる変形など) に使用されます。

描画する必要があるメッシュの数に応じて、「ハードウェア インスタンス化」を使用する別のアプローチがあります。同様のメッシュを複数回描画して行列の配列を提供し、描画される instanceID を指定してハードウェアに対応する行列を選択させることができます。

于 2010-12-16T08:10:28.480 に答える