OGRE动画系统--OGRE中的mesh文件和skeleton文件解析

Ogre中的Mesh文件主要包含:共享的顶点信息、subMesh部分、skeleton链接文件、骨骼和顶点索引和权重信息、LOD信息、包围盒信息、subMesh名字列表、边缘信息、Pose动画信息、Extreams信息和Pose动画关键帧信息。

Ogre中的skeleton文件包含:骨骼混合模式、骨骼绑定信息、骨骼层次信息、骨骼动画信息以及骨骼链接信息(可以链接到新skeleton文件)

Ogre中的subMesh信息包含:材质文件、是否是共享文件、顶点索引数、是否是32位的索引、索引数据、读取几何信息(Geometry)、当前subMesh的形状(三角形、四边形等)、当前subMesh的骨骼和顶点权重关系以及纹理过滤信息等。

Ogre中的Geometry信息包含:顶点数、几何顶点信息、几何顶点数据。

以下我会分四小节分别介绍以上这些具体的数据:

2.1 Mesh文件

Mesh的内存结构类似如下:

 OGRE动画系统--OGRE中的mesh文件和skeleton文件解析_第1张图片

 

除了SubMeshGeometry几何体信息之外,其他我会稍微介绍一下它们的数据结构:

1. 骨骼和顶点权重值的数据结构类似如下:

<vertexIndex, boneIndex, weight>... ....

顶点号,骨骼号,以及当前骨骼对顶点的权重值。

2. LOD信息:

就是每一层的数据,如果LOD层数为1,说明没有LOD信息,它的数据结构类似如下:

<strategyName>

<numLevels>

<isLodManual>

<lod1 read lod detail information>

<lod2 read lod detail information>

... ....

3. 包围盒信息:

就是包围盒和包围球半径:

<minx, miny, minz>

<maxx, maxy, maxz>

<radius>

4. subMesh索引:

就是subMesh索引和名字的对应关系:

<subMeshIndex, subMeshName>... ......

5. 边缘信息:

它的数据结构如下:

<lod index>

<isManual>

<read edge lod infor>

6. Pose偏移值信息:

只要是每个顶点的偏移值,类似的数据结构如下:

<name, target, isIncludesNormal>

<vertexIndex, offset, offsetNormal>... .... ....

7. 顶点动画信息

就是每个动画,每个动画的Track和关键帧信息,类似的数据结构如下:

<animations>

<animation name, length>

<baseAniName baseKeyTime>

<track aniType, target>

<keyFrame1 time, vertexData />

<... ...>

</track>

<.... ....>

</animation>

<... ...>

</animations>

可以包含多个Animation, 每个Animation可以包含多个tracks,每个tracks可以包含多个KeyFrams,逐层读取数据。

8. Extreams信息

表示Mesh数据的极值点,可以用来帮助entity排序的。

数据结构如下:

<subMeshIndex>

<vertex><vertex><.. ...>

 

2.1.1 SubMesh部分

subMesh包含相对应的材质名称、是否使用共享点、顶点数据、顶点索引数据、当前subMesh的类型(四边形、三角形等)、骨骼权重信息、纹理参数信息等。

大概的数据类似如下:

<subMesh>

<material name=”” />

<useSharedVertices=false />

<indexCount=100 />

<isUse32Bit = false />

<index 0 1 2..../>

<geometry ../>

<operation=”triangle” />

<boneAss vertexIndex=”1” boneIndex=”2” weight=”1.0” />

<... .../>

<aliasName=”” textureName=”” />

</subMesh>

2.1.2 Geometry部分

Geometry部分就是顶点数据部分,包括顶点位置、法向、纹理坐标、切向坐标、颜色、副法向、混合索引、混合权重等等。

Geometry在内存上,主要包含两个数据部分:数据格式定义部分和具体数据部分。

数据格式定义部分主要包含数据的格式、含义、索引号、偏移值等等。

数据定义部分主要包括顶点位置等具体数据部分。

数据格式大概如下:

<vertexElement source=”1” type=”VES_POSITION” semantic=”FLOAT_3” offset=”0” index />

<vertex buffer bind=”1” vertexSize=”20”  x=”10” y = “11” z = 12” />

2.2 Skeleton文件

这部分的数据主要包含以下几个部分:

1. 混合模式:平均混合/加权混合

2. 骨骼信息:骨骼信息及绑定姿势信息

3. 骨骼父子关系:骨骼父子关系

4. 骨骼动画信息:具体的动画信息

5. 额外的动画链接文件信息。

这部分的数据是相对独立的,里面的骨骼信息是跟相对应的mesh文件中的骨骼索引相对应的,所以可以这么说,一份mesh对应一份skeleton文件,当然skeleton文件还可以在链接外在的skeleton文件。

这部分的数据格式类似如下:

<skeleton blend=”avage” />

<bone name=”head” handle=”1” positon=”3 5 1” rotate=”3 1 4 6” scale=”1 1 1” />

<... .../>

<childHandle=”1” parentHandle=”2” />

<... .../>

<animation name=”test” length=”10”>

<basekeyFrame Name=”tt” baseKeyTime=”2” />

<track boneHande=”2”>

<keyFrame time=”1.1” position=”2 2 2” rotate=”1 2 3 4” scale=”1 1 1” />

<.... ...>

</track>

<... ...>

</animation>

<... ...>

一般情况下,骨骼动画是不会包含缩放信息的,你想象一下,自己的手可以伸缩,那是多么的可怕。。

你可能感兴趣的:(OGRE动画系统--OGRE中的mesh文件和skeleton文件解析)