In questo progetto didattico sviluppato per il corso di Geometria Computazionale, vengono mostrati due modi per ruotare un oggetto in 3D: utilizzando gli angoli di Eulero e utilizzando i quaternioni. Nella visualizzazione con gli angoli di Eulero, si mostra come avviene il gimbal lock e questo aiuta a comprendere perché utilizzare una rappresentazione con i quaternioni.

Per il momento non è completo, perché vanno aggiunti dei pulsanti per mostrare in automatico le situazioni critiche in cui avviene il gimbal lock. Tuttavia è comunque possibile mostrarlo manualmente settando le rotazioni nel modo “giusto”. Inoltre va spiegato in modo migliore come funzionano i comandi.

Ruoli#

Il progetto è stato realizzato interamente da me; mi sono occupato di ideare e sviluppare tutto quanto, escluso il modello dell’aereo (guarda sotto).

  • L’idea è stata proposta da me, per approfondire l’utilizzo dei quaternioni per le rotazioni in 3D
  • Ho creato i modelli 3D per i 3 gimbals
  • Ho implementato l’interfaccia grafica
  • Ho scritto il codice sorgente

Software#

Questo gioco è stato sviluppato utilizzando Godot 4 e GDScript. I modelli 3D dei 3 gimbals sono stati fatti con Blender.

Codice Sorgente#

Il codice sorgente è disponibile pubblicamente qui e verrà aggiornato fino a conclusione dell’esame di Geometria Computazionale.

Comandi#

Una volta avviata l’applicazione, sarà possibile muoversi all’interno dell’ambiente 3D premendo SHIFT. Dopo, per muoversi in avanti o indietro si possono utilizzare i tasti W e S, per muoversi a destra o a sinistra si possono utilizzare i tasti A eD. Infine, per muoversi in su o in giù, si possono utilizzare i tasti Q ed E.

Per smettere di muoversi, è possibile ripremere il tasto SHIFT.

Da qui, è possibile selezionare se ruotare l’oggetto con gli angoli di Eulero oppure con i quaternioni.

Se si decide di ruotare con i quaternioni, bisognerà premere un punto sullo schermo; poi verrà creata la retta che passa dal punto selezionato e l’aereo. In seguito potrà essere selezionato un angolo di cui ruotare l’aereo tramite uno slider (si può notare che cambiando l’angolo, cambia anche il quaternione che viene utilizzato). Premendo infine il tasto Rotate, l’aereo verrà ruotato dell’angolo selezionato intorno alla retta descritta prima.

Se si decide invece di ruotare utilizzando gli angoli di Eulero, basterà cambiare i valori dei 3 slider, e le rotazioni aggiorneranno in tempo reale la rotazione rispetto al relativo asse.

Le rotazioni sono fatte seguendo un certo ordine, selezionandolo dal menu a tendina inizialmente settato a XYZ: in questo caso, prima si ruota intorno all’asse X, poi intorno all’asse Y, poi intorno all’asse Z.

Il gimbal lock può essere simulato andando ad allineare due assi di rotazione: in generale questo può avvenire ruotando di -90°/+90° il secondo asse di rotazione nell’ordine descritto prima (in questo caso, l’asse Y). In questa situazione si potrà notare che ruotando intorno agli altri due assi, si è perso un grado di libertà: senza prima modificare la rotazione intorno all’asse Y, ruotare intorno all’asse X, e all’asse Z, dà risultati uguali.

Utilizzando i quaternioni, questo problema non può accadere, perché si utilizza un unico asse di rotazione che può essere cambiato quando si vuole, e non ci sono due assi che possono quindi allinearsi tra di loro.

Demo#

Per il momento, la build per windows è scaricabile da qui. Nelle prossime versioni verrà rimpiazzata dalla versione WebGL.

Credits#

This work is based on Low Poly Plane by scailman licensed under CC-BY-4.0.

Altri progetti#