http://hi.baidu.com/zyb_debug/blog/item/fbe409eeb8a8b5e5cf1b3e0b.html
閱讀 Advanced Animation
談到SkinWeights里面的TransformMatrix的時(shí)候一筆帶過,我始終不理解這個(gè)matrix有何用處,因?yàn)槲腋杏X所有的頂點(diǎn)變換都被 Frame里面的階層體系做了,那么SkinWeights里面的matrix有什么用。
經(jīng)過我一個(gè)晚上的思考,看了GameDev論壇的帖子,終于理解了。
首先講建模,建模建出來的是一些頂點(diǎn),這些頂點(diǎn)組成了最原始的mesh。
最原始的mesh中有SkinWeights信息
SkinWeights
{
名字;
影響的頂點(diǎn)數(shù);
頂點(diǎn)的索引;//就是影響了幾個(gè)頂點(diǎn)
頂點(diǎn)權(quán)重;//乘以Frame TransformMatrix的百分比
最后就是一個(gè)4*4的矩陣;
}
這個(gè)4*4矩陣是這時(shí)骨骼在 Mesh中的位置的逆矩陣,也就是相對(duì)于 local坐標(biāo)系。
我說的明白點(diǎn),手腕是個(gè)骨骼,手指尖是手腕影響的頂點(diǎn)。就是一個(gè)點(diǎn),vetex,在自身坐標(biāo)系下。
那么用 手指尖這個(gè)點(diǎn) * SkinWeightsMatrix 得到的就是個(gè)位置,什么位置?就相當(dāng)于把手腕連帶指尖移到坐標(biāo)原點(diǎn)。當(dāng)然,手腕在坐標(biāo)原點(diǎn)的位置。
至于Frame中存儲(chǔ)的階層體系矩陣就是現(xiàn)在骨骼的位置。
找到現(xiàn)在手腕骨骼的矩陣, 手指尖Vertex* SkinWeighsMatrix*(肩膀的Matrix*胳膊肘的matrix*手腕的matrix),
那么手指尖自然就變換到了相應(yīng)的位置。
我說得這么通俗,不知道傳達(dá)到思想沒?
參考鏈接
http://www.gamedev.net/community/forums/topic.asp?topic_id=479158
http://www.gamedev.net/community/forums/topic.asp?topic_id=392242
最后感慨下,GameDev的論壇果然是好地方