旋转变换与另一个与原点无关的变换相同

时间:2018-03-08 06:35:46

标签: unity3d 3d rotation quaternions

我在一些Quaternion数学方面遇到了一些困难。我有两个骷髅,但关节的方向不同,例如一个肩膀'向上'向量'是(0,1,0),而另一个骨架'向上向量'的肩膀是(1,0,0)。

所以问题是我想将确切的姿势从一个骨架复制到另一个骨架。但轮换不匹配。到目前为止我所拥有的是

Quaternion ProcessRot(Quaternion InitialCloneRotation, Quaternion Destination, Quaternion InitialDestinationRotation)
{
    return (InitialCloneRotation) * Quaternion.FromToRotation(InitialDestinationRotation * Vector3.forward, Destination * Vector3.forward);
}

其中InitialCloneRotation是世界空间中克隆的初始骨骼旋转

目标是世界空间

中原始骨架的当前骨骼旋转

InitialDestinationRotation是世界空间中原始骨架初始骨骼旋转

但是所有的旋转方向仍然是错误的。

我也试过

return (InitialCloneRotation) * (Quaternion.Inverse(InitialDestinationRotation) * Destination);

我认为因为所有旋转都在世界空间中我应该能够得到相对的世界空间旋转,无论骨骼是如何定向的?

我无法改变骨骼,因为我正在尝试将kinect运动转移到已经为其制作了许多动画的骨架上。

1 个答案:

答案 0 :(得分:0)

Bah,好的,所以订单很重要

return (Quaternion.Inverse(InitialDestinationRotation) * Destination) * (InitialCloneRotation);

作品

我已经浪费了3个小时的时间,然后在发布后立即弄明白:\