openvr: двигаться в направлении просмотра - PullRequest
1 голос
/ 13 февраля 2020

Я программирую приложение с помощью openvr и opengl и хочу, чтобы камера двигалась в том направлении, в котором она смотрит. Поэтому, когда вы надеваете hmd и смотрите в определенном направлении, виртуальная камера должна лететь в этом направлении, чтобы вы могли перемещаться.

Таким образом, позиция hmd предоставляется openvr с вызовом VRCompositor()->WaitGetPoses, и это должно быть аналогично обратному матрице представления, поэтому, если я извлеку третий столбец матрицы, я должен получить смотреть направление, а затем я могу перевести свою матрицу модели вдоль этого направления, чтобы переместить сцену.

m_mat4HMDPose = VRCompositor()->WaitGetPoses;
m_mat4HMDPose = inverse(m_mat4HMDPose);
vec4 direction = m_mat4HMDPose * vec4(0.0, 0.0, -1.0, 0.0);
model = translate(model, vec3(direction.x, direction.y, direction.z));

Кажется, это не совсем неправильно, но это не работает для всех направлений. Иногда я смотрю налево, но меня переводят вправо, и наоборот. Это также происходит при движении вверх / вниз, и перевод изменится, когда я поверну hmd вокруг оси z.

Я также пытался следовать этому уроку https://www.youtube.com/watch?v=QREKO1sf8b8 для единства, и я получил движение, работающее с единством, но я не могу преобразовать код обратно для запуска с моим приложением opengl. Я пытался реализовать преобразование Эйлера и кватерниона, но безуспешно.

Я чувствую, что мне нужно преобразовать вектор направления с помощью дополнительной матрицы, чтобы он постоянно указывал в правильном направлении, но я не могу понять, как o_o

Кто-нибудь знает в чем ошибка, или знает способ как реализовать это движение?

1 Ответ

0 голосов
/ 14 февраля 2020

хорошо, я нашел ошибку, мне нужно умножить направление на обратное к позе hmd, поэтому vec4 direction = inverse(m_mat4HMDPose) * vec4(0.0, 0.0, 1.0, 0.0);

...