【问题标题】:Wrong x value for sensors when using for augmented reality用于增强现实时传感器的 x 值错误
【发布时间】:2013-09-26 21:38:55
【问题描述】:

我使用以下(假设是相当标准的)代码来检索平板设备的方向以用于增强现实目的(因此后置摄像头应该指向一个有效的方向)。

private Sensor mAccelerometer;
private Sensor mMagnetometer;
private float[] mLastAccelerometer = new float[3];
private boolean mLastAccelerometerSet = false;
private float[] mLastMagnetometer = new float[3];
private boolean mLastMagnetometerSet = false;

private Sensor mAccelerometer;
private Sensor mMagnetometer;
private float[] mLastAccelerometer = new float[3];
private boolean mLastAccelerometerSet = false;
private float[] mLastMagnetometer = new float[3];
private boolean mLastMagnetometerSet = false;
private float[] inR = new float[9]; 
private float[] mR = new float[9];
private float[] mOrientation = new float[3];
...
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
...     
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
...
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_FASTEST);
mSensorManager.registerListener(this, mMagnetometer, SensorManager.SENSOR_DELAY_FASTEST);
...
public void onSensorChanged(SensorEvent event) {
    synchronized (this) {
       if (event.sensor == mAccelerometer) {
            System.arraycopy(event.values, 0, mLastAccelerometer, 0, event.values.length);

            mLastAccelerometerSet = true;

        } else if (event.sensor == mMagnetometer) {
            System.arraycopy(event.values, 0, mLastMagnetometer, 0, event.values.length);

            mLastMagnetometerSet = true;
        }

        if (mLastAccelerometerSet && mLastMagnetometerSet && scene.camera() != null && mPlane1 != null) {
            SensorManager.getRotationMatrix(inR, null, mLastAccelerometer, mLastMagnetometer);
            SensorManager.remapCoordinateSystem(inR, SensorManager.AXIS_X, SensorManager.AXIS_Z, mR);
            SensorManager.getOrientation(mR, mOrientation);

            /* my code that handles mOrientation */
        }
    }
}

问题是这段代码在 Samsung Galaxy Tab 10.1(P7500,第一个版本)上完美运行。在 Asus Transformer Pad Infinity (TF700) 上运行相同的代码,当围绕我自己旋转平板电脑时,第一个值 mOrientation[0] 仅在 +2.0 和 +3.0 之间变化(我希望它会介于 0 和 3.14 之间)。

设备有问题还是我忽略了其他变量?

【问题讨论】:

    标签: android augmented-reality android-sensors


    【解决方案1】:

    华硕TF700的硬件一定有问题。它要么在我们拥有的这个特定版本中,要么在设备的设计中。在其他 Android 设备上,该应用程序按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多