C# と XNA 4.0 を使用して FBX モデルの頂点を繰り返し処理しようとしています。頂点にアクセスできるようになれば、顔の法線やエッジなどの他の部分に自分でアクセスできるようになると思いますPolygonVertexIndex
。
XNA 3.0 を使用してこれを行う方法について説明している Jon Watte の記事を見つけました 。Extracting Vertices and Triangles from an XNA Model ですが、彼が使用した 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
。
Model
誰かが aの頂点の基本的な繰り返しに私を導くことができますか?
ありがとうございました。
@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() + ")");
}
}
}
}
頂点を反復処理する実際のサンプルはありますか?