0

我使用前置摄像头和 min3d 库开发了一个增强现实应用程序。此应用程序在运行 Android 4.0.4 的三星 Galaxy Tab 10,1(第一代)上运行良好

但是在装有 Android 4.1.1 的 ASUS Transformer TF700T 上测试相同的应用程序(仅限横向模式)会返回错误的方向,并且增强的世界不再与相机视图匹配。

以下代码用于获取 min3D 所需的方向向量 target_axis 和 up_axis:

SensorManager.getRotationMatrix(mR, null, mLastAccelerometer, mLastMagnetometer); 
SensorManager.getOrientation(mR, mOrientation);
Number3d target_axis = new Number3d( -mR[2], -mR[5], -mR[8] );
Number3d up_axis = new Number3d( mR[1], mR[4], mR[7] );

mLastAccelerometer 和 mLastMagnetometer 从onSensorChanged(SensorEvent event)接收

有人能告诉我上面的代码是否仍然过多地依赖于设备吗?我希望使用 SensorManager 的 gerOrientation 调用这个解决方案应该适用于不同的设备?

4

2 回答 2

1

我的猜测是这与设备的方向有关,即纵向,横向,reversePortrait,reverseLandscape 等。您发布的代码肯定太天真了,因为它没有考虑设备相对于它的旋转默认方向。使用类似下面的方法来计算方位角调整

int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
float screen_adjustment = 0;
switch(rotation) {
    case Surface.ROTATION_0:   screen_adjustment =          0;         break;
    case Surface.ROTATION_90:  screen_adjustment =   (float)Math.PI/2; break;
    case Surface.ROTATION_180: screen_adjustment =   (float)Math.PI;   break;
    case Surface.ROTATION_270: screen_adjustment = 3*(float)Math.PI/2; break;
}

这是我在对可以补偿 Tilt 和 Pitch 的 Android Compass的回答中使用的。其他人建议根据旋转数使用SensorManager.remapCoordinateSystem(float[], int, int, float[]) 。

于 2013-05-14T10:22:12.110 回答
0

最后,华硕Transformer Pad TF700的硬件出现了问题。在其他设备上,该应用程序按预期工作。

于 2013-09-26T13:40:21.290 回答