Получить длину вектора с GLM

14

Я очень озадачен тем, как ведет себя библиотека GLM или неправильно ее использую.

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

float len = testVec.length();

Я получаю значение 2с помощью приведенного выше фрагмента кода. Я полагаю, что я пытаюсь получить длину вектора, определенного testVec. Вы очень хорошо знаете, что это не правильная длина вектора. Что мне здесь не хватает?

sajis997
источник

Ответы:

14

Извините за публикацию такого тривиального вопроса! Вопрос решен. Я использовал неправильную функцию. Здесь идет правильный:

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

Вместо этого функция-член с тем же именем возвращает количество компонентов (т.е. vec2::lengthвсегда будет давать 2, vec3::lengthвсегда будет давать 3и т. Д.).

sajis997
источник
7
Не извиняйтесь, я думаю, что это справедливый вопрос, потому что в именах функций GLM вводит в заблуждение. Я ожидаю, что это может быть полезным (и кратким) ссылкой в ​​будущем.
Мартин Эндер
2
@MartinEnder виноват не GLM: спецификация GLSL предписывает существование этой путаницы: есть length(vecN)бесплатная функция, возвращающая норму vecN, и vecN.length()метод, возвращающий измерение vecN. См. §5.5 Векторные и скалярные компоненты и длина спецификации GLSL 4.60.
Руслан