2012-11-17 15 views

risposta

4

Il motivo per cui vi sono entrambi, è perché la moltiplicazione della matrice deve essere eseguita in un certo ordine per ottenere il risultato corretto (come forse già sapete).

La sequenza di traslazioni/rotazioni/scale viene eseguita in in ordine inverso durante la digitazione.

Quindi, se si fa qualcosa di simile:

Camera.rotate(15, 0, 0); 
Camera.scale(.5f, .5f, .5f); 
Camera.translate(70, 70, 70); 

Stai prima traducendo 70,70,70 poi ridimensionamento del 50% in tutte le direzioni, quindi la rotazione di 15 gradi attorno all'asse X.

Quindi Matrix ha un pre e post translate (beh, pre e post tutto), perché forse si vuole effettivamente ruotarlo prima di 15 gradi e poi tradurlo, e infine ridimensionarlo.

In modo che risponda al pre e post traduce. Ora il motivo per cui Camera ha una rotazione diritta e la traduzione è per le persone che sanno come funziona già (come me!), Quindi non uso mai Matrix o Camera per quella materia, perché posso semplicemente fare le mie rotazioni e traduzioni direttamente sulla tela. Puoi anche fintanto che sai che le traduzioni, le scale e le rotazioni sono fatte in ordine inverso.

Inoltre, se sai cosa ti ho detto, ti dà più potere. È possibile eseguire una sequenza di 10 matrici senza circondarle in più oggetti Matrix per ciascuna di esse (ad esempio, si desidera eseguire un movimento oscillatorio che oscilla verso l'esterno E ruota attorno al centro per simulare la forza centrifuga). Ciò dovrebbe essere fatto con più rotazioni e traslazioni (circondate da più oggetti Matrix passati l'uno nell'altro), ma se sai come funziona ogni traduzione, puoi semplicemente fare una serie di .translate(), .rotate(), e .scale().

Questa informazione è particolarmente utile in caso di grafica 3D, perché è in questo caso che queste matrici danno mal di testa alle persone.

Spero che questo aiuti!

+1

Mi guidi a una documentazione che hai trovato questo fatto? – hasanghaforian

+0

puoi per favore fornire un link che supporti la tua risposta? –

+0

Oh mio. È passato molto tempo da quando ho scritto questo, e suona arrogante a dir poco. La documentazione può essere trovata su wikipedia, in particolare: http://en.wikipedia.org/wiki/Transformation_matrix#Composing_and_inverting_transformations "Si noti che la moltiplicazione viene eseguita nell'ordine opposto dalla frase inglese: la matrice di" A seguita da B "è BA, non AB." –

1

Il risultato sarebbe visivamente lo stesso se cioè non si tocca la tela, ma ruotare la telecamera 90 degs o tenere fotocamera ma ruotare la tela si guarda da -90 degs.

+1

Conosci qualche buon documento o tutorial in 3D su 'Android.Canvas'? Sembra' Magico' e 'surd'. – hasanghaforian