2012-06-08 6 views
1

Я пытаюсь реализовать простой инструмент дополненной реальности для Android. Все, что нужно сделать, это взять в качестве входных данных расположение моего местоположения и устройства, а также местоположение другого устройства и представить представление камеры с наложением значка в соответствующем месте в соответствующем размере.Внедрение без маркера расширенной реальности в Android

Я застрял в двух местах:

Я написал код, чтобы получить обновления для текущего азимута, тангажа и крена устройства. Код выглядит следующим образом:

private final SensorEventListener goodListener = new SensorEventListener() { 
    private float[] magneticValues; 
    private float[] accelerometerValues; 

    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
    } 

    public void onSensorChanged(SensorEvent event) { 
     switch (event.sensor.getType()) { 
     case Sensor.TYPE_MAGNETIC_FIELD: 
      magneticValues = event.values.clone(); 
      break; 
     case Sensor.TYPE_ACCELEROMETER: 
      accelerometerValues = event.values.clone(); 
      break; 
     } 

     if (magneticValues != null && accelerometerValues != null) { 
      float[] outR = new float[9]; 
      float[] orientationValues = new float[3]; 

      SensorManager.getRotationMatrix(outR, null, 
        accelerometerValues, magneticValues); 
      SensorManager.getOrientation(outR, orientationValues); 

      double azimuth = Math.toDegrees(orientationValues[0]); 
      double pitch = Math.toDegrees(orientationValues[1]); 
      double roll = Math.toDegrees(orientationValues[2]); 

     } 
    } 

Когда я использую вход читать эти значения, они кажутся относительно стабильных, но они, кажется, не соответствуют углам вокруг любого натурального набора осей, и я не могу понять что представляют цифры. Как я должен интерпретировать эти цифры?

Учебное пособие http://www.devx.com/wireless/Article/42482/0/page/3 использует гораздо более простой подход, но я не могу заставить его работать.

Как только у меня есть азимут, тангаж и рулон моего устройства вместе с моей широтой и долготой, а также с другим устройством, как определить, где положить значок на экран? Это, кажется, сложная геометрия, где мы должны представить поле зрения камеры как бесконечный конус, проецировать его на поверхность земли и посмотреть, находится ли другое место в проецируемой области, но это кажется ужасно сложным. Есть ли лучший способ, с которым я не обращаю внимания?

ответ

1

Это не прямой ответ на ваш вопрос, но вы можете попытаться взглянуть на mixaresource code.

Основной код, который может вас заинтересовать в этом классе: https://github.com/mixare/mixare/blob/master/src/org/mixare/MixView.java вокруг линии № 212 и далее.

Как вы можете видеть, код не использует азимут, подачу и рулон, а скорее манипулирует матрицами.

Что касается проблемы геометрии, я не понимаю, когда вы говорите «проект [FOV камеры] на поверхность земли». Я бы сказал, что FOV проецируется в виртуальную сферу, которая окружает пользователя.