我正在尝试计算max_by
和startOrientation
的增量四元数。这个fiddle证明了我的问题。
首先,我计算delta四元数,然后将其与endOrientation
相乘得到endOrientation
,但它不起作用。立方体的旋转总是错误的。
取消注释第37行以查看立方体的正确旋转。有关如何计算delta的任何想法吗?
答案 0 :(得分:2)
让我们来看看你(看似想要)计算什么。你从
开始gyro = start^(-1)*end
然后将场景旋转设置为
scene = end*gyro = end*start^(-1)*end
如您所见,此产品远非理想的start
四元数。从期望
start == scene = end*gyro
你需要计算
gyro = end^(-1)*start
即,在当前end
的计算中交换start
和gyro
。
还要探索哪些四元数方法是自修改的(如果结果是四元数,则它们都是自然的,.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吗?