要掌握3D動(dòng)畫(huà)編程,有必要了解動(dòng)畫(huà)文件的格式。X文件的txt格式比較容易理解,是初學(xué)者學(xué)習(xí)3D文件格式的一個(gè)不錯(cuò)的選擇。一個(gè)3D文件中可能包含的信息有網(wǎng)格信息、材質(zhì)信息、動(dòng)畫(huà)信息等。下面我們來(lái)試著創(chuàng)建一個(gè)有網(wǎng)格信息的X文件。
先來(lái)看一下X文件頭的寫(xiě)法:
xof 0302txt 0064
// xof :固定
// 0302 :表示使用的是DirectX 3.2版本的模板
// txt : txt 格式 (X文件分為 txt格式和二進(jìn)制格式兩種)
// 0064 :表示浮點(diǎn)型的位數(shù)是64位
模板header的定義如下:
template Header {
<3D82AB43-62DA-11cf-AB39-0020AF71E433>
//是GUID(Global Unique Identifier,全局唯一標(biāo)識(shí)符)
WORD major; //x文件的最大版本
WORD minor; //x文件的最小版本
DWORD flags; //定義方式
}
模板 Mesh 的定義如下:
template Mesh
{
<3D82AB44-62DA-11CF-AB39-0020AF71E433>
DWORD nVertices; //頂點(diǎn)個(gè)數(shù)
array Vector vertices[nVertices]; //頂點(diǎn)數(shù)組
DWORD nFaces; //面?zhèn)€數(shù)
array MeshFace faces[nFaces]; //面數(shù)組
[...] //表示該模板是開(kāi)放的模板, 即還可以添加其它信息
}
模板 Vector 定義如下:
template Vector
{
< 3D82AB5E-62DA-11cf-AB39-0020AF71E433 >
float x;
float y;
float z;
}
模板 MeshFace 定義如下:
template MeshFace
{
< 3D82AB5F-62DA-11cf-AB39-0020AF71E433 >
DWORD nFaceVertexIndices; //索引個(gè)數(shù)(如三角形有3個(gè)頂點(diǎn),則索引個(gè)數(shù)為3)
array DWORD faceVertexIndices[nFaceVertexIndices]; //頂點(diǎn)索引列表
}
下面是一個(gè)立方體的模型文件:
運(yùn)行效果: