如何计算两个空间旋转之间的差异

时间:2016-12-27 21:43:42

标签: javascript math quaternions gl-matrix

我试图将从deviceorientation事件获得的移动设备的物理方向转换为我的3D查看器中的一系列相机旋转。问题是我需要对从deviceorientation取得的第一个方向进行空间旋转,即页面加载方向。因此,我需要保存第一个方向,然后以某种方式进行与从保存的方向更改为当前方向的空间旋转。

我该怎么做?

请注意,我使用glMatrix四元数进行空间旋转,但我对此主题并不熟悉。

目前我的旋转功能如下:

function rotate(aX, aY, aZ) {
    var rotation = quat.create();
    quat.rotateX(rotation, rotation, aX);
    quat.rotateY(rotation, rotation, aY);
    quat.rotateZ(rotation, rotation, aZ);
    quat.normalize(rotation, rotation);
    ...
}

我的deviceorientation听众看起来像这样(确定它尚未完成):

var aInitial = null;
window.addEventListener('deviceorientation', function (event) {
    var alpha = e.alpha, beta = e.beta, gamma = e.gamma;
    if (!aInitial) aInitial = [alpha, beta, gamma];
    // somehow get angles aX, aY, aZ from alpha, beta, gamma and aInitial
    rotate(aX, aY, aZ);
});

我想很难找到明确的公式来获得所需的角度(aX, aY, aZ)。我想我需要进行四元数转换,但我不知道究竟是怎么做的。

0 个答案:

没有答案