Obter comprimento de vetor com GLM

14

Estou bastante confuso sobre como a biblioteca GLM está se comportando ou estou usando-a incorretamente.

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

float len = testVec.length();

Eu recebo o valor 2com o trecho de código acima. Acredito que estou tentando obter o comprimento do vetor definido por testVec. Você sabe muito bem que não é o comprimento correto do vetor. O que estou perdendo aqui?

sajis997
fonte

Respostas:

14

Desculpe pessoal por postar uma questão tão trivial! O problema está resolvido. Eu estava usando a função errada. Aqui está o correto:

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

A função membro com o mesmo nome retorna o número de componentes (ou seja vec2::length, sempre produzirá 2, vec3::lengthsempre produzirá 3, etc.).

sajis997
fonte
7
Não se desculpe, acho que é uma pergunta justa, já que a nomeação de funções do GLM é bastante enganosa aqui. Espero que isso possa ser uma referência útil (e concisa) no futuro.
Martin Ender
2
@MartinEnder não é o GLM quem é culpado: a especificação do GLSL prescreve essa confusão: existe uma length(vecN)função livre retornando a norma vecNe o vecN.length()método, retornando a dimensão de vecN. Consulte §5.5 Componentes vetoriais e escalares e comprimento da especificação GLSL 4.60.
Ruslan