Forse mi manca qualcosa nei documenti, ma sembra che GLM non possa prendere la trasposizione di un vettore. Vedo anche nessun tipo mat3x1 o mat1x3. Anche glm :: transpose non funziona per i vettori. Mi sto perdendo qualcosa o questa è solo una caratteristica priva di GLM?GLM: come trasporre un vettore?
risposta
GLM è basato su GLSL, dove semplicemente non è necessario trasporre un vettore. Se fai la moltiplicazione vettoriale/matrice, moltiplica il vettore nel modo in cui funziona per la dimensione della matrice (a meno che non debba cambiare l'ordine della moltiplicazione). Quindi se hai un mat4
e fai mat4*vec4
, il tuo vec4
è considerato un vettore di colonna. Se lo fai, vec4*mat4
, è considerato un vettore di riga. Se si fa mat2x4*vec4
, si ottiene un errore, mentre vec4*mat2x4
funziona (come vettore riga).
Quindi, in generale, non c'è motivo di aver bisogno di "trasporre" un vettore. Il sistema fa semplicemente tutto ciò che funziona.
Come riferimento per le persone alla ricerca di come trasporre un vettore (in primo luogo per il calcolo dei prodotti esterni - u vT) in GLSL/GLM; la sua:
glm::core::function::matrix::outerProduct(u, v)
collegamento GLM di Nicol formato ora 404s come i loro legami API sono cambiati da:
I vedi, penso che sia quello che non stavo capendo. Grazie. – aeskreis
E se si desidera calcolare qualcosa come v * transpose (v) dove v è un vec4. Quello che voglio è un mat4 come risultato. Cioè moltiplicando un 4x1 e un 1x4 per ottenere un 4x4. Non vedo come farlo in GLM. Forse non puoi? – Chuck
@Chuck: Beh, probabilmente è perché non è un'operazione molto utile. Inoltre, puoi fare la matematica da solo abbastanza facilmente; è solo a coppie moltiplicando ogni elemento del vettore. –