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