2016-12-23 7 views
0

Предисловие: Я очень не знаком с графикой.Android - Перемещение по матрице вращения датчика

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

Я следил за примерами на странице Android Developers, и у меня есть как матрица вращения, так и ориентация. Оба, похоже, имеют смысл. У меня есть мой образ, который на данный момент я просто хочу всегда исправлять на Севере, но в конечном итоге будет рандомизировать его на X градусов с севера, а также некоторые вверх/вниз и т.д.

Я потерялся относительно того, как разместить свое изображение в 3D-пространстве и как использовать вектор вращения для определения положения изображения на экране.

Любая помощь или ссылки на статьи были бы очень оценены.

Я использую пример кода со страницы разработчика Андроида:

@Override 
public void onSensorChanged(SensorEvent event) { 
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
     mGravity = event.values; 
    } else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) { 
     mGeomagnetic = event.values; 
    } 
    if (mGravity == null || mGeomagnetic == null) { 
     return; 
    } 

    float R[] = new float[16]; 
    float I[] = new float[9]; 
    if (SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic)) { 
     Log.d(TAG, ...); 
    } 
} 

Моя кишка инстинкт должен был взять Matrix.invertM из R, а затем использовать Matrix.multiplyMV умножения перевернутую матрицу вращения мировой позиции объекта Я хочу (теперь давайте предположим, что объект находится в 5 м к северу от меня, положив его на (0, 5, 0, 0)). Я использовал компас и уровень, чтобы убедиться, что моя поверхность плоская, и мой телефон ориентирован N. Результат оператора печати выше следующая матрица вращения:

-0.37, 0.93, 0.02, 0.00 
-0.92, -0.37, 0.07, 0.00 
0.07, 0.01, 1.00, 0.00 
0.00, 0.00, 0.00, 1.00 

Это кажется неправильным, поскольку матрица должна быть идентификационная матрица:

1, 0, 0, 0 
0, 1, 0, 0 
0, 0, 1, 0 
0, 0, 0, 1 

ответ

0

Вместо этого, пытаясь понять, где вы ошибаетесь, я настоятельно рекомендую вам попробовать и войти в нее самостоятельно. В Интернете есть образцы и ответы на вопросы, которые показывают именно то, что вы хотите, поэтому, очевидно, вы можете попробовать их и учиться у них (один пример: Android sensors for OpenGL, есть также некоторые из github).

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

Примеры: http://www.songho.ca/opengl/gl_transform.html https://www.raywenderlich.com/3664/opengl-tutorial-for-ios-opengl-es-2-0