Предисловие: Я очень не знаком с графикой.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