我涉足DX11,我注意到没有DX10中有ID3DX10Mesh,就像没有ID3DX11Mesh。
我想这可能是由于以下两点之一:ID3DX10Mesh没有替换,因为DX11主要只是扩展了DX10,还是被XNA框架中的东西替换了?
完全不是问题,DX10似乎仍然可以与DX11一起使用,但是我认为我也可以实现自己的网格类。
现在的问题是,ID3DX10Mesh::DrawSubSet到底如何工作?我希望能够绘制具有不同 Material /特性的网格子集。
我知道它使用某种类型的属性表-虽然不清楚如何存储和使用它,但我不清楚。
我能想到的一种简单解决方案是将多个索引缓冲区简单地存储在一个网格中,每个子缓冲区一个。尽管具有许多属性,但这可能会成为大量索引缓冲区。
另外,通过存储网格物体的面(按索引引用顶点)并为其分配属性,我可以通过从具有该属性的所有面构建索引缓冲区来绘制具有特定属性的面子集。
在这两种方法中,存储面部看起来更加整洁,但是我希望无论如何我都必须存储索引缓冲区。 (似乎不需要花费时间在每个帧上重建这些缓冲区)
我想无论如何都应避免许多子集,以保持较低的绘制调用次数,在这种情况下,额外的缓冲区不应占用过多的额外内存。
虽然这两个想法似乎都不是最优的,所以我欢迎其他想法或DrawSubSet实际实现的线索:)
最佳答案
简而言之-不用担心ID3DX__Mesh并实现您自己的具有所需功能的类。他们删除它的原因与从DX10中删除* .x文件支持的原因相同-因为尽管MS已在DX SDK的每个角落编写了* .x文件,但* .x文件只是一种开发/测试格式,并非适用于生产用途,许多(显然是懒惰的人,只是愚昧无知的)开发人员都在使用它,并且向MS投诉它的某些功能缓慢/不足。因此,MS吸取了教训。