Staram się osiągnąć dwa tryby sterowania, wolny "latający" i jeden obiektowo (trackball) i płynnie naciskając przycisk przełącz się między nimi.Przełączaj kontrolki threejs (od TrackBall do FlyControls i na odwrót)
Początkowo próbowałem z TrackBallControls i FlyControls. Problem z tymi dwoma polega na tym, że TrackballControls opiera się na kątach Eulera, a FlyControls opiera się na Quartenions. Próbowałem konwersji wektor camera.rotation do kwaterniony wykonując,
quaternion.setFromEuler(target); //where target, a Vector3 that contains degrees
i ręczne ustawianie pozycji (ponieważ oni używają tego samego obiektu pozycja), a gdy wydawało się działać, obracanie kamery A bit - i przełączanie elementów sterujących zaczęło dawać strasznie złe wyniki. Ponadto, chwytanie kątów Eulera z kwaternionu (setEulerFromQuaternion) spowodowało błędne dane.
Tak więc, chociaż mogłem przełączać się między nimi, nigdy nie byłem w stanie zsynchronizować ich współrzędnych obrotu, więc "na przełączniku", gdy pozycja kamery jest prawidłowa, obrót jest nieprawidłowy.
PS. Miałem pewne wyniki z FirstPersonControls (również pod różnymi kątami), ale ekran lat, długa metoda, której używa, jest bardzo podatny na błędy i kończy się niepowodzeniem, gdy występuje rotacja osi Z.
Aaand, działa! Spędziłem tyle czasu na walce z rotacjami i kwaterami, a rozwiązanie było naprawdę proste, niesamowite! Dzięki, Panie Doob! – Pantelis
Może nie podążałem za pytaniem wystarczająco blisko, ale dlaczego potrzebna jest nowa kamera? Czy nie możemy użyć tej samej kamery, wystarczy zmienić jej widok/pozycję/rotację za pomocą różnych elementów sterujących? –