Умножение матрицы и вектора в GLM (OpenGL) - PullRequest
19 голосов
/ 27 сентября 2011

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

glm::mat4 m(1.0);
glm::vec4 v(1.0);

glm::vec4 result = v * m;

Хотя, похоже, это не работает.Как правильно выполнить эту операцию в GLM?

Редактировать:

Просто примечание для тех, кто сталкивается с подобной проблемой.GLM требует, чтобы все операнды использовали один и тот же тип.Не пытайтесь умножить dvec4 на mat4 и ожидайте, что это сработает, вам нужен vec4.

Ответы [ 2 ]

24 голосов
/ 27 сентября 2011

glm::vec4 представляется в виде вектора столбца. Следовательно, правильная форма:

glm::vec4 result = m * v;

(обратите внимание на порядок операндов)

10 голосов
/ 27 сентября 2011

Поскольку GLM разработан для имитации GLSL и предназначен для работы с OpenGL, его матрицы являются основными по столбцам. И если у вас есть матрица с главным столбцом, вы умножаете ее слева на вектор.

Точно так же, как вы должны делать в GLSL (если вы не транспонировали матрицу при загрузке).

...