Какой способ установки положения матрицы-модели оптимальный?

Рейтинг: 0Ответов: 1Опубликовано: 16.05.2023

Допустим, есть матрица модели model, назовём её «игроком».

model = glm::mat4(1.0);

На игрока, возможно, были наложены эффекты масштабирования, поворота и перемещения.

model = glm::scale(...);
model = glm::rotate(...);
model = glm::translate(...);

Теперь мне нужно установить новое положение этому игроку относительно не самого игрока (что делает метод translate), а относительно «мира», то есть относительно начала мировых координат <0, 0, 0>.

Решение, которое сразу приходит на ум, следующее:

model = glm::translate(glm::mat4(1), glm::vec3(x, y, z));

Проблема в том, что из за того, что матрица модели model заменяется матрицей glm::mat4(1), все раннее наложенные эффекты масштабирования и поворота исчезают.

Ответы

▲ 2Принят

Обычно эти матрицы перемножают непосредственно перед отрисовкой, чтобы передавать для отрисовки в шейдер 1 итоговую матрицу Модели (игрока).

Сами же координаты игрока хранятся и используются в более простом виде - "положение", "куда смотрит" и "масштаб". Т.к. для почти любых игровых нужд, удобнее иметь положение XYZ, направление взгляда Heading/Pitch и размер Scale, а не матрицы 4х4.

То же самое относится к и помогает моделям интерполяции/экстраполяции, если, например, у вас игровая логика работает на точных 30фпс, а отрисовка динамическая 30-120фпс в зависимости от мощности GPU.