Uzyskaj długość wektora za pomocą GLM

14

Jestem dość zdezorientowany, jak zachowuje się biblioteka GLM lub używam jej nieprawidłowo.

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

float len = testVec.length();

Otrzymuję wartość 2z powyższym fragmentem kodu. Wydaje mi się, że próbuję uzyskać długość wektora zdefiniowanego przez testVec. Wiesz bardzo dobrze, że to nie jest prawidłowa długość wektora. Czego tu brakuje?

sajis997
źródło

Odpowiedzi:

15

Przepraszam ludzi za opublikowanie tak trywialnego problemu! Problem został rozwiązany. Użyłem niewłaściwej funkcji. Oto poprawny:

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

Funkcja członkowska o tej samej nazwie zwraca zamiast tego liczbę składników (tzn. vec2::lengthZawsze da wynik 2, vec3::lengthzawsze da wynik 3itp.).

sajis997
źródło
7
Nie przepraszaj, myślę, że to uczciwe pytanie, biorąc pod uwagę, że nazywanie funkcji GLM jest tutaj dość mylące. Spodziewam się, że może to być przydatne (i zwięzłe) odniesienie w przyszłości.
Martin Ender
3
@MartinEnder to nie GLM, który jest winny: specyfikacja GLSL nakazuje istnienie tego zamieszania: istnieje length(vecN)dowolna funkcja zwracająca normę vecNi vecN.length()metodę zwracającą wymiar vecN. Patrz §5.5 Elementy wektorowe i skalarne oraz Długość specyfikacji GLSL 4.60.
Ruslan