|
描述: 3dsmax8里导出的skin动画
图片:

使用MAXScript导出骨骼动画时,需要输出每帧骨头的局部旋转变换,也就是说要输出每帧骨头相对于它的父骨头以及它自己的初始变换的旋转变换Mr。还要输出骨头初始时的位移T0和帧位移Tn。这样,在实际使用中就可以用T0把骨头移回原点,用Mr做旋转,再用Tn把骨头移到目标处。注意,这里的Mr要去除父骨头的Mr,也就是MPr。 根据实际的使用发现,MAXScript中的骨头变换矩阵M = Mr * Minit * MP,也就是先做帧变换再做初始变换,最后叠加上父骨头的变换,所以这个Mr不是我们要的Mr(它是骨头在初始状态时的帧变换,我们要的是骨头已经到位时的相对变换,所以下面把它记为Mr'),需要处理一下才能得到我们要的Mr。因为所有相连骨头的变换都与根骨头的初始变换相关,所以首先要用inverse(MRinit)把骨头旋转为初始状态,再用Mr'做帧旋转,最后用MRinit转回去(根骨头的MRinit可设为单位矩阵),这三者的乘积才是我们要的Mr。 具体做法是,先在初始帧时得到骨头变换Minit * MPinit、根骨头的变换MRinit和位移T0,在任意帧处得到骨头的世界变换M和位移Tn。 M = Mr' * Minit * MP Mr' = M * inverse(MP) * inverse(Minit) = M * inverse(Minit * MP) Mr = inverse(MRinit) * Mr' * MRinit (根骨头的MRinit和MP为单位矩阵) 需要输出的有T0,Tn,Mr。Mr可以用四元数来表示,若在实际使用四元数时旋转方向相反,可以对四元数的XYZ取负号。可能还要根据实际情况交换Y和Z轴。
|
一共有 2 条评论
搞两天没搞明白
邮箱:448028567◎qq.com