0

フロントカメラと min3d ライブラリを使用して拡張現実アプリケーションを開発しました。このアプリケーションは、Android 4.0.4 を実行している Samsung Galaxy Tab 10,1 (第 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 イベント)から受信されます。

上記のコードがまだデバイスに依存しすぎているかどうか、誰か教えてもらえますか? 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

結局、ASUS Transformer Pad TF700 のハードウェアに何か問題がありました。他のデバイスでは、アプリケーションは期待どおりに機能しました。

于 2013-09-26T13:40:21.290 に答える