Domanda

Sto realizzando una scena 3d molto semplice, con 5 punti nelle coordinate mondiali. Mi piacerebbe navigare attraverso la scena, quindi sto definendo una fotocamera con un vettore sia SU che OUT. Con queste informazioni ho generato una matrice di rotazione in ogni frame, che applicherò ai vettori per ottenere le coordinate della telecamera.

La domanda è: ho letto del blocco gimbal come un problema usando questo metodo, ma succederebbe in questo caso?

Nota che sto generando la matrice di rotazione in ogni frame e non sto ruotando cumulativamente. Quindi potrebbe verificarsi un blocco in questa situazione? In tal caso, cosa suggeriresti di applicare una rotazione in sicurezza (dai vettori UP e OUT)?

Grazie

È stato utile?

Soluzione

Se per OUT intendi "avanti", e questo è sempre perpendicolare al vettore SU, allora NO, non incontrerai il blocco del gimbal.

Quello che stai facendo è creare una matrice di orientamento dai vettori UP e FORWARD e applicarlo a ciascun frame, che è un metodo abbastanza comune per spostare una telecamera nello spazio. Non si applicano rotazioni multiple utilizzando gli angoli di eulero, che possono essere una causa del blocco del gimbal.

Nota per creare la matrice dovrai anche creare una "sinistra" (o destra) vettore dai vettori SU e AVANTI. Una buona introduzione a ciò è qui - nota che quell'esempio applica quindi le rotazioni alla matrice della fotocamera, che è un passaggio del tutto facoltativo.

Wikipedia ha una buona spiegazione di gimbal lock .

Altri suggerimenti

Incontrerai un problema di blocco gimbal quando usi l'approccio a matrice per generare matrici di rotazione (per X, Y, Z) e poi moltiplicandole per ottenere la matrice di rotazione finale. Se ho capito che lo farai, utilizzerai il vettore OUT per ottenere gli angoli (alfa, beta, gamma), quindi stai calcolando le matrici, infine - li moltiplichi per ottenere la matrice di roation finale - quindi sì, incontrerai il blocco gimbal.

Un modo per sbarazzarsi di questo problema è utilizzare Quaternions per i calcoli.

Inoltre, qui ho trovato alcuni tutorial OpenGL su come implementare quelli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top