【发布时间】:2015-08-05 17:58:59
【问题描述】:
我正在尝试将两个四元数旋转相同的量(使用相同的四元数)。我有一个 absoluteRotation 和一个 relativeRotation(相对于其父级),我想将 absoluteRotation 旋转到另一个 Transform 的 absoluteRotation,然后更改存储的相对位置以及存储的 absoluteRotation 以再次匹配:
void LateUpdate()
{
Quaternion newAbsRotation = Quaternion.RotateTowards(absRotationChain[0], boneChain[0].rotation, 0.5f);
Quaternion modX = Quaternion.Inverse(absRotationChain[0]) * newAbsRotation;
if(newAbsRotation == (absRotationChain[0] * modX)) {
Debug.Log("Equal!");
} else {
Debug.Log("Unequal!");
}
absRotationChain[0] = newAbsRotation;
// absRotationChain[0] = (absRotationChain[0] * modX) // doesn't work
}
但是,我无法为两个绝对四元数之间的旋转创建相对四元数。我已经阅读了多个来源,它应该是 q' = q1-1 * q2,事实上,上面的代码从未打印出“不相等!”。但是,当我更换
absRotationChain[0] = newAbsRotation
与
absRotationChain[0] = (absRotationChain[0] * modX)
应该是相等的。四元数不仅产生相同的结果,还非常快速地(在半秒内)迭代地逼近 (0, 0, 0, 0) 四元数。如果我随后也将 RotateTowards 函数的第三个参数 (0.5f) 替换为 11f,那么我的四元数变为 (NaN, NaN, NaN, NaN)。
我现在在这个问题上工作了几个小时,但找不到这个问题的原因,更不用说解决方案了 :(
【问题讨论】:
标签: c# unity3d rotation quaternions