Per favore, perdonami, ma ho bisogno di aiuto e sono bloccato su questo da alcune settimane, non sto facendo progressi e ovunque vada e vedo una risposta diversa, tutto ciò che provo non funziona. Ho avuto abbastanza suggerimenti e consigli, ora ho davvero solo bisogno di qualcuno che mi dia la risposta per farmi lavorare indietro perché non riesco a capirlo.
Ciò che ha reso questo argomento più confuso è il modo in cui ognuno usa un diverso insieme di convenzioni o regole e le loro risposte si basano sulle proprie convenzioni senza definire ciò che sono.
Quindi, ecco l'insieme di convenzioni che ho formulato sulla base di ciò che sembra essere più comune e logico:
- Regola della mano destra per l'asse.
- Il positivo Y è in alto, il positivo Z è verso lo spettatore, il positivo X è a destra.
- Matrici Major Row, trasposte quando inviate agli shader.
- Passo: rotazione attorno all'asse X.
- Yaw: rotazione attorno all'asse y
- Rotolo: rotazione attorno all'asse z
- Ordine di rotazione: Roll, Pitch, Yaw (è corretto? Qualcuno può controllarmi su questo?)
- I valori di rotazione positivi, guardando verso il basso dall'estremità positiva di un asse, producono una rotazione in senso orario.
- La direzione predefinita per la rotazione 0 su tutti gli assi è un vettore che punta verso il basso su Y negativo.
.. date quelle convenzioni (sicuramente correggimi se sono sbagliate!), come si fa:
- Scrivi una funzione LookAt? (lookAt (posizione vettoriale, eyefocus vettoriale, vector up))
- Calcola una matrice di rotazione. (rotazione (x, y, z))
Ho provato a rispondere a queste due domande da solo almeno nelle ultime 3 settimane, ho riscritto la mia funzione LookAt & Rotation Matrix almeno 30 volte, ho testato dozzine di metodi e letto materiale che ho visto su centinaia di siti Web e leggere molte domande con risposta, copiato il codice di altre persone e nulla di ciò che ho fatto finora ha funzionato, tutto ha prodotto il risultato sbagliato. Alcuni dei quali hanno prodotto output esilaranti e bizzarri nemmeno vicini alla corretta rotazione.
Ci ho lavorato tutte le sere ad eccezione della notte scorsa perché mi sentivo così frustrato dal ripetuto fallimento che mi sono dovuto fermare e fare una pausa.
Per favore, mostrami qual è il metodo corretto in modo che io possa lavorare a ritroso da quello e capire come funziona, non sto solo ottenendo la risposta corretta e questo mi sta facendo impazzire!
Sto scrivendo in Java ma prenderò il codice scritto in qualsiasi lingua, la maggior parte del mio codice di rendering 3D in realtà funziona in modo abbastanza brillante, è solo la matematica che non riesco a capire.
AGGIORNAMENTO: RISOLTO
Grazie per l'aiuto! Ora ho una funzione LookAt funzionante che in realtà capisco e non potrei essere più felice (se qualcuno vorrebbe vederlo sicuramente chiedere).
Ho provato di nuovo a creare una matrice di rotazione basata su variabili pitch / yaw / roll e sembrava di nuovo fallire, ma ho deciso di abbandonare il tentativo di utilizzare gli angoli di eulero per la telecamera freelook in quanto sembra non essere adatto per ruolo, invece ho intenzione di creare una classe quaternione, potrebbe avere più fortuna nel percorrere quella strada, altrimenti ricorrere all'uso del pitch / yaw come coordinate sferiche e farò affidamento sulla nuova funzione LookAt funzionante per la rotazione.
Se qualcun altro si trova ad affrontare un problema simile e vuole farmi domande, sentitevi liberi di farlo.
Almeno non sono più bloccato, grazie per l'aiuto!