Obtenez la longueur du vecteur avec GLM

14

Je suis assez confus quant au comportement de la bibliothèque GLM ou je ne l'utilise pas correctement.

glm::vec2 testVec(6,-4);

float len = testVec.length();

J'obtiens la valeur 2avec l'extrait de code ci-dessus. Je crois que j'essaie d'obtenir la longueur du vecteur définie par testVec. Vous savez très bien que ce n'est pas la bonne longueur du vecteur. Qu'est-ce que j'oublie ici?

sajis997
la source

Réponses:

14

Désolé pour avoir publié un problème aussi banal! Le problème est résolu. J'utilisais la mauvaise fonction. Voici la bonne:

glm::vec2 testVec(6,-4);
float len  = glm::length(testVec);

La fonction membre du même nom renvoie à la place le nombre de composants (c. vec2::length-à- d. Donnera toujours 2, vec3::lengthdonnera toujours 3, etc.).

sajis997
la source
7
Ne vous excusez pas, je pense que c'est une bonne question, vu que la dénomination des fonctions de GLM est assez trompeuse ici. J'espère que cela pourrait être une référence utile (et concise) à l'avenir.
Martin Ender
2
@MartinEnder ce n'est pas GLM qui est coupable: la spécification GLSL prescrit que cette confusion existe: il y a length(vecN)une fonction libre renvoyant la norme vecNet la vecN.length()méthode, retournant la dimension de vecN. Voir §5.5 Composants vectoriels et scalaires et longueur de la spécification GLSL 4.60.
Ruslan