BACK TO TOPPAGE
BACK TO "FILEFORMAT"
*.skmフォーマットは、以下の情報が上から順に並んでます。イタリック表示は変数です。
- 頂点情報
- 1行目:"Vertices: " numVertices
- 2行目以降:index x y z b[0] b[1] b[2] dwBlendIndices nx ny nz u v
numVertices はメッシュに含まれる頂点の数です。
2行目以降は index が頂点のインデックス、その右からは頂点の要素が順に左から並んでいます。
x y z :位置(float*3)
b[0] b[1] b[2] :ブレンドウェイト(float*3)
dwBlendIndices :行列パレット(DWORD)
nx ny nz :法線(float*3)
u v :テクスチャ座標(float*2)
- インデックス情報
- 1行目"Indices: "numIndices
- 2行目以降:index1 index2 index3
numIndices はメッシュに含まれるインデックスの数です。
2行目以降は上から順番に0番目、1番目、2番目…の三角形ポリゴンを構成する
頂点のインデックスの並びです。
これがポリゴン数 numFaces = numIndices / 3 だけ並んでいます。
要するに、要素数が numIndices のインデックス配列に上から順番に代入して
やれば、そのままDrawIndexedPrimitiveで使えます。
- 面隣接性情報
- 1行目:"Adjacency: "numFaces
- 2行目以降:index1 index2 index3
ポリゴン数 numFaces = numIndices / 3 である事は先程述べた通りです。
上から順に0番目、1番目、2番目…のポリゴンに隣接するポリゴンのインデックスが
格納されています。範囲外の値は、メッシュが閉じておらず、隣接するポリゴンが
存在しない事を表しています。そもそもDirectX側で出力した値をそのまま入れてある
ので、この値をそのまま代入して用いる事ができます。
- マテリアル情報
- 1行目:"Materials: "numMaterials
- 2行目以降:
index
Diffuse_R Diffuse_G Diffuse_B Diffuse_A
Ambient_R Ambient_G Ambient_B Ambient_A
Specular_R Specular_G Specular_B Specular_A
Emissive_R Emissive_G Emissive_B Emissive_A
power
"TextureFileName"
numMaterials はメッシュ中のマテリアルの数です。
index はマテリアルのインデックスを表します。
(0 <= index <= numMaterials - 1)
Diffuse_R Diffuse_G Diffuse_B Diffuse_A はマテリアルのディフューズを
表しており、右から順に赤、緑、青、アルファ成分が並んでいます。
アンビエント、スペキュラ、エミッシヴも同様。
powerはスペキュラハイライトの強さを表します。
要はD3DMATERIAL8構造体と同じ並び方をしてるだけです。
"TextureFileName" はテクスチャ画像のファイル名となります。
テクスチャを張らない場合、これは"(NULL)"になっています。
これらの要素が、 index = 0 から index = numMaterials - 1 まで並んでいます。
- マテリアル属性情報
- 1行目:"Attributes: "numAttributes
- 2行目以降:index FaceStart FaceCount VertexStart VertexCount
index 番目のマテリアルを適用する範囲を示したものです。
FaceStart が開始面インデックス、FaceCount が面の数、
VertexStart が開始頂点インデックス、VertexCount が頂点の数となります。
D3DXATTRIBUTERANGE構造体のデータです。ただしメッシュをロードした際に
D3DXMESHOPT_ATTRSORTフラグのみを用いて、ID3DXMESH::Optimizeメソッドで
最適化してあるので、これもやはりDrawIndexedPrimitiveを用いて
マテリアルごとの描画に用いる事ができます。
但し、さらに別のフラグを用いて最適化をかける場合等、ポリゴンの順番が変更された
場合には、そのまま使う事はできなくなるので注意が必要です。
- ボーン情報
- 1行目:"Bone: "numBones
- 2行目以降:
"BoneName"
index ParentBoneIndex SymmetricBoneIndex
BoneBegin_x BoneBegin_y BoneBegin_z BoneEnd_x BoneEnd_y BoneEnd_z
Quaternion_x Quaternion_y Quaternion_z Quaternion_w
"BoneName" :ボーンの名前です。
index :ボーンのインデックス。これに限らず頂点やマテリアル等でも
同様ですが、配列の順番に上から出力してるだけなので、あまり意味はありません。
BoneBegin_x BoneBegin_y BoneBegin_z :ボーンの始点を表すベクトル。
回転の中心でもあります。
BoneEnd_x BoneEnd_y BoneEnd_z :ボーンの終点を表すベクトル。
ウェイト計算にて、ボーンの長さに対する比率等を計算するのに使います。
その他にはあまり使い道が無さそうです。
Quaternion_x Quaternion_y Quaternion_z Quaternion_w :
初期状態のボーンの姿勢を表すクォータニオン。出力したアニメーションファイルの
クォータニオンは初期状態からの変化分を出力しているので、アニメーションを再生
する分には使い道は無さそうです。しかし、姿勢の反転においては、対称となる
ボーンのローカル座標に対するクォータニオンの y , z 成分を反転し、現在の
ボーンがローカル座標に対してそのクォータニオンとなるように、変化分の
クォータニオンを計算しなくてはならない為、このデータが必要です。
要するに再生のみに必要な情報は、ParentID と BoneBegin ベクトルのみです。
これらの扱い方については、*.bnfファイルを参照して下さい。
BACK TO TOPPAGE
BACK TO "FILEFORMAT"