2012-01-10 3 views
1

私はDX11でおしゃべりしています。私はDX10にID3DX10MeshのようにID3DX11Meshがないことに気付きました。 ID3DX10Meshは、DX11がDX10を拡張しているだけでなく、XNAフレームワークの何かに置き換えられているため、これは2つの理由のいずれかが原因である可能性があります。DX10 Mesh :: DrawSubSet

まったく問題はありませんが、DX10はまだDX11で動作しているようですが、独自のメッシュクラスを実装することもできます。

ここで、ID3DX10Mesh :: DrawSubSetはどのくらい正確に機能しますか?異なる材料/特性のメッシュのサブセットを描くことができることは、私が必要とするものです。

私はそれが何らかの種類の属性表を使用していることを知っています。これがどのように格納され使用されているかはわかりません。

私が考えることができる単純な解決策は、複数のインデックスバッファをメッシュに格納することです(サブセットごとに1つずつ)。これは多くのインデックスバッファになる可能性がありますが、多くのプロパティがあります。

また、メッシュの面(インデックスで参照する頂点)を格納し、それらにプロパティを割り当てることで、そのプロパティを持つすべての面からインデックスバッファを構築することで特定のプロパティを持つ面のサブセットを描画できます。

これら2つのうち、顔を保存するのはきれいに見えますが、とにかくインデックスバッファを保存する必要があると思います。

ドローコールの回数を少なくするためには、多くのサブセットを避けてください。その場合、追加のバッファが余分なメモリを占めるべきではありません。

どちらのアイデアは、しかし、最適なようですので、私はDrawSubSetの実際の実装に他のアイデアやヒントを歓迎したい:)

+1

インデックスバッファから処理するインデックスの開始位置と数を指定できる 'ID3D11DeviceContext-> DrawIndexed(UINT IndexCount、UINT StartIndexLocation、INT BaseVertexLocation)のパラメータを完全に忘れてしまいました。だから私は私のインデックスバッファを整理し、各サブセットのインデックスの開始と終了を格納する必要があります!これにより、はるかに簡単になり、無駄な描画呼び出しを避ける必要があります – melak47

答えて

2

要するに - ID3DX__Meshを忘れると、必要な機能を持つ独自のクラスを実装します。 MSがDX SDKのすべてのコーナーで書いていたにもかかわらず、* .xファイルは単なる開発者/テストの書式であり、そうではないという理由で、DX10からの* .xファイルサポートを削除したのと同じ理由で削除しました。プロダクションの使用に適しており、多くの開発者がそれを使用していて、MSに苦情を送っていました。だからMSは教訓を学んだ。

+0

そのため、私はDrawSubSetの内部動作を調べていたので、そのようなものを実装できました。私は、異なる材料が適用された部分集合を持つメッシュを描画するのに必要です。私が他のコメントで言ったように、私はDrawIndexedですべてを行うことができると思います:) – melak47

関連する問題