2009-08-20 10 views
6

Sto avendo qualche serio problema a capire la matrice di visualizzazione in XNA. Sono arrivato molto lontano con tutte le altre parti e da quando mi sono appena imparato la matematica richiesta non voglio usare le funzioni di Matrix integrate senza capire cosa fanno prima.XNA View Matrix - Cerco spiegazione

Ora capisco le basi della rotazione, della proiezione e della traduzione, ma non posso per la vita di me capire come funziona la matrice della vista in XNA.

Da quello che ho raccolto, la matrice di visualizzazione dovrebbe trasformare il "mondo" nel proprio spazio. Sembra ragionevole, ma il metodo Matrix.CreateLookAt nella libreria è piuttosto sconcertante.

ho stabilito (attraverso l'esame quali le uscite della funzione libreria) che questi due pezzi di resa codice stessi risultati:

Matrix view = Matrix.CreateReflection(new Plane(Vector3.UnitX, 0)) * Matrix.CreateReflection(new Plane(Vector3.UnitZ, 0)) * Matrix.CreateTranslation(Position); 
// ..equals this if (Position = (0 0 -5), since LookAt "looks at" but the above just looks straight down Z).. 
Matrix blah = Matrix.CreateLookAt(Position, Vector3.Zero, Vector3.UnitY); 

Perché ruotare gli assi X e Z? Ho pensato che dovresti ruotare il mondo secondo la rotazione delle telecamere, ma nella direzione opposta, e quindi tradurre il mondo della stessa quantità nella direzione opposta.

Oppure la matrice di viste non è utilizzata come una trasformazione, ma codifica solo la posizione e la rotazione della telecamera nel mondo?

risposta

5

La matrice di visualizzazione sta trasformando la scena in uno spazio di visualizzazione. Nello spazio di visualizzazione la telecamera virtuale è all'origine e guarda nella direzione z positiva. Esistono diversi modi per ottenere ciò, ma più comunemente la matrice di visualizzazione consiste in una traslazione e tre rotazioni attorno a ciascun asse.

Transform = Tradurre * * rotationZ rotationY * rotationX

+0

Grazie, sembra che la mia idea originale fosse corretta. Ma avevo tutti questi diversi sistemi di coordinate un po 'confusi. – Skurmedel

1

composizione di due riflessioni produce una rotazione, se ricordo correttamente la mia geometria.

+0

Interessante. Le riflessioni sopra menzionate dovrebbero quindi corrispondere a una rotazione di 180 gradi attorno a Y. – Skurmedel

21

Esistono tre tipi di trasformazioni che è necessario comprendere: mondo, vista e proiezione.

Il mondo trasforma le coordinate dei tuoi modelli dallo spazio modello allo spazio mondiale. Quando definisci i vertici di un modello, li definisci in relazione all'origine di quel modello. Il mondo trasforma trasforma quei vertici in modo che siano relativi a un'origine condivisa da tutti gli oggetti nella scena, cioè lo spazio del mondo.

La vista trasforma quindi trasforma questi vertici in uno spazio di visualizzazione. Il visore/telecamera ha una posizione e un orientamento nello spazio di visualizzazione, e questo è usato per creare la matrice di visualizzazione che si applica a tutti gli oggetti nella scena. Nello spazio di visualizzazione, il visore/telecamera è all'origine, quindi la matrice di visualizzazione traduce e ruota tutti gli oggetti per posizionarli nello spazio di visualizzazione.

Infine, la trasformazione di proiezione determina il tipo di "obiettivo" utilizzato dalla fotocamera. Finora abbiamo solo tradotto e ruotato oggetti, non c'è alcun senso di scala o prospettiva. La trasformata di proiezione crea un trofeo visivo e trasforma i vertici in questa finestra.

Ora per la tua domanda. Rifletti il ​​sistema di coordinate sull'asse x, poi sull'asse z e infine lo traduci. Questo accade per ottenere lo stesso risultato della matrice lookat perché la posizione si trova sul piano xz- e yz, ma si noti cosa succede se si sposta la posizione di un'unità sull'asse y. Quindi le due matrici non saranno uguali

+1

Grazie per la tua risposta. Ho scelto la risposta con il rango più basso. Entrambi avete aiutato. – Skurmedel

+2

Nessun problema. Sono contento che l'abbia capito :) – Tchami

4

Il seguente link mi ha aiutato molto a capire e utilizzare in modo più efficace le matrici.Si potrebbe trovare interessante:

http://stevehazen.wordpress.com/2010/02/15/matrix-basics-how-to-step-away-from-storing-an-orientation-as-3-angles/

che sto facendo relativamente la stessa cosa di te in questo momento :)

+0

Grazie, sembra abbastanza completo. – Skurmedel

+0

se stai facendo qualcos'altro in 3D basato su XNA e vuoi essere pompato con link di informazione, basta chiedere. Ho fatto molte ricerche prima di iniziare e ho compilato una buona lista di informazioni per le cose più avanzate. – Remm

+0

Hiya, Remm, sto facendo roba XNA basata su 3D e mi piacerebbe essere pompato con i collegamenti alle informazioni! Hai qualche suggerimento per me? –