X文件格式
AVS图像格式
以X为文件扩展名的文件是微软定义的文件格式.用来存放3D模型.
X文件有文本和二进制两种存储形式.
X文件内部结构如下:
·Frame
定义框架容器,用来装Mesh对象。可以包含多个Mesh对象,也可以包含子框架。在骨骼动画中可以装载一块骨骼,和一系列骨骼(如手臂),可以没有Mesh对象(表示骨骼时)。
包括两部分:
1、Mesh对象。
2、转换矩阵,本地转换矩阵,初始化最初动作状态。
FrameTransformMatrix
定义框架的本地转换矩阵,是一个4X4矩阵(Matrix4x4类型),共16个浮点数据
(注意这里的4X4矩阵是行主的)
AnimationKey
动画键,定义具体的动作数据,包括一系列旋转、移动、放缩、矩阵变换。
包括三部分:
1、动作键类型,包括旋转、移动、放缩、矩阵
2、指示有几个键数值
3、具体的键值列表(FloatKeys类型,包含时间值)
AnimationSet
动作组合,包括一个或多个动作(Animation)。每一个动作组合表示一个完整的动作
FloatKeys
定义浮点数组,它用来定义动作键数值。
包括两部分:
1、浮点值个数
2、浮点值列表
Coords2d
定义纹理坐标向量,包括两个Float值,分别是 u、v 。
ColorRGBA
定义RGBA对象。包括四个Float值,分别是R、G、B、alpha
ColorRGB
定义RGB对象。包括三个Float值,分别是R、G、B
Boolean2d
二维Boolean类型,用来定义faceWrapvalues键值
Boolean
定义Boolean类型,0或1。
IndexedColor
索引颜色定义,包含两部分:1、索引号 2、RGB值
·Material
定义材质信息,可以被应用到一个完整的Mesh对象,也可以应用到其中的一个面。
包含五部分:
1、FaceColor,环境光,包括四个浮点值,其中有Alpha值
2、Power,镜面反射的光泽度,控制亮点大小,一个浮点值
3、specularcolor,镜面反射
4、发射光
·Matrix4x4
定义四乘四矩阵,共16个值。
Mesh
定义一个Mesh对象。
共有9个部分组成:
1、包含的顶点数
2、顶点列表,一个顶点包含三个浮点值
3、面数
4、面的顶点索引列表,每个面包含三个顶点
5、MeshFaceWraps 结构,暂时无用
6、MeshTextureCoords 纹理坐标,可选
7、MeshNormals 法向,可选
8、MeshVertexColors 顶点颜色,默认为白色
9、MeshMaterialList 材质,不提供的话默认为白色
MeshFace
面索引,在Mesh结构中用于定义面索引
包括两部分,1、面数 2、顶点索引构成的面数组
·MeshFaceWraps
暂时不用
·MeshTextureCoords
定义纹理坐标
1、纹理坐标的个数
2、纹理坐标,每个纹理坐标有两个浮点值
·MeshMaterialList
定义材质应用
1、定义多少个材质被使用
2、材质影响面的个数
3、面索引
·MeshNormals
定义Mesh的法向量,包括四部分
1、nNormals,法向量的个数=顶点数
2、Normals,顶点法向量列表
3、nFaceNormals,面的个数=面数
4、FaceNormals,面对应的法向量
·MeshVertexColors
指定顶点的颜色代替原来的材质
1、顶点数目
2、颜色索引
·Patch
定义一个Bezier曲线控制面片
· PatchMesh
定义一个Bezier
Patch定义的Mesh
·Quaternion
定义四元数
·SkinWeights
定义骨骼影响权重。
包括以下几个部分:
1、骨骼的名字
2、有多少个权重值
3、顶点的索引列表
4、相对应的影响顶点索引列表
5、本地转换矩阵,转换到骨骼空间
·TextureFilename
纹理的名称,字符串类型,加双引号如:“C:\\demo.dds”
·TimedFloatKeys
时间值,用于Animaterkey中定义时间间隔
·Vector
三维向量,三个浮点值
·VertexDuplicationIndices
保留副本,用于精简Mesh的操作
1、顶点数
2、原始顶点数,实际顶点数
·XSkinMeshHeader
描述被导出的SkinMesh相关信息
1、影响一个顶点的最多变换数目
2、影响每个面三个顶点的最大变换数目
3、影响一个顶点的骨骼数