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


14

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

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

float len = testVec.length();

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

Ответы:


14

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

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

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


7
Не извиняйтесь, я думаю, что это справедливый вопрос, потому что в именах функций GLM вводит в заблуждение. Я ожидаю, что это может быть полезным (и кратким) ссылкой в ​​будущем.
Мартин Эндер

2
@MartinEnder виноват не GLM: спецификация GLSL предписывает существование этой путаницы: есть length(vecN)бесплатная функция, возвращающая норму vecN, и vecN.length()метод, возвращающий измерение vecN. См. §5.5 Векторные и скалярные компоненты и длина спецификации GLSL 4.60.
Руслан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.