DX10 Mesh :: DrawSubSet

时间:2012-01-10 16:38:58

标签: c++ directx directx-11

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

不完全是一个问题,DX10似乎仍然适用于DX11,但我想我也可以实现自己的网格类。

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

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

我能想到的一个简单的解决方案是简单地在网格中存储多个索引缓冲区,每个子集一个。虽然这可能会成为大量的索引缓冲区。

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

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

我认为应该避免使用很多子集以保持绘制调用的数量较少,在这种情况下,额外的缓冲区不应占用太多额外的内存。

这两个想法似乎都不是最佳,所以我欢迎DrawSubSet实际实现的其他想法或线索:)

1 个答案:

答案 0 :(得分:2)

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