/ / Manipolazione di matrici 3D 4x4 - c #, oggetto, matrice, 3d

Manipolazione della matrice 3D 4x4 - c #, oggetto, matrice, 3d

Attualmente sto lavorando a un progetto di gioco con C #e sto lavorando per spostare una telecamera nello spazio 3D. Ho una matrice mondiale 4x4. Capisco che questa matrice gestisca la traduzione e la rotazione dell'oggetto nello spazio. Al momento so che la terza fila gestisce la posizione dell'oggetto, quindi sono in grado di spostare la fotocamera lungo il piano xyz. Tuttavia, desidero eseguire la rotazione della fotocamera lungo l'asse locale e l'asse globale. riferito a Questo post ho un'idea di come ruotare la fotocamera. Vorrei tuttavia avere una comprensione più chiara della matrice e di ciò che le varie righe e colonne rappresentano per quanto riguarda la traduzione e la rotazione. Voglio anche sapere se la matrice 4x4 contiene informazioni riguardanti sia la posizione locale che quella globale della telecamera. Significato sarò in grado di manipolare la matrice per ruotare la fotocamera su un asse o un punto esterno? Quanto posso fare alla macchina fotografica data questa matrice

risposte:

0 per risposta № 1

Nella grafica 3d la rotazione è rappresentata piuttosto dal quaternion che dalla matrice. C'è un set di funzioni per far funzionare i quaternioni.

Puoi eseguire la rotazione lungo qualsiasi asse vuoi con quaternioni. Si può facilmente combinare e anche (che è quasi mai possibile alle matrici) interpolare quaternioni.

I quaternioni possono essere convertiti in una matrice, cioèil modo in cui qualsiasi matrice di rotazione può essere prodotta. Se si desidera applicare la rotazione all'oggetto o combinare la rotazione con un'altra trasformazione come la traslazione o il ridimensionamento, è necessario convertire prima il quaternio in una matrice.

DirectX SDK è un'ottima fonte di informazioni su matrici e quaternioni, indipendentemente dall'API effettivamente utilizzata: la matematica è uniforme su tutte le API 3d.

Sulla tua domanda sul significato di riga / colonna matrix: la matrice può rappresentare una trasformazione piuttosto complessa, incluso il ridimensionamento o la rotazione su un punto diverso dal centro della geometria dell'oggetto. Quindi non dovresti pensare alla matrice in questo modo, dovresti invece immaginare una matrice complessa come una moltiplicazione di semplici matrici.


0 per risposta № 2

In risposta alla domanda reale (1), la matematica 3D è molto più complessa di quanto si pensi.

Ignorando i quaternioni per ora, una matrice può essere pensata in termini di: -

Rx Ry Rz 0
Ux Uy Uz 0
Ax Ay Az 0
Px Py Pz 1

o potrebbe essere la trasposizione di quanto sopra, essodipende da come si imposta il sistema, ma alla fine fa davvero poca differenza e dipende molto dal tuo hardware. R è l'asse destro, U è l'asse Up, A è l'asse At e P è la posizione. Il suffisso x, yez se il componente di ciascun vettore. Questo è abbastanza facile da visualizzare: pensa a un insieme di vettori di unità ortognali per i primi tre per definire la rotazione e l'ultimo è dove la matrice è nel mondo e che è la matrice sopra.

Una volta che hai capito bene quanto sopra, muoverlo dovrebbe essere abbastanza facile da vedere, ma ruotarlo è molto più complesso, guardare qualcosa è facile:

 A = |target pos - camera pos| (pos is bottom row here)

e quindi R e U sono prodotti incrociati di A e un asse globale che punta nella direzione corretta.

Le matrici possono essere ruotate attorno a un asse arbitario (gli assi locali e globali che hai citato cadono in questo) ma la matematica è molto complessa (troppo complessa per questa risposta).

Questo sito va più nel dettaglio: Wikipedia Ci sono alcune operazioni di matrice standard elencate qui. Puoi anche controllare il sito di Wolfram per una discussione più approfondita e ci sono certamente buone risorse online se si guarda.

Le matrici possono essere moltiplicate insieme, il risultatoè effettivamente la combinazione delle azioni che ogni matrice fa da sola. Quindi potresti avere una matrice come movimento generale (con unità, vettori allineati asse per le parti di direzione) e un'altra matrice potrebbe essere una matrice di rotazione a (0,0,0). Il prodotto di questi due sarebbe quindi una matrice di movimento e rotazione. Questo è il modo in cui funzionano le gerarchie degli oggetti e il posizionamento degli oggetti nel mondo. Inoltre, è usato anche nell'animazione.

L'API che stai usando dovrebbe fornire un'API per ruotare le matrici sull'asse arbitario, ma è utile avere un'idea di cosa sta succedendo.

Una volta che hai capito tutto, puoi guardare i quaternioni, ma ricorda che non c'è nulla che tu possa fare con un quaternario che non puoi fare usando le matrici.

(1) Per quanto posso dire