2013-07-08 8 views
5

w lewo lub w prawo w sposób przewidywalny.Aparat fotograficzny Three.js przechyla się w górę lub w dół i zachowuje poziom horyzontalny

camera.rotate.x spogląda w górę lub w dół, gdy kamera.rotate.y ma 180 stopni.

ale po zmianie wartości camera.rotate.y na jakąś nową wartość, a następnie zmieniam wartość camera.rotate.x, horyzont się obraca.

Szukałem algorytmu, który dostosowałby rotację horyzontu po zmianie camera.rotate.x, ale go nie znalazłem.

Odpowiedz

10

W t3.js orientację obiektu można określić za pomocą jego wektora obrotu Eulera object.rotation. Trzy elementy wektora obrotu reprezentują obrót w radianach wokół wewnętrznej osi X, osi Y i osi Z obiektu.

Kolejność wykonywania obrotów określona jest przez object.rotation.order. Domyślna kolejność to "XYZ" - najpierw następuje obrót wokół osi X, potem oś Y, potem oś Z.

Obrót odbywa się w odniesieniu do wewnętrznego układu współrzędnych obiektu - a nie układu współrzędnych świata. To jest ważne. Tak więc, na przykład, po wystąpieniu rotacji x, osie y i z-obiektu nie będą na ogół współliniowane z osiami światowymi. Rotacje określone w ten sposób nie są unikalne.

Tak więc, na przykład, jeśli w kodzie określić,

camera.rotation.y = y_radians; // Y first 
camera.rotation.x = x_radians; // X second 
camera.rotation.z = 0; 

obroty są stosowane obiektu rotation.order, a nie w kolejności ich określony.

W twoim przypadku możesz bardziej intuicyjnie ustawić rotation.order na "YXZ", co jest równoważne "nagłówkowi, skokowi i przechyleniu".

Aby uzyskać więcej informacji o kątach Eulera, patrz: Wikipedia article. Three.js stosuje się do konwencji Tait-Bryan, jak wyjaśniono w artykule.

three.js r.61

+0

Twój komentarz działał. Przy inicjalizacji obiektu kamery dodałem następujący wiersz kodu, 'camera.eulerOrder =" YXZ ";' –

+1

Teraz jest to 'camera.rotation.order = 'YXZ';' – WestLangley

+0

Nie masz na myśli "odchylenia, wysokości i rolka" ? :) – fuzz

Powiązane problemy