Какой способ установки положения матрицы-модели оптимальный?
Допустим, есть матрица модели 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), все раннее наложенные эффекты масштабирования и поворота исчезают.
Ответы (1 шт):
Обычно эти матрицы перемножают непосредственно перед отрисовкой, чтобы передавать для отрисовки в шейдер 1 итоговую матрицу Модели (игрока).
Сами же координаты игрока хранятся и используются в более простом виде - "положение", "куда смотрит" и "масштаб". Т.к. для почти любых игровых нужд, удобнее иметь положение XYZ, направление взгляда Heading/Pitch и размер Scale, а не матрицы 4х4.
То же самое относится к и помогает моделям интерполяции/экстраполяции, если, например, у вас игровая логика работает на точных 30фпс, а отрисовка динамическая 30-120фпс в зависимости от мощности GPU.