【问题标题】:calculating delta Quaternion with threejs用threejs计算delta四元数
【发布时间】:2017-07-16 21:27:17
【问题描述】:
我正在尝试计算startOrientation 和endOrientation 的增量四元数。这个fiddle 说明了我的问题。
首先,我计算增量四元数,然后将它与endOrientation 相乘得到startOrientation,但它不起作用。立方体的旋转总是错误的。
取消注释第 37 行以查看立方体的正确旋转。任何想法如何计算增量?
【问题讨论】:
标签:
javascript
math
three.js
quaternions
【解决方案1】:
让我们检查一下您(似乎想要)计算的内容。你从
开始
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() 方法属于该类,因此
var gyroTrackingDelta=endOrientation.inverse();
首先反转endOrientation,然后与gyroTrackingDelta 共享引用,在进一步计算中引入奇怪的副作用。应该避免不必要的自我修改的工作变体是
var gyroTrackingDelta=endOrientation.clone().inverse();
gyroTrackingDelta.multiply(startOrientation);
scene.quaternion.copy(endOrientation).multiply(gyroTrackingDelta);
【解决方案2】:
你需要使用 THREE.Quaternion.slerp 吗?