web-dev-qa-db-ja.com

GLM(OpenGL)での行列とベクトルの乗算

変換行列mとベクトルvがあります。行列を使用してベクトルを線形変換したいのですが。私はこのようなことができると思います:

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

glm::vec4 result = v * m;

しかし、これはうまくいかないようです。 GLMでこの種の操作を行う正しい方法は何ですか?

編集:

同様の問題に遭遇した人への単なるメモ。 GLMでは、すべてのオペランドが同じ型を使用する必要があります。 dvec4mat4を掛けてみて、それが機能することを期待しないでください。vec4が必要です。

21
extropic-engine

glm::vec4は列ベクトルとして表されます。したがって、適切な形式は次のとおりです。

glm::vec4 result = m * v;

(オペランドの順序に注意してください)

28
andand

GLMはGLSLを模倣するように設計されており、OpenGLで動作するように設計されているため、その行列は列優先です。また、列優先の行列がある場合は、それをベクトルで左乗算します。

GLSLで行う必要があるのと同じように(アップロード時にマトリックスを転置しない限り)。

10
Nicol Bolas