2013-04-10 2 views
6

Ho cercato su internet tutorial, implementazioni e aiuto. Niente.GLSL | Shader cartellone, mantenere il ridimensionamento

L'unica cosa che posso trovare sono le implementazioni di shader cartacei che impostano la matrice 3x3 in alto a sinistra di un mat4 in identità. Questo butta via la rotazione, ma efficacemente anche il ridimensionamento.

C'è un modo per fare cartelloni pubblicitari che non rimuovano il ridimensionamento (non uniforme)?

Nota: Non sto cercando nessuno che faccia la mia programmazione per me. È solo che non riesco a comprendere le specifiche. Qualsiasi suggerimento nella giusta direzione è benvenuto.

risposta

11

La matrice 3x3 in alto a sinistra contiene la rotazione ma anche la scala. Come hai visto, nuota le due armi nucleari superiori 3x3. Dovrai preservare la scala estraendo prima la scala dal 3x3. Ogni colonna del 3x3, presa come un vettore, ti dice la scala in ogni direzione prendendo la grandezza di ogni vettore di colonna.

Se la matrice 4x4 è

RSX RSY RSZ T 
0  0  0  1 

Poi i fattori di scala sono

xScale = ||RSX|| 
yScale = ||RSY|| 
zScale = ||RSZ|| 

salvare quelle, poi formare una nuova matrice 4x4 a fare quello che stai facendo già, ma anche incorporando la scala .

xScale 0  0  xT 
0  yScale 0  yT 
0  0  zScale zT 
0  0  0  1 
+0

Funziona come un fascino! Perso il passo di recuperare i fattori di scala. –