2012-03-25 27 views
7

Tal vez me falta algo en los documentos, pero parece que con GLM no es posible tomar la transposición de un vector. También veo que no hay tipos mat3x1 o mat1x3. También glm :: transpose no funciona para vectores. ¿Me estoy perdiendo algo o es solo una característica que falta en GLM?GLM: ¿cómo transportar un vector?

Respuesta

8

GLM se basa en GLSL, donde simplemente no hay necesidad de transponer un vector. Si haces multiplicación vector/matriz, multiplicará el vector de la manera que funcione para el tamaño de la matriz (a menos que tenga que cambiar el orden de la multiplicación). Por lo tanto, si tiene mat4 y mat4*vec4, su vec4 se considera un vector de columna. Si lo hace vec4*mat4, se considera un vector de fila. Si lo haces mat2x4*vec4, obtienes un error, mientras que vec4*mat2x4 funciona (como un vector de fila).

Por lo tanto, en general, no hay razón para tener que "transponer" un vector. El sistema simplemente hace lo que funcione.

+0

I mira, creo que eso es lo que no entendí. Gracias. – aeskreis

+0

¿Qué sucede si quieres calcular algo como v * transpose (v) donde v es un vec4? Lo que quiero es un mat4 como resultado. Es decir. multiplicando un 4x1 y un 1x4 para obtener un 4x4. No veo cómo hacer eso en GLM. Tal vez no puedes? – Chuck

+0

@Chuck: Bueno, eso es probablemente porque no es una operación muy útil. Además, puedes hacer las matemáticas tú mismo con la suficiente facilidad; es solo multiplicar por parejas cada elemento del vector. –

3

Como referencia para las personas que buscan la forma de transferir un vector (principalmente para el cálculo de los productos exteriores - u vT) en GLSL/GLM; su:

glm::core::function::matrix::outerProduct(u, v) 

enlace GLM de Nicol formato ahora 404s como sus enlaces API han cambiado a partir de: