Я работаю с OpenGL ES 2.0 в приложении для Android с дополненной реальностью.Я хотел бы расположить камеру openGL в том же месте, что и моя гарнитура (с точки зрения положения и ориентации в пространстве).У меня есть доступ к положению и ориентации гарнитуры в режиме реального времени, но ориентация основана на кватернионе.
Что я пробовал до сих пор: Я преобразовал кватернион в Эйлерауглы, чтобы иметь углы рыскания, тангажа и крена (что кажется хорошим), а затем вычислил вектор направления:
float ray = 1.0f;
directionX = ray * (float) (Math.cos(rollRadian) * Math.sin(yawRadian));
directionY = ray * (float) (Math.cos(rollRadian) * Math.cos(yawRadian));
directionZ = ray * (float) Math.sin(rollRadian);
Затем я обновляю свои значения LookAt:
// LookAt = translation + direction
mLookAt[0] = headSetX + directionX;
mLookAt[1] = headSetY + directionY;
mLookAt[2] = headSetZ + directionZ;
Однако,кажется, что значения направления слишком слабые по сравнению с переводом гарнитуры, что приводит к неправильному отображению (например, я вижу свой виртуальный объект, даже когда я не смотрю в его направлении).Я подозреваю, что часть проблемы связана с параметром ray в формуле выше, который был от этот вопрос в StackExchange
Вопросы: Я что-то упустил с этой реализацией?Есть ли другой способ получить вектор LookAt (или непосредственно точку, на которую я смотрю) из положения в мировом пространстве и кватерниона ориентации?