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?

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.).


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.