0

我正在尝试将移动设备的物理方向从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)。我想我需要进行四元数转换,但我不知道具体如何。

4

0 回答 0