忙了一天,找了半天MD5的相关资料,今天终于有点收获了。呵呵(偷笑中……)
MD5文件格式分为MESH(.md5mesh)和ANIMIATION(.md5anim),分别储存顶点和动画。
MESH部分
首先先看一下文件大概的内容
MD5Version 10
commandline "mesh models/monsters/imp/animation/cycles/imp.mb -dest models/md5/monsters/imp/imp.md5mesh -game Doom -prefix IMP1_ -keep Lknee Rknee Lelbow Relbow camera Body -keep Rmissile Lmissile -parent Rmissile Rhand -parent Lmissile Lhand -parent Rwing Chest -parent Lwing Chest -parent Hips Body -parent Waist Body -parent camera Head -prefix IMP2_ -prefix IMP_ -align ALL"
numJoints 71
numMeshes 1
joints {
"origin" -1 ( 0 0 0 ) ( -0.5 -0.5 -0.5 ) //
"Body" 0 ( -0.0000002384 0 56.5783920288 ) ( -0.5 -0.5 -0.5 ) // origin
"Hips" 1 ( 3.3494229317 -0.0225959271 62.0168151855 ) ( -0.5 -0.5 -0.5 ) // Body
...
}
mesh {
// meshes: polySurface1
shader "models/monsters/imp/imp"
numverts 891
vert 0 ( 0.8658549786 0.3910109997 ) 1377 2
...
numtris 1346
tri 0 2 1 0
...
numweights 1401
weight 0 47 1 ( 1.5918749571 -0.9465401769 4.3310847282 )
...
}
关节(JOINTS):
"origin" -1 ( 0 0 0 ) ( -0.5 -0.5 -0.5 )
首先是关节的名字,然后是关节的父接点(-1代表没有),接着是关节的位置(X,Y,Z),最后是一个四元数。
当然了四元数不能只有三个元了,但因为是单位四元数,所以我们可以把最后的W计算出来。
计算式:
1.0 = x^2 + y^2 + z^2 + w^2
PS:这里的位置都是绝对位置了,并不是相对于关节的位置。
网格(MESH):
numverts 891
vert 0 ( 0.8658549786 0.3910109997 ) 1377 2
分别对应 顶点序号(U、V坐标) 权值开始序号 权值数
PS:解释下权值数,就是在皮肤骨骼动画中,每个顶点并不是只被一个骨骼所控制,是被许多骨骼所共同控制的,所以要有不用的权值了。这里,顶点的权值是从权值开始序号开始的N个权值。
numtris 1346
tri 0 2 1 0
这个就是三角形索引了,一看就明白,三角形序号和三角形所对应的三个顶点
numweights 1401
weight 0 47 1 ( 1.5918749571 -0.9465401769 4.3310847282 )
这个是权值,依次是:权值序号、关节序号、权值和XYZ位置
对了,还有一点要补充了。顶点的最终位置是这样了
v = w(1).v * w(1).weigth + w(2).v * w(2).weight + ... + w(n).v * w(n).weight
OK,MD5先到一段落,下次再补充动画部分。
本文介绍了DOOM3中的MD5文件格式,包括MESH和ANIMIATION部分。详细讲解了关节(JOINTS)的结构,如关节名字、位置和四元数。接着分析了网格(MESH),包括顶点、权值和三角形索引的细节。最后提到了顶点位置的计算公式,并预告将补充动画部分。
1406

被折叠的 条评论
为什么被折叠?



