In three.js, l'orientamento di un oggetto può essere specificato dal relativo vettore di rotazione di Eulero object.rotation
. Le tre componenti del vettore di rotazione rappresentano la rotazione in radianti rispettivamente attorno all'asse x interno dell'oggetto, all'asse ye all'asse z.
L'ordine in cui vengono eseguite le rotazioni è specificato da object.rotation.order
. L'ordine predefinito è "XYZ": la rotazione intorno all'asse x avviene prima, quindi l'asse y, quindi l'asse z.
Le rotazioni vengono eseguite rispetto al sistema di coordinate interno- non al sistema di coordinate del mondo. Questo è importante. Quindi, ad esempio, dopo la rotazione x, gli assi y e z dell'oggetto in genere non saranno più allineati con gli assi del mondo. Le rotazioni specificate in questo modo non sono uniche.
Così, per esempio, se nel codice si specifica,
camera.rotation.y = y_radians; // Y first
camera.rotation.x = x_radians; // X second
camera.rotation.z = 0;
le rotazioni vengono applicate nell'oggetto del rotation.order
, non nell'ordine in cui li specificato.
Nel tuo caso, potresti trovare più intuitivo impostare rotation.order
su "YXZ", che equivale a "titolo, intonazione e rotazione".
Per ulteriori informazioni sugli angoli di Eulero, vedere Wikipedia article. Three.js segue la convenzione di Tait-Bryan, come spiegato nell'articolo.
three.js r.61
Il tuo commento ha funzionato. All'inizializzazione dell'oggetto fotocamera, ho aggiunto la seguente riga di codice, 'camera.eulerOrder =" YXZ ";' –
Ora è 'camera.rotation.order = 'YXZ';' – WestLangley
Non intendi "imbardata, passo e rotolare "? :) – fuzz