文件 的整体由3部分组成
1 文件头
文件头的格式:xof 0303txt 0032
Xof表示x文件,0303表示主版本号和次版本号,txt表示是文本文件,0032表示是32位的浮点数。
2 模板
模板的格式:
template ColorRGB {
<d3e16e81-7835-11cf-8f52-0040333594a3>
FLOAT red;
FLOAT green;
FLOAT blue;
[约束]
(1)模板ID <d3e16e81-7835-11cf-8f52-0040333594a3>
它是个全局唯一标示符,用于标示这个模板
(2)模板类型
声明各种类型,组成模板的结构
(3)模板约束条件
模板约束条件有3种形式,开放模板,样式为[…],表示可以包含其它模板类型;
受限模板,样式为[xxx],其中xxx为某一指定的类型,表面此类模板只能插入xxx
类型的模板;封闭模板,最后没用[],就是不能插入任何类型的模板了。
3 模板实例
X文件的所有内容都存储在模板实例中,对x文件进行解析,就是读取模板实例中
的东西,下面就是lxq.x文件的实例。
1 文件头
文件头的格式:xof 0303txt 0032
Xof表示x文件,0303表示主版本号和次版本号,txt表示是文本文件,0032表示是32位的浮点数。
2 模板
模板的格式:
template ColorRGB {
<d3e16e81-7835-11cf-8f52-0040333594a3>
FLOAT red;
FLOAT green;
FLOAT blue;
[约束]
}
可以看到模板的结构由3部分组成,模板ID,模板类型,模板约束条件。
(1)模板ID <d3e16e81-7835-11cf-8f52-0040333594a3>
它是个全局唯一标示符,用于标示这个模板
(2)模板类型
声明各种类型,组成模板的结构
(3)模板约束条件
模板约束条件有3种形式,开放模板,样式为[…],表示可以包含其它模板类型;
受限模板,样式为[xxx],其中xxx为某一指定的类型,表面此类模板只能插入xxx
类型的模板;封闭模板,最后没用[],就是不能插入任何类型的模板了。
3 模板实例
X文件的所有内容都存储在模板实例中,对x文件进行解析,就是读取模板实例中
的东西,下面就是lxq.x文件的实例。
Material Material__26 {
1.000000;1.000000;1.000000;1.000000;;//ColorRGBA faceColor;
3.200000; //FLOAT power;
0.000000;0.000000;0.000000;; //ColorRGB specularColor;
0.000000;0.000000;0.000000;; //ColorRGB emissiveColor
TextureFilename { //纹理路径
"bd378f0.bmp";
}
}
…总共四种材质,每种材质对应一张纹理。
材质实例罗列出来后,就是x文件的核心层次框架结构。在x文件中,一般都是一个层次结构,但也有两个或更多的的层次结构。例如lxq.x中就是两个结构,tiny.x
中就是一个层次结构。这种层次结构如下面所示:
Frame Element_C0 { //框架名
FrameTransformMatrix { //该框架相对于父框架的转移矩阵
8.811612,0.000000,0.000000,0.000000,0.000000,-0.113476,
8.810882,0.000000,0.000000,8.810882,0.113476,0.000000,
40.591251,15.394788,-25.943836,1.000000;;
}
Mesh { //该框架对应的网格结构
943; //顶点数目
0.169798;0.055004;0.729962;, //顶点坐标
... //中间省去941个点
0.092184;-0.988528;0.119642