Как выровнять оружие к камере? - PullRequest
1 голос
/ 13 апреля 2019

Я делаю FPS-игру с OpenGL (C ++).Я хочу выровнять оружие, подобное пистолету, к камере, чтобы она двигалась и вращалась вместе с камерой.

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

Итак, я удалил часть перевода (я работаю с OpenGL Matmatics (GLM) ):

view = glm::mat4(glm::mat3(view));

Проблема в том, что оружие не вращается вместе с камерой.Это означает, что когда я запускаю программу, пистолет выровнен правильно, но если я оборачиваюсь, оружие не поворачивается со мной, поэтому я больше не вижу ее.

Может ли кто-нибудь помочь добиться того, чтобы оружие было зафиксировано?к камере?

1 Ответ

1 голос
/ 13 апреля 2019

Вы должны нарисовать «оружие» в пространстве зрения, а не в мировом пространстве. Это означает, что «оружие» не должно трансформироваться матрицей вида.
Инициировать матрицу вида для «оружия» по Identity matrix :

view = glm::mat4(1.0f);

Обратите внимание, что объект сцены, кажется, движется в мире (относительно вида), потому что объект трансформируется матрицей вида. Матрица представления трансформируется из мирового пространства в пространство просмотра. Матрица вида - это обратная матрица этой матрицы, которая определяет положение и ориентацию камеры.
Если объект должен быть нарисован в пространстве вида, это означает, что объект должен сохранять свою позицию относительно камеры (вида), тогда преобразование с помощью матрицы вида должно быть пропущено. Положение объекта - это не положение в мире, а положение относительно камеры.

...