【问题标题】:calculating delta Quaternion with threejs用threejs计算delta四元数
【发布时间】:2017-07-16 21:27:17
【问题描述】:

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


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

    【讨论】:

    • 这应该是一条评论
    猜你喜欢
    • 2011-10-05
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 2016-02-04
    相关资源
    最近更新 更多