我在Android 5.1.1上面临旋转矢量传感器的问题。 我的代码:
if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
float[] inputSensorMat = new float[16];
float[] outputSensorMat = new float[16];
SensorManager.getRotationMatrixFromVector(inputSensorMat, event.values.clone());
// since default orientation is landscape, we need to swap axis
// (see documentation of remapCoordinateSystem)
SensorManager.remapCoordinateSystem(inputSensorMat,
SensorManager.AXIS_Y,
SensorManager.AXIS_MINUS_X,
outputSensorMat);
Log.v(getClass(), Constants.NEW_ORIENTATION(Arrays.toString(outputSensorMat)));
mMatrix = new Matrix4x4(outputSensorMat, true);
}
然后在Rajawali中使用旋转矩阵来渲染场景。
我的问题是:
在Android 5.1.1上,旋转矢量似乎给出相对值,具体取决于初始方向/不采用geomag。考虑传感器 - 即当我启动应用程序时。朝东,它的模型由我的右手呈现。当我启动应用程序时。朝北,模型也由我的右手呈现,而不是在我身后。
我在NVidia Shield平板电脑(2台设备)上进行了测试,其中一台配备了氰基模式和Nexus 7。
Percieved行为符合Game Rotation Vector传感器的描述,但NVidia Shield没有实现。
但是,相同的代码在Android 4.1.2和4.4上有相应的行为。
知道为什么会发生这种情况或如何解决它?
编辑: 可能是我使用的是android:targetSdkVersion =" 19"?在Eclipse中的项目构建目标中设置了相同的值(我使用的是代替Android Studio)。由于我对OpenCV的依赖,我无法设置更高的API(请参阅this question)