Умножение матрицы и вектора в GLM (OpenGL)
у меня есть матрица трансформации, m
, и вектор, v
. Я хочу сделать линейное преобразование вектора с помощью матрицы. Я ожидал, что смогу сделать что-то вроде этого:
glm::mat4 m(1.0);
glm::vec4 v(1.0);
glm::vec4 result = v * m;
это, кажется, не работает, хотя. Каков правильный способ сделать такую операцию в GLM?
Edit:
просто Примечание Для тех, кто сталкивается с аналогичной проблемой. GLM требует, чтобы все операнды использовали один и тот же тип. Не пытайтесь умножить a dvec4
С mat4
и ожидайте, что это сработает, вам нужно vec4
.
2 ответов
glm::vec4
представляется в виде вектора столбца. Поэтому правильная форма:
glm::vec4 result = m * v;
(обратите внимание на порядок операндов)
поскольку GLM предназначен для имитации GLSL и предназначен для работы с OpenGL, его матрицы являются основными столбцами. И если у вас есть матрица столбцов-мажоров, вы оставили-умножьте ее на вектор.
Так же, как вы должны делать в GLSL (если вы не транспонировали матрицу при загрузке).