我正在尝试使用 Android 手机制作 3-dof Controller ,类似于 Wiimote。使用 Accelerometer 来识别 Controller 的方向(使用 getOrientation() 方法进行计算)
我正在通过使用这些值来旋转由 PC 中的 opengl 绘制的立方体来测试方向值。问题是,它似乎不起作用。如果手机旋转超过特定的旋转角度,立方体就会旋转到某个奇怪的方向。
在没有计算机图形学知识的情况下,我找到了引用资料,说在欧拉旋转中,3D 对象的最终图形取决于每个轴上的旋转顺序。跟问题有关系吗??如果是这样,正确的顺序是什么?当前顺序是“yaw->pitch->roll”
我不认为这是因为所谓的校准问题,因为值变化很大。
最佳答案
方向传感器已弃用。获取可靠传感器值的最佳方法是使用旋转矢量传感器。它是一种基于软件的传感器,可从基于硬件的加速度计和磁力计传感器中获取数据。
旋转向量将设备的方向表示为角度和轴的组合,其中设备已围绕轴(x、y 或 z)旋转角度 θ。以下代码向您展示了如何获取默认旋转矢量传感器的实例。查看info about this sensor在 Android 开发站点中。
这是一个如何使用旋转向量获取可靠值的示例:
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
}
关于用于旋转 3D 立方体的 Android 方向传感器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5499862/