How to get Vertex from Mesh that loaded by .x File.
Load Mesh from .x File(how to load mesh from .x file)
Then, get CustomVertex.PositionNormalTextured from Mesh.
// Load Mesh from .x File
Mesh mc = FromFile(
:
// get Vertex Buffer from Mesh
VertexBuffer vb = mc.VertexBuffer;
// get Stream of VertexBuffer
GraphicsStream data = vb.Lock(0, 0, LockFlags.None);
// create vertex array
CustomVertex.PositionNormalTextured[] vertA = new CustomVertex.PositionNormalTextured[mc.NumberVertices];
// read all vertex from mesh
for (int i = 0; i < mc.NumberVertices; i++)
{
// Create new PositionNormalTextured
CustomVertex.PositionNormalTextured pnTex = new CustomVertex.PositionNormalTextured();
// Read stream with PositionNormalTextured Type
pnTex = (CustomVertex.PositionNormalTextured)data.Read(pnTex.GetType());
vertA[i] =pnTex;
}
// Unlock Buffer
vb.Unlock();
It is simple.
Don’t forget cast to VertexTypeDirect3D | .x ファイルから Meshを読み込む(C#)でMeshを .x ファイルから取得しました。
ここではMeshからVertex情報の取得の仕方を説明します。
前回の記事でMeshを取得した後、CustomVertex.PositionNormalTextured型データを取得します。
// Load Mesh from .x File
Mesh mc = FromFile(
:
// get Vertex Buffer from Mesh
VertexBuffer vb = mc.VertexBuffer;
// get Stream of VertexBuffer
GraphicsStream data = vb.Lock(0, 0, LockFlags.None);
// create vertex array
CustomVertex.PositionNormalTextured[] vertA = new CustomVertex.PositionNormalTextured[mc.NumberVertices];
// read all vertex from mesh
for (int i = 0; i < mc.NumberVertices; i++)
{
// Create new PositionNormalTextured
CustomVertex.PositionNormalTextured pnTex = new CustomVertex.PositionNormalTextured();
// Read stream with PositionNormalTextured Type
pnTex = (CustomVertex.PositionNormalTextured)data.Read(pnTex.GetType());
vertA[i] =pnTex;
}
// Unlock Buffer
vb.Unlock();
意外とシンプルですね。
Vertex型のキャストを忘れないように注意してください。
