変換行列m
とベクトルv
があります。行列を使用してベクトルを線形変換したいのですが。私はこのようなことができると思います:
glm::mat4 m(1.0);
glm::vec4 v(1.0);
glm::vec4 result = v * m;
しかし、これはうまくいかないようです。 GLMでこの種の操作を行う正しい方法は何ですか?
同様の問題に遭遇した人への単なるメモ。 GLMでは、すべてのオペランドが同じ型を使用する必要があります。 dvec4
にmat4
を掛けてみて、それが機能することを期待しないでください。vec4
が必要です。
glm::vec4
は列ベクトルとして表されます。したがって、適切な形式は次のとおりです。
glm::vec4 result = m * v;
(オペランドの順序に注意してください)
GLMはGLSLを模倣するように設計されており、OpenGLで動作するように設計されているため、その行列は列優先です。また、列優先の行列がある場合は、それをベクトルで左乗算します。
GLSLで行う必要があるのと同じように(アップロード時にマトリックスを転置しない限り)。