手动创建X文件(2)

Posted on 2008-11-30 20:07 Herbert 阅读(480) 评论(0)  编辑 收藏 引用 所属分类: DirectX
   上一节我们创建了一个立方体,接下来我们为它添加材质信息。先来看一下材质相关的模板的定义。
 

模板MeshMaterialList 定义如下:

template MeshMaterialList
{
    < F6F23F42-7686-11CF-8F52-0040333594A3 >
    DWORD nMaterials; //材质个数
    DWORD nFaceIndexes; //面索引个数
    array DWORD faceIndexes[nFaceIndexes]; //面索引列表
    [Material <3D82AB4D-62DA-11CF-AB39-0020AF71E433>] //约定只能包含Material模板
}

 

模板Material 定义如下:

template Material
{
    < 3D82AB4D-62DA-11CF-AB39-0020AF71E433 >
    ColorRGBA faceColor; //面的颜色
    FLOAT power; // specular color 指数
    ColorRGB specularColor;
    ColorRGB emissiveColor;
    [...]
}


 

模板ColorRGBA 定义如下:

template ColorRGBA
{
    < 35FF44E0-6C7C-11cf-8F52-0040333594A3 >
    float red;
    float green;
    float blue;
    float alpha;
}


模板ColorRGB 定义如下:

template ColorRGB

{

    < D3E16E81-7835-11cf-8F52-0040333594A3 >

    float red;

    float green;

    float blue;

}


 

模板TextureFilename 定义如下:

template TextureFilename
{
    < A42790E1-7810-11cf-8F52-0040333594A3 >
    string filename;  //纹理图片文件名
}

 

模板MeshTextureCoords 定义如下:

template MeshTextureCoords
{
    < F6F23F40-7686-11cf-8F52-0040333594A3 >
    DWORD nTextureCoords; //纹理坐标个数
    array Coords2d textureCoords[nTextureCoords] ; //纹理坐标数组
}

 

模板Coords2d 定义如下:

template Coords2d
{
    < F6F23F44-7686-11cf-8F52-0040333594A3 >
    float u;
    float v;
}



   我们在原有模型的基础上添加两个材质

Material YelloImage {
1.000000;1.000000; 0.000000;1.000000;;    
0.000000;      
0.000000;0.000000;0.000000;;
0.000000;0.000000;0.000000;; 
TextureFilename
{
"Herbert.png";
}
}


Material PurpleImage
{
1.000000; 0.000000; 1.000000; 1.000000;; //颜色: R G B A  
0.000000;
0.000000; 0.000000; 0.000000;;
0.000000; 0.000000; 0.000000;;

TextureFilename
{
"Candy.png";
}
}


在 Mesh 里面嵌入 MeshMaterialList、MeshNormals、MeshTextureCoords。完整代码如下:

cube_material.xxof 0302txt 0064

Header
{
1;
0;
1;
}

 


Material YelloImage {
1.000000;1.000000; 0.000000;1.000000;; //颜色: R G B A      
0.000000;      // specular color 指数
0.000000;0.000000;0.000000;; // specularColor
0.000000;0.000000;0.000000;; // emissiveColor

TextureFilename
{
"Herbert.png";
}
}


Material PurpleImage
{
1.000000; 0.000000; 1.000000; 1.000000;; //颜色: R G B A  
0.000000;
0.000000; 0.000000; 0.000000;;
0.000000; 0.000000; 0.000000;;

TextureFilename
{
"Candy.png";
}
}


Mesh Cube_material
{
8; //8 个顶点
 2.0;-2.0; 2.0;,
 2.0;-2.0;-2.0;,
-2.0;-2.0;-2.0;,
-2.0;-2.0; 2.0;,
 2.0; 2.0; 2.0;,
 2.0; 2.0;-2.0;,
-2.0; 2.0;-2.0;,
-2.0; 2.0; 2.0;;

12; // 12 个面
3;0,2,1;,
3;0,3,2;,
3;4,5,6;,
3;4,6,7;,
3;0,1,5;,
3;0,5,4;,
3;3,7,6;,
3;3,6,2;,
3;1,2,6;,
3;1,6,5;,
3;0,4,7;,
3;0,7,3;;

 

MeshMaterialList
{
2; //材质个数
12; //面个数
0,
0,
0,
0,
0,
0,
1,
1,
1,
1,
1,
1;;
{YelloImage}
{PurpleImage}
}


MeshNormals
{
8;  //8个法线向量
  
 1.0;-1.0; 1.0;,
 1.0;-1.0;-1.0;,
-1.0;-1.0;-1.0;,
-1.0;-1.0; 1.0;,
 1.0; 1.0; 1.0;,
 1.0; 1.0;-1.0;,
-1.0; 1.0;-1.0;,
-1.0; 1.0; 1.0;;


12; //12个面
3;0,2,1;, //12个面中每个顶点对应一个向量索引
3;0,3,2;,
3;4,5,6;,
3;4,6,7;,
3;0,1,5;,
3;0,5,4;,
3;3,7,6;,
3;3,6,2;,
3;1,2,6;,
3;1,6,5;,
3;0,4,7;,
3;0,7,3;;

}

 


MeshTextureCoords
{
8; //8个纹理坐标
0.0; 0.0;
0.0; 1.0;
0.0; 0.0;
0.0; 1.0;

1.0; 0.0;
1.0; 1.0;
1.0; 0.0;
1.0; 1.0;;
}

}

 


运行效果如下:
 

 

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理