2016-11-14 63 views
0

我试图从文件导入玛雅动画之后,但它给我的插补之间奇怪的结果:是关闭蟒蛇importantion

https://i.imgur.com/cP27Yai.mp4

这真是奇怪,因为他们的关键帧看起来是正确的,直到我看图编辑器。

enter image description here

认为这是在第一个万向节锁定,所以我用了欧拉过滤器,但它没有给出解决的办法。有时,一个键和另一个键之间的差异是180,这就是为什么,通过只看动画,键看起来很好,但插值使它旋转180度。因此,如果我一个接一个,并减去180的密钥的价值,然后倒数(根据具体情况为正或负),我可以通过调整它的工作。

但是,这是太多的工作,特别是对于Biped动画,它可能带我永远。

这是一个常见问题还是之前发生的任何事情?有没有什么办法解决这一问题?也许这是我申请的欧拉角的方式,因为他们最初是四元,但我没有找到一个方法来直接申请的四元数:

#Taking a rotation from the QUATERNION Array and converting it to Euler. 
arot = anim.AnimRot[index].normal().asEulerRotation() 
frot = MEulerRotation(arot.x*180/math.pi, arot.y*180/math.pi, arot.z*180/math.pi) 

cmds.setAttr((obj + ".rotate"), frot.x, frot.y, frot.z) 
cmds.setKeyframe(obj, time=anim.TotalKeys[i]) 

有什么办法,从编辑器或解决这个问题脚本?任何修复它都会对导入此Biped动画非常有利。我相信这是由于欧拉转换,但我发现没有办法将四元数应用于maya API中的骨骼。

+0

我想你需要双四元数的无瞬间(180转)插值 –

+0

有没有什么办法可以将它们从文件转换为双精度?问题是,我无法直接应用四元数... –

回答

0

如果旋转已经是四元,你可能想简单地设置动画曲线使用像

cmds.rotationInterpolation('pSphere2.rotateX', 'pSphere2.rotateY', 'pSphere2.rotateZ', c="quaternionSquad") 

东西是安全的四元数插值你可以设置一个键,然后应用rotationInterpolation改变键quats,然后逐步通过应用您的原始四元数。由于您已经在API空间中,因此您可以制作MTransformationMatrix并使用其setRotationComponents方法设置quat值,以便您永远不会转换为eulers。

+0

我会给它一个去,让你知道,谢谢!我正在调查 –

+0

可悲的是,我没有设法把它关掉,关于如何正确应用这个想法的任何想法? –