我正在尝试计算startOrientation
和endOrientation
的三角形四元数。这fiddle演示我的问题。使用threejs计算三角形四元数
首先,我计算三角形四元数,然后它与endOrientation
相乘得到但它不工作。立方体的旋转总是错误的。
取消注释第37行以查看多维数据集的正确旋转。任何想法如何计算三角洲?
我正在尝试计算startOrientation
和endOrientation
的三角形四元数。这fiddle演示我的问题。使用threejs计算三角形四元数
首先,我计算三角形四元数,然后它与endOrientation
相乘得到但它不工作。立方体的旋转总是错误的。
取消注释第37行以查看多维数据集的正确旋转。任何想法如何计算三角洲?
让我们来看看你(看似想要)计算的东西。你开始
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()。正常化()`属于这一类,以便
var gyroTrackingDelta=endOrientation.inverse();
第一反相endOrientation
然后股与gyroTrackingDelta
引入在进一步奇怪副作用的参考计算。应避免不必要的自修改的工作变体是
var gyroTrackingDelta=endOrientation.clone().inverse();
gyroTrackingDelta.multiply(startOrientation);
scene.quaternion.copy(endOrientation).multiply(gyroTrackingDelta);
谢谢!它像一个魅力! – Nikolaus
您是否需要使用THREE.Quaternion.slerp?
这应该是一条评论 –
小提琴在哪里? –
将尽力解决。 –