我正在使用MEM加速度计通过THREE.js库移动虚拟形象。但是,由于我的虚拟形象无法正确定位,因此当传感器同时绕X,Y和Z旋转时,我面临一个问题。我的意思是,它不反映MEMs加速度计的位置。让我用图像解释一下。我们将传感器置于此初始位置。红色轴是X,绿色是Y,蓝色是Z:
初始位置
https://i.stack.imgur.com/fQSsL.jpg
现在,当传感器旋转到新位置时,它将发送X = 90,Y = -90,Z = 90度的信号:
https://i.stack.imgur.com/njGBO.jpg
这是传感器发送的,因为将对象坐标与世界坐标进行比较,实际上X现在是Z所在的位置,Z是Y所在的位置,Y是X所在的位置;然后将它们全部旋转。
我面临的问题是我不知道如何指示我的化身达到这个位置。使用带有或不带有四元数的局部或世界旋转,我仅用2个旋转即可得到该点。例如,使用四元数,我只需要在X和Z -90角度旋转。
var rotation = new THREE.Quaternion();
rotation.setFromEuler( new THREE.Euler(x_angle, y_angle, z_angle, 'XYZ') );
bone.setRotationFromQuaternion(rotation);
我有一个更深入的了解,但是这是从两个角度完成的,最后谈到我认为是我所具有的限制。但是,我不明白他针对此限制发布的解决方案。
如何利用传感器提供的信息来达到这个位置?有一种方法可以知道哪个是冗余轴?
非常感谢您的帮助。谢谢:)