关于模型的vertexbuffer和indexbuffer的困惑

时间:2013-01-24 22:56:12

标签: 3d xna content-pipeline

我有一个包含多个网格的模型文件(即:一棵树,一辆汽车......),用作我们游戏的静态背景。我的目标是将模型的顶点和索引存储为两个缓冲区,并将这些缓冲区分配给GPU。但是,在去的路上我有点困惑。

这个Riemer's XNA Tutorial表明模型本身有一个大的顶点缓冲区和一个包含其所有网格(和meshparts)信息的大索引缓冲区,但似乎无法访问这些缓冲区。但是,可以访问ModelMeshParts的缓冲区,但我无法将它们全部连接到一个缓冲区中。

我的猜测是扩展模型处理器以在运行时将模型顶点和索引存储在数组中。有没有更简单的方法,因为Riemer说这些缓冲区已经定义了?我对这个说法感到困惑。

感谢您的回答。

1 个答案:

答案 0 :(得分:1)

实际上,整个模型只有1个顶点缓冲区和1个索引缓冲区。在任何ModelMeshPart中公开的顶点缓冲区是整个模型的顶点缓冲区,它与任何其他MMP中公开的缓冲区相同。无需连接它们,整个缓冲区都在每个MMP中。

每个MMP都有自己的缓冲区起始索引,每个MMP都有自己的变量,用于描述从起始索引连续使用的特定MMP的顶点数。

enter image description here

因此,在这个模型的VB图中,ModelMesh[1]->ModelMeshPart[1]的起始索引为300,顶点数为75.这样,在绘制MMP时,设备知道只使用那些少数几个顶点。整个VB。