-
テラインモデルファイル ( *.mtm ) のフォーマットリファレンスです。
Version 1.0.0.0
- 最初のフォーマット
[Chg] | ??? |
ファイルヘッダ |
情報ヘッダ |
マテリアルスロット |
メッシュ |
ノード |
コライダー |
ファイルヘッダ
-
ファイルヘッダはテラインモデルファイルを識別するためのものになります。
- MTM_FILE_HEADER
ファイルヘッダ ( MTM_FILE_HEADER 構造体 ) |
名前 | 型 | 説明 | 値 |
---|---|---|---|
magic | UInt32 | マジック値 | 0x464D544D |
version | UInt32 | バージョン | 0x01010000 |
情報ヘッダ
-
情報ヘッダはテラインモデル全般の情報を記述します。
- MTM_INFO_HEADER 構造体
情報ヘッダ ( MTM_INFO_HEADER 構造体 ) |
名前 | 型 | 説明 |
---|---|---|
numMaterialSlot | UInt32 | マテリアルスロットの数 |
numMesh | UInt32 | メッシュの数 |
numNode | UInt32 | ノードの数 |
collShapeSize | UInt32 | コライダーのシリアライズされたシェイプのサイズ ( バイト単位 ) |
numCollPolygon | UInt32 | コライダーのポリゴン数 |
numCollPhysicsMaterial | UInt32 | コライダーの物理マテリアルの数 |
マテリアルスロット
-
マテリアルスロットは、MTM_INFO_HEADER::numMaterialSlot の値の数だけ存在します。
マテリアルスロット |
・ |
・ |
・ |
また、マテリアルスロットは以下のような構造になります。
名前 ( wchar_t[32] ) |
マテリアルファイル ( *.mtl ) が書き込まれます。 フォーマットはマテリアルファイルを参照してください。 ※ マジック値は書き込まれません |
メッシュ
- MTM_MESH_DESC
- MTM_MESH_SECTION_DESC 構造体
- MTM_MESH_OPACITY_PART 構造体
- MTM_MESH_TRANSPARENCY_PART 構造体
メッシュの記述 |
セクション |
バーテックスバッファ |
インデックスバッファ |
メッシュの記述
メッシュの記述 ( MTM_MESH_DESC 構造体 ) |
名前 | 型 | 説明 |
---|---|---|
numSection | UInt32 | セクションの数 |
vertexStride | UInt32 | バーテックスのストライド ( バイト単位 ) |
numVertex | UInt32 | バーテックスの数 |
indexStride | UInt32 | インデックスのストライド ( バイト単位 ) |
numIndex | UInt32 | インデックスの数 |
reserve | UInt32 | 予約領域 |
セクション
-
セクションはマテリアル単位で分割されており、MTM_MESH_DESC::numSection の値の数だけ存在します。
セクション |
・ |
・ |
・ |
また、セクションは以下のような構造になります。
セクションの記述 MTM_MESH_SECTION_DESC |
不透明描画のパート MTM_MESH_OPACITY_PART [ MTM_MESH_SECTION_DESC::numOPPart ] |
半透明の一括描画のパート MTM_MESH_TRANSPARENCY_PART [ MTM_MESH_SECTION_DESC::numTLPart ] |
半透明のポリゴン単位の描画のパート MTM_MESH_TRANSPARENCY_PART [ MTM_MESH_SECTION_DESC::numTIPart ] |
名前 | 型 | 説明 |
---|---|---|
materialSlotIndex | UInt32 | マテリアルスロットのインデックス |
numOPPart | UInt32 | 不透明のパート数 |
numTLPart | UInt32 | 半透明 ( 一括描画 ) のパート数 |
numTIPart | UInt32 | 半透明 ( ポリゴン単位の描画 ) のパート数 |
名前 | 型 | 説明 |
---|---|---|
baseVertex | UInt32 | バーテックスバッファの読み取り開始位置 |
numVertex | UInt32 | バーテックスの数 |
baseIndex | UInt32 | インデックスバッファの読み取り開始位置 |
numIndex | UInt32 | インデックスの数 |
名前 | 型 | 説明 |
---|---|---|
baseVertex | UInt32 | バーテックスバッファの読み取り開始位置 |
numVertex | UInt32 | バーテックスの数 |
baseIndex | UInt32 | インデックスバッファの読み取り開始位置 |
numIndex | UInt32 | インデックスの数 |
sortKey | Float32[3] | ソートキー { X, Y, Z } |
reserve | UInt32 | 予約領域 |
バーテックスバッファ
-
バーテックスバッファは、メッシュを構成する頂点の集合です。
また、バーテックスバッファのバイト単位のサイズは、MTM_MESH_DESC::vertexStride * MTM_MESH_DESC::numVertex になります。
インデックスバッファ
-
インデックスバッファはポリゴンを形成する頂点を参照するためのインデックスの集合です。
プリミティブの種類はトライアングルリストになります。
また、インデックスバッファのバイト単位のサイズは、MTM_MESH_DESC::indexStride * MTM_MESH_DESC::numIndex になります。
ノード
-
ノードは MTM_INFO_HEADER::numNode の値の数だけ存在します。
- MTM_NODE 構造体
ノード ( MTM_NODE 構造体 ) |
・ |
・ |
・ |
名前 | 型 | 説明 |
---|---|---|
aabbMin | Float32[3] | AABB の最小値 |
aabbMax | Float32[3] | AABB の最大値 |
meshIndex | Int32 | メッシュのインデックス メッシュを所持しない場合は -1 になります。 |
parentIndex | Int32 | 親ノードのインデックス 親ノードが存在しない場合は -1 になります。 |
numChild | Int32 | 子ノードの数 |
childs | Int32[8] | 子ノードの参照用インデックス配列 |
reserve | UInt32 | 予約領域 |
コライダー
-
コライダーは、
- MTM_PHYSICS_MATERIAL 構造体
-
( MTM_INFO_HEADER::collBinarySize > 0 ) &&
( MTM_INFO_HEADER::numCollPolygon > 0 ) &&
( MTM_INFO_HEADER::numCollPhysicsMaterial > 0 )
シェイプ ( UInt8 [ MTM_INFO_HEADER::collBinarySize ] ) ※ Bullet の btBvhTriangleMeshShape をシリアライズしたものになります |
ポリゴンのマテリアル参照用インデックステーブル ( UInt32 [ MTM_INFO_HEADER::numCollPolygon ] ) ※ 値は物理マテリアルリストのインデックスになります |
物理マテリアルリスト ( MTM_PHYSICS_MATERIAL [ MTM_INFO_HEADER::numCollPhysicsMaterial ] ) |
名前 | 型 | 説明 |
---|---|---|
id | Int32 | 識別子 |
attr | Int32 | 属性 |
friction | Float32 | 摩擦係数 |
restitution | Float32 | 反発係数 |