Android方向传感器用于旋转3D立方体。

3

我正在尝试使用安卓手机制作类似于Wiimote的3自由度控制器,使用加速度计识别控制器的方向(使用getOrientation()方法进行计算)。

我正在通过使用这些值来旋转opengl在PC上绘制的立方体来测试方向值。问题是,似乎不起作用。如果手机旋转到特定角度以上,立方体会旋转到一些奇怪的方向。

没有计算机图形学知识,我发现参考资料说,在欧拉旋转中,3D对象的最终形状取决于每个轴上旋转的顺序。这与问题有关吗?如果是,正确的顺序是什么?当前顺序是“偏航->俯仰->翻滚”。

我不认为这是所谓的校准问题,因为值的变化显着。

2个回答

1

方向传感器已被弃用。获取可靠的传感器值的最佳方式是使用旋转矢量传感器。它是一种基于软件的传感器,从加速度计和磁力计硬件传感器中获取数据。

旋转矢量表示设备的方向,由角度和轴的组合构成,其中设备绕轴(x、y或z)旋转了一个角度θ。以下代码向您展示如何获取默认旋转矢量传感器的实例。请参阅Android Dev Site上关于此传感器的信息

这是一个使用旋转矢量获取可靠值的示例:

public void onSensorChanged(SensorEvent event) {
       if(sensor.getType()==Sensor.TYPE_ROTATION_VECTOR){
           float[] rotationMatrix = new float[16];
           SensorManager.getRotationMatrixFromVector(rotationMatrix, event.values);
           SensorManager.getOrientation(rotationMatrix, mOrientValues);
           for(int i=0; i<3; i++)
              mOrientValues[i]=(float)
                  Math.toDegrees(mOrientValues[i])+180.0f;//orientation in degrees
}

0

我曾经遇到过类似的问题,当手机接近垂直位置时,getOrientation()返回奇怪的结果,而且校准也没有帮助。

解决方案是使用这个传感器:

manager = (SensorManager) context.getApplicationContext()
                                 .getSystemService(Context.SENSOR_SERVICE);
Sensor orientationSensor = manager.getDefaultSensor(Sensor.TYPE_ORIENTATION);`

显然,这个传感器在新平台上已经被弃用了,但它仍然可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接