如何在传感器四元数和3d相机四元数之间进行转换?

时间:2016-08-18 13:17:46

标签: android opengl-es 3d sensor rajawali

我使用Sensor.TYPE_ROTATION_VECTOR从Android的getQuaternionFromVector()融合传感器获得四元数。我想用那个四元数控制我的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)
  • West:(0,0.71,0,0.71)

我需要将这些值转换为这些正确的值:

  • 北:(1.0,0,0,0)
  • 东:(0.71,0,0.71,0)
  • 南:(0,0,1,0)
  • West:( - 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)
  • West:(0.71,0.71,0,0)

结果是北方正确,向东向上,向西向下,向南向上。我注意到轴承与节距混合在一起(我改变了设备的节距,相机的轴承也发生了变化,并且切换了)。

有关如何修改传感器四元数以匹配预期的四元数值的任何建议吗?如何更改它以使传感器轴承改变相机轴承而不是间距?

提前致谢!

1 个答案:

答案 0 :(得分:0)

管理以解决它。

<appsettings>
    <add key="WebSharper.JQuery.Resources.JQuery" value="//code.jquery.com/jquery-1.11.1.min.js" />
    ...