Подтвердить что ты не робот

Умножение матрицы и вектора в GLM (OpenGL)

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

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

glm::vec4 result = v * m;

Это, похоже, не работает. Каков правильный способ выполнения такого рода операций в GLM?

Изменить:

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

4b9b3361

Ответ 1

glm::vec4 представляется как вектор-столбец. Поэтому правильная форма:

glm::vec4 result = m * v;

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

Ответ 2

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

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