Multiplying a matrix and a vector in GLM (OpenGL)
I have a transformation matrix, m
, and a vector, v
. I want to do a linear transformation on the vector using the matrix. I'd expect that I would be able to do something li开发者_Python百科ke this:
glm::mat4 m(1.0);
glm::vec4 v(1.0);
glm::vec4 result = v * m;
This doesn't seem to work, though. What is the correct way to do this kind of operation in GLM?
Edit:
Just a note to anyone who runs into a similar problem. GLM requires all operands to use the same type. Don't try multiplying a dvec4
with a mat4
and expect it to work, you need a vec4
.
glm::vec4
is represented as a column vector. Therefore, the proper form is:
glm::vec4 result = m * v;
(note the order of the operands)
Since GLM is designed to mimic GLSL and is designed to work with OpenGL, its matrices are column-major. And if you have a column-major matrix, you left-multiply it with the vector.
Just as you should be doing in GLSL (unless you transposed the matrix on upload).
精彩评论