1

我正在涉足DX11,我注意到没有ID3DX11Mesh,就像DX10中有ID3DX10Mesh一样。我想这可能是由于两件事之一,要么 ID3DX10Mesh 不需要替换,因为 DX11 主要只是扩展了 DX10,或者它已被 XNA 框架中的某些东西替换?

不完全是一个问题,DX10 似乎仍然可以与 DX11 一起使用,但我认为我不妨实现自己的网格类。

现在的问题是,ID3DX10Mesh::DrawSubSet 究竟是如何工作的?能够绘制具有不同材料/属性的网格子集是我希望我需要的。

我知道它使用某种属性表——我不清楚它是如何存储和使用的。

我能想到的一个简单解决方案是简单地将多个索引缓冲区存储在一个网格中,每个子集一个。尽管有许多属性,但这可能会变成大量的索引缓冲区。

或者,通过存储网格的面(通过索引引用顶点)并为它们分配属性,我可以通过从具有该属性的所有面构建索引缓冲区来绘制具有某个属性的面子集。

在这两个中,存储面孔似乎更整洁,但我希望无论如何我都必须存储索引缓冲区。(似乎没有必要牺牲每一帧重建这些缓冲区的时间)

我想无论如何都应该避免使用许多子集以保持低绘制调用的数量,并且在这种情况下,额外的缓冲区不应该占用太多额外的内存。

不过,这两个想法似乎都不理想,所以我欢迎其他想法或线索来了解 DrawSubSet 的实际实现:)

4

1 回答 1

2

简而言之 - 忘记 ID3DX__Mesh 并实现您自己的具有您需要的功能的类。他们删除它的原因与他们从 DX10 中删除 *.x 文件支持的原因相同——因为尽管 MS 在 DX SDK 的每个角落都编写了 *.x 文件只是一种开发/测试格式而不是它适合生产使用,很多(显然是懒惰的或只是无知的)开发人员正在使用它,并向 MS 抱怨它运行缓慢/缺少某些功能。所以MS已经吸取了教训。

于 2012-01-11T14:10:13.250 回答