我正在尝试使用 C# 和 XNA 4.0 迭代 FBX 模型的顶点。我认为,如果我可以访问顶点,那么我将能够自己访问其他部分,例如面法线、边PolygonVertexIndex
等。
我发现 Jon Watte 的一篇文章讨论了如何使用 XNA 3.0 执行此操作, 从 XNA 模型中提取顶点和三角形, 但他使用的 3.0 结构似乎在 4.0 中不存在。
特别是,他像这样访问顶点:
Vector3[] a = new Vector3[myModelMeshPart.NumVertices];
myModelMesh.VertexBuffer.GetData<Vector3>(myModelMeshPart.StreamOffset + myModelMeshPart.BaseVertex * myModelMeshPart.VertexStride,
a, 0, myModelMeshPart.NumVertices, myModelMeshPart.VertexStride);
但在 XNA 4 中,VertexBuffer
似乎不是MeshModel
.
谁能指导我了解 aModel
顶点的基本迭代?
谢谢你。
@user2340634 感谢您的回复。
我尝试使用的结果远远少于实际的顶点数。
我想我不知道如何使用 VertexBuffer。你能评论一下这段代码吗?
private void getVerts(Model mdl)
{
foreach (ModelMesh mm in mdl.Meshes)
{
foreach (ModelMeshPart mp in mm.MeshParts)
{
VertexBuffer vb = mp.VertexBuffer;
short[] s = new short[mp.PrimitiveCount * 3];
IndexBuffer ib = mp.IndexBuffer;
ib.GetData<short>(mp.StartIndex * 2, s, 0, mp.PrimitiveCount * 3);
Vector3[] v = new Vector3[4];
VertexPositionNormalTexture[] vert = new VertexPositionNormalTexture[4];
mp.VertexBuffer.GetData<VertexPositionNormalTexture>(vert, 0, mp.NumVertices);
for (int i = 0; i < v.Length; i++)
{
v[i] = vert[i].Position;
trace("(" + v[i].X.ToString() + ", " + v[i].Y.ToString() + ", " + v[i].Z.ToString() + ")");
}
}
}
}
请问你有一个可以迭代的工作样本吗?