手动创建X文件(1)

Posted on 2008-11-30 15:45 Herbert 阅读(2366) 评论(2)  编辑 收藏 引用 所属分类: DirectX
  要掌握3D动画编程,有必要了解动画文件的格式。X文件的txt格式比较容易理解,是初学者学习3D文件格式的一个不错的选择。一个3D文件中可能包含的信息有网格信息、材质信息、动画信息等。下面我们来试着创建一个有网格信息的X文件。
  先来看一下X文件头的写法:
 

xof 0302txt 0064 

// xof :固定

// 0302 :表示使用的是DirectX 3.2版本的模板

// txt : txt 格式 (X文件分为 txt格式和二进制格式两种)

// 0064 :表示浮点型的位数是64位

  

模板header的定义如下:

template Header {

 <3D82AB43-62DA-11cf-AB39-0020AF71E433>
//是GUID(Global Unique Identifier,全局唯一标识符)

 WORD major;      //x文件的最大版本

 WORD minor;      //x文件的最小版本

 DWORD flags;     //定义方式

}

 

模板 Mesh 的定义如下:

template Mesh
{
    <3D82AB44-62DA-11CF-AB39-0020AF71E433>
    DWORD nVertices;  //顶点个数
    array Vector vertices[nVertices]; //顶点数组
    DWORD nFaces; //面个数
    array MeshFace faces[nFaces]; //面数组
    [...] //表示该模板是开放的模板, 即还可以添加其它信息
}

 

模板 Vector 定义如下:

template Vector
{
    < 3D82AB5E-62DA-11cf-AB39-0020AF71E433 >
    float x;
    float y;
    float z;
}

 

模板 MeshFace 定义如下:

template MeshFace
{
    < 3D82AB5F-62DA-11cf-AB39-0020AF71E433 >
    DWORD nFaceVertexIndices; //索引个数(如三角形有3个顶点,则索引个数为3)
    array DWORD faceVertexIndices[nFaceVertexIndices]; //顶点索引列表
}


下面是一个立方体的模型文件:

cube_m.xxof 0302txt 0064

Header
{
1;
0;
1;
}


Mesh Cube_m
{
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;
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;;
}


运行效果:

 

Feedback

# re: 手动创建X文件(1)  回复  更多评论   

2009-02-21 16:38 by JR_GodLin
原创还是转载?

# re: 手动创建X文件(1)  回复  更多评论   

2009-02-23 10:57 by Herbert
你好,我是参考了lovedday的文章,然后自己写的。lovedday的博客是http://www.cppblog.com/lovedday/category/4152.html

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