2013-05-14 15 views
0

我使用前置攝像頭和min3d庫開發了增強現實應用程序。此應用程序在三星Galaxy Tab 10,1(第一代)上運行良好,運行Android 4.0.4Galaxy Tab和Transformer之間的方向差異

但是,使用Android 4.1.1在華碩Transformer TF700T上測試此相同的應用程序(僅適用於橫向模式)會給出錯誤的方向並且增強的世界不再與攝像機視圖匹配。

下面的代碼用於獲取方位矢量target_axis和up_axis需要min3D:

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事件)接收

有人可以告訴我如果上面的代碼仍然依賴於太多的設備?我期望使用SensorManager的gerOrientation調用這個解決方案應該可以在不同的設備上工作?

回答

0

最後,有什麼不對的華碩變壓器墊TF700的硬件。在其他設備上,應用程序按預期工作。

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[]),這取決於該輪轉數是多少。

+0

啊,因爲我同時持有這兩個設備,這意味着Galaxy Tab與Asus Transformer有不同的「默認」方向? – Roalt 2013-05-16 11:27:17

+0

我不確定這些設備,但我認爲*平板電腦可以將默認方向設置爲橫向,而手機的默認方向往往是縱向。 – Stochastically 2013-05-16 11:40:21