我试图将从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
)。我想我需要进行四元数转换,但我不知道究竟是怎么做的。