1

私は DX11 に手を出していますが、DX10 に ID3DX10Mesh があったように、ID3DX11Mesh がないことに気付きました。DX11 はほとんど DX10 を拡張するだけなので、ID3DX10Mesh を置き換える必要がなかったか、それとも XNA フレームワークの何かに置き換えられたのでしょうか。

正確には問題ではありません。DX10 のものは DX11 でも動作するようですが、独自のメッシュ クラスを実装した方がよいと考えました。

ID3DX10Mesh::DrawSubSet はどのように機能するのでしょうか。異なるマテリアル/プロパティを持つメッシュのサブセットを描画できることは、私が必要とするものです。

ある種の属性テーブルを使用していることは知っています-これがどのように保存および使用されているかは不明です。

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

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

これら 2 つのうち、面を保存する方がすっきりしているように見えますが、とにかくインデックス バッファーを保存する必要があると思います。(フレームごとにこれらのバッファを再構築する時間を犠牲にすることは不要に思えます)

描画呼び出しの数を低く抑えるために、とにかく多くのサブセットを回避する必要があると思います。その場合、追加のバッファーが追加のメモリをあまり占有しないようにする必要があります。

ただし、どちらのアイデアも最適とは思えないので、DrawSubSet の実際の実装に関する他のアイデアや手がかりを歓迎します :)

4

1 に答える 1

2

つまり、ID3DX__Mesh のことは忘れて、必要な機能を持つ独自のクラスを実装します。彼らは、DX10 から *.x ファイルのサポートを削除したのと同じ理由で、それを削除しました。MS が DX SDK の隅々に、*.x ファイルは単なる開発/テスト用の形式であり、そうではないことを記述していたにもかかわらずです。本番環境での使用に適しているため、多くの (明らかに怠惰で無知な) 開発者がそれを使用しており、MS に速度の遅さ/一部の機能の欠如について苦情を送信していました。したがって、MS は教訓を学びました。

于 2012-01-11T14:10:13.250 に答える