OpenGL: получить LookAt центр из положения и ориентации с кватернионом - PullRequest
0 голосов
/ 15 ноября 2018

Я работаю с 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 (или непосредственно точку, на которую я смотрю) из положения в мировом пространстве и кватерниона ориентации?

...