Holen Sie sich Vektorlänge mit GLM

14

Ich bin ziemlich verwirrt darüber, wie sich die GLM-Bibliothek verhält oder wie ich sie missbräuchlich verwende.

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

float len = testVec.length();

Ich erhalte den Wert 2mit dem obigen Code-Schnipsel. Ich glaube, ich versuche, die Länge des durch definierten Vektors zu ermitteln testVec. Sie wissen sehr gut, dass es nicht die richtige Länge des Vektors ist. Was vermisse ich hier?

sajis997
quelle

Antworten:

14

Tut mir leid, Leute, die so ein kleines Problem gepostet haben! Das Problem ist gelöst. Ich habe die falsche Funktion verwendet. Hier geht die richtige:

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

Die Elementfunktion mit dem gleichen Namen gibt die Anzahl der Komponenten statt (dh vec2::lengthimmer ergibt 2, vec3::lengthwird immer ergeben 3, etc.).

sajis997
quelle
7
Entschuldigen Sie sich nicht, ich denke, es ist eine faire Frage, da die Funktionsbezeichnung von GLM hier ziemlich irreführend ist. Ich gehe davon aus, dass dies in Zukunft eine nützliche (und präzise) Referenz sein könnte.
Martin Ender
2
@MartinEnder es ist nicht GLM, der schuldig ist: Die GLSL-Spezifikation schreibt vor, dass diese Verwirrung existiert: Es gibt eine length(vecN)freie Funktion, die die Norm vecNund vecN.length()Methode zurückgibt , die Dimension von zurückgibt vecN. Siehe §5.5 Vektor- und Skalarkomponenten und Länge der GLSL 4.60-Spezifikation.
Ruslan