用threejs计算delta四元数

calculating delta Quaternion with threejs

我正在尝试计算 startOrientationendOrientation 的增量四元数。这个 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 中交换 endstart


还探索了哪些四元数方法是自修改的(如果结果是四元数,它们都是自修改的,当然 .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);