Galaxy Tab和Transformer之间的方向差异

时间:2013-05-14 09:11:04

标签: android orientation android-sensors min3d

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

但是,使用Android 4.1.1在华硕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] );

onSensorChanged(SensorEvent事件)

收到mLastAccelerometer和mLastMagnetometer

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

2 个答案:

答案 0 :(得分: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;
}

这是我在回答Android Compass that can Compensate for Tilt and Pitch时使用的内容。其他人建议使用SensorManager.remapCoordinateSystem(float[], int, int, float[]),具体取决于转数是多少。

答案 1 :(得分:0)

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