|

楼主 |
发表于 2007-7-28 14:06:00
|
显示全部楼层
回26楼
你的理解是对的. 我也是这么想地.呵呵.
你第一个问题,关于Frame和Bone的异同及数目问题. 我的想法是这样的:
XSkinMeshHeader的骨骼数35,是指含有蒙皮信息的骨骼数目. 如果一个骨骼没有蒙皮信息,只有它本身的初始及运动矩阵,那么它就只有Frame及Animation数据,而没有SkinMesh相关数据. 在平时分析时,我们主要关心那些SkinMesh对应的Bone. 所以,纯骨骼和含蒙皮骨骼总数是47,与Frame一致.
那么,纯骨骼有用吗? ----是有用的.虽然它没有蒙皮信息,但它处在父Frame的地位,所以在矩阵变换中会影响到其它所属骨骼的坐标转换. 当然,看tiny.x文件,(你随便卡掉其中一个纯骨骼的AnimationKey,再观察后果)会发现,
其中有两个骨骼非常有影响.Box01,Bip01,人物出现平移,扭动等后果.可见这两个骨骼对人物起到了微调和定位作用.(微软做这个小丑的时候可能也用到了3dmax,把人物121走三步摆下来的).
当然,还有大量的哑元骨骼,起到占位的作用,即一系列dummy骨骼,它们的动画数据全是1.0000,0.00000,也就是它们的矩阵实际上不起作用.这些骨骼现在没用,可以去掉没影响.在必要时会有用(如弯腰,转身等)
第二个问题,Frame的名字,是由Frame xxxx{} 中名字xxxx决定的,不是由skinweight名字决定的,尽管二者有一定关联.Frame {} 这种情况,对应于无名的Frame
在示例中,我们用骨骼名寻找对应的Frame,用到了D3DXFrameFind()函数
|
|