我正在嘗試使用C#和XNA 4.0遍歷FBX模型的頂點。我認爲,如果我可以訪問頂點,那麼我就可以自己訪問其他部分,如臉部法線,邊緣,PolygonVertexIndex
等。使用XNA 4.0從fbx模型中提取頂點
我發現喬恩Watte的一篇文章討論瞭如何使用XNA 3.0, Extracting Vertices and Triangles from an XNA Model 但他使用似乎並沒有在4.0存在的3.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
屬性。
任何人都可以請指導我的Model
的頂點的基本迭代?
謝謝。
@ user2340634謝謝您的迴應。
我的嘗試使用了比實際#個vert更少的嘗試。
我想我不知道如何使用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() + ")");
}
}
}
}
你有一個工作樣本,迭代通過verts,請嗎?
謝謝,這讓我得到了頂點。太糟糕了,其他數據沒有相應的緩衝區。 – user2340426 2013-05-04 07:51:23
就好像你確實需要一個正常向量的緩衝區。緩衝區真的只是繪畫。 – user2340634 2013-05-06 04:14:15