私はDX11でおしゃべりしています。私はDX10にID3DX10MeshのようにID3DX11Meshがないことに気付きました。 ID3DX10Meshは、DX11がDX10を拡張しているだけでなく、XNAフレームワークの何かに置き換えられているため、これは2つの理由のいずれかが原因である可能性があります。DX10 Mesh :: DrawSubSet
まったく問題はありませんが、DX10はまだDX11で動作しているようですが、独自のメッシュクラスを実装することもできます。
ここで、ID3DX10Mesh :: DrawSubSetはどのくらい正確に機能しますか?異なる材料/特性のメッシュのサブセットを描くことができることは、私が必要とするものです。
私はそれが何らかの種類の属性表を使用していることを知っています。これがどのように格納され使用されているかはわかりません。
私が考えることができる単純な解決策は、複数のインデックスバッファをメッシュに格納することです(サブセットごとに1つずつ)。これは多くのインデックスバッファになる可能性がありますが、多くのプロパティがあります。
また、メッシュの面(インデックスで参照する頂点)を格納し、それらにプロパティを割り当てることで、そのプロパティを持つすべての面からインデックスバッファを構築することで特定のプロパティを持つ面のサブセットを描画できます。
これら2つのうち、顔を保存するのはきれいに見えますが、とにかくインデックスバッファを保存する必要があると思います。
ドローコールの回数を少なくするためには、多くのサブセットを避けてください。その場合、追加のバッファが余分なメモリを占めるべきではありません。
どちらのアイデアは、しかし、最適なようですので、私はDrawSubSetの実際の実装に他のアイデアやヒントを歓迎したい:)
インデックスバッファから処理するインデックスの開始位置と数を指定できる 'ID3D11DeviceContext-> DrawIndexed(UINT IndexCount、UINT StartIndexLocation、INT BaseVertexLocation)のパラメータを完全に忘れてしまいました。だから私は私のインデックスバッファを整理し、各サブセットのインデックスの開始と終了を格納する必要があります!これにより、はるかに簡単になり、無駄な描画呼び出しを避ける必要があります – melak47