Multiplying a matrix and a vector in GLM (OpenGL)

青春壹個敷衍的年華 提交于 2019-12-18 18:47:32

问题


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.


回答1:


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

glm::vec4 result = m * v;

(note the order of the operands)




回答2:


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



来源:https://stackoverflow.com/questions/7574125/multiplying-a-matrix-and-a-vector-in-glm-opengl

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!