用threejs计算delta四元数

时间:2017-02-26 07:29:11

标签: javascript math three.js quaternions

我正在尝试计算max_bystartOrientation的增量四元数。这个fiddle证明了我的问题。

首先,我计算delta四元数,然后将其与endOrientation相乘得到endOrientation,但它不起作用。立方体的旋转总是错误的。

取消注释第37行以查看立方体的正确旋转。有关如何计算delta的任何想法吗?

2 个答案:

答案 0 :(得分:2)

让我们来看看你(看似想要)计算什么。你从

开始
gyro = start^(-1)*end

然后将场景旋转设置为

scene = end*gyro = end*start^(-1)*end

如您所见,此产品远非理想的start四元数。从期望

start == scene = end*gyro

你需要计算

gyro = end^(-1)*start

即,在当前end的计算中交换startgyro

还要探索哪些四元数方法是自修改的(如果结果是四元数,则它们都是自然的,.clone()自然除外)。

'。inverse()method equal to。conjugate()。normalize()`落入该类,以便

var gyroTrackingDelta=endOrientation.inverse();

首先反转endOrientation,然后与gyroTrackingDelta共享引用,在进一步的计算中引入奇怪的副作用。应避免不必要的自我修改的工作变体是

var gyroTrackingDelta=endOrientation.clone().inverse();
gyroTrackingDelta.multiply(startOrientation);

scene.quaternion.copy(endOrientation).multiply(gyroTrackingDelta);

答案 1 :(得分:-1)

你需要使用THREE.Quaternion.slerp吗?