From: http://hi.baidu.com/xiexianyu/item/f9448e6ec30dd9156895e6da
游戏模型文件格式很多,支持动画的有.X格式(DirectX)、.MD2和.MD3(Quake游戏)、.3DS和.MAX(3DS Max建模软件)等,更多格式可以参考网站http://www.wotsit.org/default.asp
X文件通过模板template定义如何储存一个数据对象,预定义的模板位于rmxfguid.h和rmxftmpl.h。rmxfguid.h定义了各个标准模版的GUDI,rmxftmpl.h以二进制数据形式定义了标准模版数据的缓存和其字节数。一个模板可以是开放的、闭合的或者受限的。开放模板可以包含所有其它数据类型,封闭模板不可以包含任何其它的数据类型,受限模板只可以包含特定的数据类型。
模板格式
1. 首部Header 魔数(xof )、主次版本号(0303)、文件格式(txt、bin、tzip、bzip)、浮点数大小(32、64)。例如:xof 0303txt 0032
2. 网格Mesh
网格模板定义
template Mesh
{
< 3D82AB44-62DA-11cf-AB39-0020AF71E433 > #全球惟一标识符UUID
DWORD nVertices; #顶点数量
array Vector vertices[nVertices]; #顶点列表,1个顶点包含3个浮点数
DWORD nFaces; #面数量
array MeshFace faces[nFaces]; #面得顶点索引列表,每个面包含3个顶点
[ … ] #开放模板,可以包含任何其它数据类型,SDK帮助提供可选部分如下
}
// optional: #可选部分,表示 […]
meshFaceWraps template; \ #纹理布局,不再使用
meshTextureCoordinates template; \ #纹理坐标
meshNormals template; \ #法向量
meshVertexColors template; \ #顶点颜色,默认为白色
meshMaterialList template; \ #材质,不提供的话默认为白色
Mesh模板需要Vector模板和MeshFace模板,会引用到它们。
2.1 Mesh子对象网络材质列表MeshMaterialList
作用:它将每个面与材质相关联
模板变量含义:材质数量、面数量、面索引(面与材质的关联信息)
模板类型:受限模板,只能包含Material模板。
可以在MeshMaterialList中引用Material数据对象。
Material数据对象保存着材质颜色、镜面反射的指数、镜面反射颜色、自发光颜色。Material是开放模板,即还可以包含其它数据对象。
2.2 模板VertexDuplicationIndics保存的信息记录了网格中哪些顶点是其它顶点的副本。该模板的用途是为了允许加载程序可以判断出,哪些呈现出不同参数的顶点其实是模型中相同的顶点。某些应用程序(比如简化网格的程序)会用到这类信息。
即保留副本,用于精简Mesh的操作
2.3 法向量MeshNormals
光照模型计算中需要用到法线,法线分为面法线和顶点法线。
template MeshNormals
{
<F43-7686-11cf523>
DWORD nNormals; #法向量个数=顶点数
array Vector normals[nNormals]; #顶点法向量列表
DWORD nFaceNormals; #面个数=面数
array MeshFace faceNormals[nFaceNormals]; #面对应的法向量
}
2.4 纹理
TextureFilename数据对象用于引用纹理,它可以作为Material对象的子对象。
MeshTextureCoords指定纹理坐标。
变量含义:纹理坐标个数;纹理坐标对(u, v)数组
3. 变换矩阵
Frame
FrameTransformMatrix
4. 动画
AnimationSet
Animation
AnimationKey