我使用前置摄像头和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调用这个解决方案应该适用于不同的设备吗?
答案 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的硬件出现了问题。在其他设备上,应用程序按预期工作。