http://hi.baidu.com/zyb_debug/blog/item/fbe409eeb8a8b5e5cf1b3e0b.html
阅读 Advanced Animation
谈到SkinWeights里面的TransformMatrix的时候一笔带过,我始终不理解这个matrix有何用处,因为我感觉所有的顶点变换都被 Frame里面的阶层体系做了,那么SkinWeights里面的matrix有什么用。
经过我一个晚上的思考,看了GameDev论坛的帖子,终于理解了。
首先讲建模,建模建出来的是一些顶点,这些顶点组成了最原始的mesh。
最原始的mesh中有SkinWeights信息
SkinWeights
{
名字;
影响的顶点数;
顶点的索引;//就是影响了几个顶点
顶点权重;//乘以Frame TransformMatrix的百分比
最后就是一个4*4的矩阵;
}
这个4*4矩阵是这时骨骼在 Mesh中的位置的逆矩阵,也就是相对于 local坐标系。
我说的明白点,手腕是个骨骼,手指尖是手腕影响的顶点。就是一个点,vetex,在自身坐标系下。
那么用 手指尖这个点 * SkinWeightsMatrix 得到的就是个位置,什么位置?就相当于把手腕连带指尖移到坐标原点。当然,手腕在坐标原点的位置。
至于Frame中存储的阶层体系矩阵就是现在骨骼的位置。
找到现在手腕骨骼的矩阵, 手指尖Vertex* SkinWeighsMatrix*(肩膀的Matrix*胳膊肘的matrix*手腕的matrix),
那么手指尖自然就变换到了相应的位置。
我说得这么通俗,不知道传达到思想没?
参考链接
http://www.gamedev.net/community/forums/topic.asp?topic_id=479158
http://www.gamedev.net/community/forums/topic.asp?topic_id=392242
最后感慨下,GameDev的论坛果然是好地方