2017-02-26 160 views
1

我正在尝试计算startOrientationendOrientation的三角形四元数。这fiddle演示我的问题。使用threejs计算三角形四元数

首先,我计算三角形四元数,然后它与endOrientation相乘得到但它不工作。立方体的旋转总是错误的。

取消注释第37行以查看多维数据集的正确旋转。任何想法如何计算三角洲?

+0

小提琴在哪里? –

+0

将尽力解决。 –

回答

1

让我们来看看你(看似想要)计算的东西。你开始

gyro = start^(-1)*end 

,然后设置场景旋转

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

正如你可以看到,这款产品是远远所需start四元。从预期

start == scene = end*gyro 

你需要计算

gyro = end^(-1)*start 

就是交换endstart在你目前的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); 
+0

谢谢!它像一个魅力! – Nikolaus

-1

您是否需要使用THREE.Quaternion.slerp?

+0

这应该是一条评论 –