Умножение матрицы и вектора в 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 (если вы не транспонировали матрицу при загрузке).