web-dev-qa-db-fra.com

Multiplier une matrice et un vecteur dans GLM (OpenGL)

J'ai une matrice de transformation, m et un vecteur, v. Je veux faire une transformation linéaire sur le vecteur en utilisant la matrice. Je m'attendrais à ce que je puisse faire quelque chose comme ça:

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

glm::vec4 result = v * m;

Cela ne semble pas fonctionner, cependant. Quelle est la bonne façon de faire ce genre d'opération dans GLM?

Éditer:

Juste une note à quiconque rencontre un problème similaire. GLM nécessite que tous les opérandes utilisent le même type. N'essayez pas de multiplier un dvec4 avec un mat4 Et attendez-vous à ce que cela fonctionne, vous avez besoin d'un vec4.

21
extropic-engine

glm::vec4 est représenté comme un vecteur de colonne. Par conséquent, la forme appropriée est la suivante:

glm::vec4 result = m * v;

(Notez l'ordre des opérandes)

28
andand

Comme GLM est conçu pour Mimic GLSL et est conçu pour fonctionner avec OpenGL, ses matrices sont majeures. Et si vous avez une matrice majeure de colonne, vous avez quitté la multiplication avec le vecteur.

Tout comme vous devriez faire dans GLSL (sauf si vous avez transposé la matrice sur le téléchargement).

10
Nicol Bolas