Xファイルのフォーマット(1)

Posted on Sat 24 March 2007 in DirectX

Xファイルの一番上には、 xof 0302txt 0064 というような可変長ヘッダーがある。
\"xof\"は、マジック番号と呼ばれる。
\"03\"は、メジャーバージョン3をあらわす。
\"02\"は、マイナーバージョン2をあらわす。
\"txt\"は、そのXファイルが、テキスト形式であることをあらわす。
\"txt\"の代わりに、バイナリファイルの\"bin\"、MSZip圧縮テキストの\"tzip\"、MSZip圧縮バイナリの\"bzip\"、が選べる。
\"0064\"は64ビット浮動小数点をあらわす。
代わりに、\"0032\"を選ぶとができる。

Xファイルはテンプレート形式で書かれている。

template {    
  メンバー1;  
  メンバー2;  
  .  
  .  
  .  
}
template Vector {  
  <3D82AB5E-62DA-11cf-AB39-0020AF71E433>  
  FLOAT x;  
  FLOAT y;  
  FLOAT z;  
}

Vectorは、ベクトルを定義する。

template MeshFace {  
  <3D82AB5F-62DA-11cf-AB39-0020AF71E433>  
  DWORD nFaceVertexIndices;  
  array DWORD faceVertexIndices[nFaceVertexIndices\];  
} 

Mesh テンプレートで、メッシュの面を定義するために使われる。
nFaceVertexIndicesは、インデックスの数。
array faceVertexIndicesは。インデックスの配列。
インデックスは、頂点を設定する順番を決める。

Meshは、単純なメッシュの情報を記述する。

template Mesh {  
  <3D82AB44-62DA-11cf-AB39-0020AF71E433>  
  DWORD nVertices;  
  array Vector
  vertices[nVertices];  
  DWORD nFaces;  
  array MeshFace faces[nFaces];  
  [...]  
}

nVerticesは、頂点の数。
array verticesは、Vectorの要素数nVerticesの配列。
nFacesは、面の数。
array facesは、MeshFaceの要素数nFacesの配列。
[...]があるので、他にマテリアル情報などを記述できる。