23

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

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

glm::vec4 result = v * m;

ただし、これは機能していないようです。GLMでこの種の操作を行う正しい方法は何ですか?

編集:

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

4

2 に答える 2

33

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

glm::vec4 result = m * v;

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

于 2011-09-27T19:17:19.350 に答える
11

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

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

于 2011-09-27T19:14:17.527 に答える