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

Posted on Sun 25 March 2007 in DirectX

//これはコメントです。  
#これもコメントです。  
//この例は、正しいポリゴンでない可能性があります。  
Mesh (ここにメッシュの名前をつけることもできる。){  
    3; //頂点の数  
    0.00000;271.38129;0.00000;, //頂点1の座標  
    0.00000;240.92551;-153.11031;, //頂点2の座標  
    0.00000;-128.71561;-400.09680;; //頂点3の座標

    1; //面の数  
    3;0,1,2;; //インデックスの数;インデックスの配列

    //ここまでが必須要素です。

これに付随してオプションのデータをつけることができます。
使用できるオプションのデータは、
・MeshFaceWraps (今では使われてないらしい)
・MeshTextureCoords
・MeshNormals
・MeshVertexColors
・MeshMaterialList
である。

/////////////////////////////////////////////////////////////  
//MeshTextureCoordsはメッシュのテスクチャ座標を定義する。  
template MeshTextureCoords {
    < F6F23F40-7686-11cf-8F52-0040333594A3 >  
    DWORD nTextureCoords;  
    array coords2d textureCoords[nTextureCoords];  
}

nTextureCoords-テクスチャ座標の数。
array textureCoords-要素数nTextureCoordsのCoords2dの配列。
Coords2dは、テクスチャのUV座標を設定するためのテンプレート。

////////////////////////////////////////////////////  
//MeshNormalsは、メッシュの法線を定義する。  
template MeshNormals {
    < F6F23F43-7686-11cf-8F52-0040333594A3 >  
    DWORD nNormals;  
    array Vector;
    normals[nNormals];  
    DWORD nFaceNormals;  
    array MeshFace meshFaces[nFaceNormals];  
}

nNormals-法線の数。
array normals-要素数nNormalsのVectorテンプレートの配列、法線のベクトル。
nFaceNormals-面法線の数。
array meshFaces-要素数nFaceNormalsのMeshFaceの配列、面法線をあらわす。

//////////////////////////////////////////////////////  
//MeshVertexColorsは、面またはメッシュごとに頂点色を設定する。  
template MeshVertexColors {
    <1630B821-7842-11cf-8F52-0040333594A3>  
    DWORD nVertexColors;  
    array IndexColor vertexColors[nVertexColors\];  
}

nVertexColors-色の数。
array vertexColors-要素数nVertexColorsのIndexColorの配列。
IndexColorは、インデックス引数とRGBA色で構成される。

/////////////////////////////////////////////////////////  
//MeshMaterialListは、どのマテリアルをどの面に適用するのかを指定する。  
template MeshMaterialList {
    < F6F23F42-7686-11cf-8F52-0040333594A3 >  
    DWORD nMaterials;  
    DWORD nFaceIndexes;  
    DWORD FaceIndexes;  
    [Material]  
}

nMaterials-存在するマテリアルの数をしてする。
nFaceIndexes-FaceIndexesの数。
FaceIndexe-インデックス番号。
Materialテンプレートをオプションとしてつけることができる。

//////////////////////////////////////////////////////////  
//Materialは、メッシュ全体またはそれぞれの面に適用できる。マテリアル色を定義す。template
Material {
    < 3D82AB4D-62DA-11cf-AB39-0020AF71E433 >  
    ColorRGBA faceColor;  
    float power;  
    DWORD specularColor;  
    DWORD emissiveColor;  
    [TextureFilename]  
}

faceColor-面の色
power-マテリアルのスペキュラ色指数
specularColor-スペキュラ色
emissiveColor-エミッション色
TextureFilenameをオプションとしてつけることもできる。
TextureFilenameは、テクスチャファイルのパスを指定する。

よって最小の構成のXファイルは、一般的に以下のような形式になる。

    Mesh {
        頂点の数;
        頂点の座標達;
        面の数;
        面のを表す頂点のインデックス;
        MeshMaterialList {
            使用するマテリアルの数;
            面の数;
            それぞれの面の使用する引数;//繰り返し
            使用するマテリアルへの参照;//繰り返し
            TextureFilename{
                "ファイルへのパス";
            }
        }
        MeshNormals {
            法線の数;
            法線の座標達;
            面法線インデックスの数;
            インデックス達;
        }
        MeshTextureCoords {
            頂点の数;
            テクスチャ座標u;テクスチャ座標v;//繰り返し
        }
    }