【发布时间】:2016-08-18 13:17:46
【问题描述】:
我使用 getQuaternionFromVector() 从 Android 的 Sensor.TYPE_ROTATION_VECTOR 融合传感器中得到一个四元数。我想使用该四元数来控制我的 Rajawali 应用的摄像头。
我从传感器获得的值 (w, x, y, z) 是(横向手机,直视前方):
- 北:(0.5, 0.5, -0.5, 0.5)
- 东:(0.71, 0, -0.71, 0)
- 南:(0.5, -0.5, -0.5, -0.5)
- 西:(0, 0.71, 0, 0.71)
我需要将这些值转换为这些正确的值:
- 北:(1.0, 0, 0, 0)
- 东:(0.71, 0, 0.71, 0)
- 南:(0, 0, 1, 0)
- 西:(-0.71, 0, 0.71, 0)
通过反复试验,我找到了解决方案,但还有一段路要走。如果我先对 Y 轴旋转 90 度,然后对 X 轴旋转 -90 度:
Quaternion a = new Quaternion(Vector3.Y, 90);
a.multiply(q);
Quaternion b = new Quaternion(Vector3.X, -90);
b.multiply(a);
我得到的值是:
- 北:(1, 0, 0, 0)
- 东:(0.71, -0.71, 0, 0)
- 南:(0, -1, 0, 0)
- 西:(0.71, 0.71, 0, 0)
结果是北方正确,东方向上,西方向下,南方颠倒。我注意到轴承与俯仰混淆了(我改变了设备的俯仰,相机的轴承发生了变化,以及储备)。
关于如何修改传感器四元数以匹配预期四元数的任何建议?如何更改它以使传感器轴承改变相机轴承而不是俯仰角?
提前致谢!
【问题讨论】:
标签: android opengl-es 3d sensors rajawali