Qual è l'ordine corretto per moltiplicare le matrici di scala, rotazione e traduzione per una matrice mondiale adeguata?


62

Assumi DirectX come piattaforma, se questo è importante. (Abbastanza sicuro che non lo sia)

Supponendo di avere una scala, una rotazione e una matrice di traduzione adeguate, in che ordine le moltiplico per ottenere una matrice mondiale adeguata e perché?

Per "corretto", intendo "Potrei lanciarli direttamente in DirectX e ottenere il frame 3D più comunemente usato".


6
Ecco una spiegazione di "ruota quindi traduci" (filatura) vs "traduci poi ruota" (orbitando)
bobobobo,

il collegamento è buono, ma con un piccolo errore. dovrebbe avere un effetto rotolante e non ruotare, poiché la sfera tende ad allontanarsi dalla sua posizione (rimanendo sull'asse) traducendo.
Infocloggato il

Risposte:


77

Di solito è scala, quindi rotazione e infine traslazione. Con la denotazione della matrice (cioè T per la matrice di traduzione, R per la matrice di rotazione e S per la matrice di ridimensionamento) sarebbe:

T * R * S

Tuttavia, se si desidera ruotare un oggetto attorno a un determinato punto, si tratta di ridimensionamento, traslazione del punto, rotazione e infine traslazione dell'oggetto.

Perché: per prima cosa vuoi ridimensionare l'oggetto in modo che le traduzioni funzionino correttamente. Quindi si ruotano gli assi in modo che la traslazione avvenga sugli assi regolati. Alla fine traduci l'oggetto nella sua posizione.

In OpenGL puoi usare gluLookAt per ottenere una trasformazione completa della videocamera in una sola chiamata. Probabilmente c'è una chiamata simile per DirectX.


11
E ricorda, se vuoi trasformarti attorno al centro, devi prima tradurre per compensare il centro in modo che si trovi sull'origine, quindi fai come ha affermato user392858, quindi ritradurlo nuovamente dall'origine per lo stesso importo. In genere, tuttavia, questo è necessario solo in 2D, dove hai qualche sprite che ha la parte superiore sinistra nell'origine.
Ingegnere

Grande. :) Ora devo solo capire perché il mio modello si sta ora invertendo in una vista orizzontale e ha bisogno del prodotto punto sulla luce direzionale invertita in una vista verticale. Non lo faceva, poi ho risolto un po 'di matematica ...
Narf the Mouse

Lascia che sia notato, odio i segnali negativi sbagliati. Comunque, grazie, e puoi considerare questa domanda fatta con. :)
Narf the Mouse,

Nessun problema, sempre felice di aiutarti.
Raphael R.,

2
@Matthias Per quanto ne so, dipende da come si moltiplica per il vettore che si desidera trasformare. Se moltiplichi M * v, allora sì, la risposta ha l'ordine inverso.
Bialpio,

-4

la rotazione e il ridimensionamento della traduzione sono la sequenza per eseguire l'operazione


-5

Credo che sia la rotazione e la composizione della traduzione


2
Questo non fornisce ulteriori spiegazioni rispetto alle risposte esistenti.
DMGregory
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.