MD5模型是ID公司第一款真正意义上的骨骼格式模型,在04年随着Doom3一起面世,经过几个版本的变更,现在在骨骼模型格式中依然有其重要地位。
一、 .md5mesh的文件结构。
文件头:
MD5Version <integer>
commandline ”<string>”
MD5Version - 一个整数,定义了md5的版本号,这个地方始终写10。
commandline - 一个字符串,是要传递个exportmodels命令控制台的参数。
具体参数:
numJoints <integer>
numMeshes <integer>
numJoints - 一个整数,该模型的骨骼数量。
numMeshes - 一个整数,该模型的网格数。
列表:
<string> {
[element 1]
[element 2]
[element 3]
… ect …
}
格式:首先,声明列表类型(<string>)。然后在大括号中包含具体内容。
内容每一行为一系列元素,用 进行分割。
MD5MESH中有两个组:Joints和Mesh。
Joints
“[boneName]“ [parentIndex] ( [xPos] [yPos] [zPos] ) ( [xOrient] [yOrient] [zOrient] )
boneName - 骨骼的名称。
parentIndex - 骨骼父节点的序号。
xPos - 位置x坐标。
yPos - 位置y坐标。
zPos - 位置z坐标。
xOrient - 骨骼绕x轴方向(四元数格式)。
yOrient - 骨骼绕y轴方向(四元数格式)。
zOrient - 骨骼绕z轴方向(四元数格式)。
Mesh
// meshes: [meshName]
shader ”[materialName]“
meshName - 网格的名称。
materialName - 这个网格的材质。
Vert
numverts <integer>
vert [vertIndex] ( [texU] [texV] ) [weightIndex] [weightElem]
numverts - 顶点的数量。
vertIndex - 这个顶点的索引。
texU - UV纹理坐标U分量。
texV - UV纹理坐标V分量。
weightIndex - 这个顶点在权重列表中的第一个权重的索引。
weightElem - 这个顶点在权重列表中受影响的权重数量。
Tri
numtris <integer>
tri [triIndex] [vertIndex1] [vertIndex2] [vertIndex3]
numtris - 三角形的数量。
triIndex - 这个三角形的索引。
vertIndex1 - 这个三角形的第一个顶点索引。
vertIndex2 - 这个三角形的第二个顶点索引。
vertIndex3 - 这个三角形的第三个顶点索引。
Weight
numweights <integer>
weight [weightIndex] [jointIndex] [weightValue] ( [xPos] [yPos] [zPos] )
numweights - 权重的数量。
weightIndex - 这个权重的索引。
weightValue - 权重关联的骨骼。
weightValue - 权重值。
xPos -权重平移元素的x分量。===================顶点坐标
yPos - 权重平移元素的y分量。
zPos - 权重平移元素的z分量。
二、.md5anim文件结构
文件头:
MD5Version <integer>
commandline ”<string>”
MD5Version - 一个整数,定义了md5的版本号,这个地方始终写10。
commandline - 一个字符串,是要传递个exportmodels命令控制台的参数。
具体参数:
numFrames <integer>
numJoints <integer>
frameRate <integer>
numAnimatedComponents <integer>
numFrames - 动画帧数.
numJoints - 骨骼数量
frameRate - 帧频
numAnimatedComponents - 动画元素数量
列表:
<string> {
[element 1]
[element 2]
[element 3]
… ect …
}
格式:首先,声明列表类型(<string>)。然后在大括号中包含具体内容。
内容每一行为一系列元素,用 进行分割。
Hierarchy
“[boneName]“ [parentIndex] [numComp] [frameIndex] // [parentName] ( [tX] [tY] [tZ] [qX] [qY] [qZ] )
boneName -骨骼名称
parentIndex - 骨骼父节点索引.
numComp - 变化的flags
frameIndex - 变化数据在帧中的索引
//以下为可选参数
parentName - The name of the parent bone
[tX] - Optional placeholder just to provide a visual of what components are animated
[tY] - Optional placeholder just to provide a visual of what components are animated
[tZ] - Optional placeholder just to provide a visual of what components are animated
[qX] - Optional placeholder just to provide a visual of what components are animated
[qY] - Optional placeholder just to provide a visual of what components are animated
[qZ] - Optional placeholder just to provide a visual of what components are animated
Bounds
( [minX] [minY] [minZ] ) ( [maxX] [maxY] [maxZ] )
minX - The X component of the frames’s minimum bounding box XYZ position.
minY - The Y component of the frames’s minimum bounding box XYZ position.
minZ - The Z component of the frames’s minimum bounding box XYZ position.
maxX - The X component of the frames’s maximum bounding box XYZ position.
maxY - The Y component of the frames’s maximum bounding box XYZ position.
maxZ - The Z component of the frames’s maximum bounding box XYZ position.
Baseframe
( [xPos] [yPos] [zPos] ) ( [xOrient] [yOrient] [zOrient] )
==================
第一个origin一般为mesh坐标系中mesh初始位置
第二个body一般表示整体(位移,旋转)
xPos - 骨骼相对于父骨骼的平移元素的x分量。
yPos - 骨骼相对于父骨骼的平移元素的y分量。
zPos - 骨骼相对于父骨骼的平移元素的z分量。
xOrient - 骨骼旋转元素的x分量(四元数格式)。
yOrient - 骨骼旋转元素的y分量(四元数格式)。
zOrient - 骨骼旋转元素的z分量(四元数格式)。
Frame 0,1,2, ect…
[xPos] [yPos] [zPos] [xOrient] [yOrient] [zOrient]
frame 36 {
130.2687988281===========================每帧的矢量位移
-13.4571590424 5.9545750618 -3.0542619228
xPos - 节点 相对于父节点的平移元素的x分量。
yPos - 节点 相对于父节点的平移元素的y分量。
zPos - 节点 相对于父节点的平移元素的z分量。
xOrient - 骨骼旋转元素的x分量(四元数格式)。
yOrient - 骨骼旋转元素的y分量(四元数格式)。
zOrient - 骨骼旋转元素的z分量(四元数格式)。
本文转自:http://blog.163.com/james_huangjian/blog/static/17804934520125283275195/