用threejs计算delta四元数
calculating delta Quaternion with threejs
我正在尝试计算 startOrientation
和 endOrientation
的增量四元数。这个 fiddle 证明了我的问题。
首先,我计算了 delta 四元数,然后将其与 endOrientation
相乘得到 startOrientation
,但它不起作用。立方体的旋转总是错误的。
取消注释第 37 行以查看立方体的正确旋转。知道如何计算增量吗?
您需要使用 THREE.Quaternion.slerp 吗?
让我们检查一下您(似乎想要)计算的内容。您从
开始
gyro = start^(-1)*end
然后将场景旋转设置为
scene = end*gyro = end*start^(-1)*end
如您所见,此乘积远非所需的 start
四元数。从期望
start == scene = end*gyro
你需要计算
gyro = end^(-1)*start
也就是说,在您当前计算的 gyro
中交换 end
和 start
。
还探索了哪些四元数方法是自修改的(如果结果是四元数,它们都是自修改的,当然 .clone()
除外)。
等于.conjugate().normalize()
的.inverse()
方法属于那个class所以
var gyroTrackingDelta=endOrientation.inverse();
首先反转 endOrientation
然后与 gyroTrackingDelta
共享引用,在进一步的计算中引入奇怪的副作用。应避免不必要的自我修改的工作变体是
var gyroTrackingDelta=endOrientation.clone().inverse();
gyroTrackingDelta.multiply(startOrientation);
scene.quaternion.copy(endOrientation).multiply(gyroTrackingDelta);
我正在尝试计算 startOrientation
和 endOrientation
的增量四元数。这个 fiddle 证明了我的问题。
首先,我计算了 delta 四元数,然后将其与 endOrientation
相乘得到 startOrientation
,但它不起作用。立方体的旋转总是错误的。
取消注释第 37 行以查看立方体的正确旋转。知道如何计算增量吗?
您需要使用 THREE.Quaternion.slerp 吗?
让我们检查一下您(似乎想要)计算的内容。您从
开始gyro = start^(-1)*end
然后将场景旋转设置为
scene = end*gyro = end*start^(-1)*end
如您所见,此乘积远非所需的 start
四元数。从期望
start == scene = end*gyro
你需要计算
gyro = end^(-1)*start
也就是说,在您当前计算的 gyro
中交换 end
和 start
。
还探索了哪些四元数方法是自修改的(如果结果是四元数,它们都是自修改的,当然 .clone()
除外)。
等于.conjugate().normalize()
的.inverse()
方法属于那个class所以
var gyroTrackingDelta=endOrientation.inverse();
首先反转 endOrientation
然后与 gyroTrackingDelta
共享引用,在进一步的计算中引入奇怪的副作用。应避免不必要的自我修改的工作变体是
var gyroTrackingDelta=endOrientation.clone().inverse();
gyroTrackingDelta.multiply(startOrientation);
scene.quaternion.copy(endOrientation).multiply(gyroTrackingDelta);