Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multiplying a matrix and a vector in GLM (OpenGL)

Tags:

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 like 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.

like image 375
n s Avatar asked Sep 27 '11 18:09

n s


2 Answers

glm::vec4 is represented as a column vector. Therefore, the proper form is:

glm::vec4 result = m * v;

(note the order of the operands)

like image 96
andand Avatar answered Oct 30 '22 10:10

andand


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).

like image 33
Nicol Bolas Avatar answered Oct 30 '22 12:10

Nicol Bolas