Переключить элементы управления threejs (с TrackBall на FlyControls и наоборот)

Чего я пытаюсь добиться, так это иметь два режима управления: свободный «летающий» и объект -, центрированный (трекбол ), и плавно переключаться между ними нажатием кнопки.

Сначала я пробовал с TrackBallControls и FlyControls. Проблема с этими двумя заключается в том, что TrackballControls основан на углах Эйлера, а FlyControls основан на квартенионах. Я попытался преобразовать вектор camera.rotation в кватернион, выполнив

quaternion.setFromEuler( target ); //where target, a Vector3 that contains degrees

И установка положения вручную (, так как они используют один и тот же объект положения ), и хотя это, казалось, работало, немного поворачивая камеру -и переключая элементы управления, начали давать ужасно неправильные результаты. Кроме того, захват углов Эйлера из кватерниона (setEulerFromQuaternion )привел к неверным данным.

Таким образом, хотя я мог переключаться между ними, я никогда не мог синхронизировать их координаты вращения, поэтому «при переключении», когда положение камеры правильное, вращение неправильное.

PS. У меня были некоторые результаты с углами Эйлера (FirstPersonControls ), но используемый метод широты и долготы экрана очень подвержен ошибкам и полностью терпит неудачу при вращении оси Z.

7
задан mrdoob 3 July 2012 в 11:28
поделиться