Как перезапустить Orbit Controls после установки цели

Я установил новую цель для своего THREE.OrbitControls по событию щелчка мыши, и он отлично работает. Но после того, как камера переместится в новое место, я теряю всякое взаимодействие с мышью. Я обновляю этот вопрос рабочим кодом.

Я думаю, что сломал элементы управления, когда установил для камеры z и цели z одно и то же значение.

Сломанный код находится здесь: http://www.kreativperspektiv.com/pb2/chartlock.html

Рабочий код находится здесь: http://www.kreativperspektiv.com/pb2/chartcorrect.html

panCam (500,200,4000,1000);

        var xTarget=0;
        var yTarget=0;
        var zTarget=0;
        var tweenDuration=0;

        function panCam(xTarget,yTarget,zTarget,tweenDuration){

          TWEEN.removeAll();

          var camNewPosition= { x : xTarget, y : yTarget, z : zTarget};
          var targetNewPos = {x : xTarget, y : yTarget, z : 0};

          var camTween = new TWEEN.Tween(camera.position).to(camNewPosition, tweenDuration).easing(TWEEN.Easing.Quadratic.InOut).start();
          var targetTween = new TWEEN.Tween(controls.target).to(targetNewPos, tweenDuration).easing(TWEEN.Easing.Quadratic.InOut).start();
    }

person Migpics    schedule 16.07.2016    source источник
comment
Код, пожалуйста? Вы всегда должны включать в свой вопрос весь соответствующий код. Подробнее об этом читайте в рекомендациях по StackOverflow. Итак, вам нужно показать в своем коде, как вы устанавливаете цель?   -  person Wilt    schedule 16.07.2016
comment
Обновлено с помощью кода. Мои извенения. Я просто искал общие рекомендации о том, как работает сброс.   -  person Migpics    schedule 16.07.2016


Ответы (1)


Вы не можете обновить цель следующим образом:

controls.target = newTarget;

Это сломает ваши элементы управления.
Вместо этого нужно установить цель с помощью метода установки или метода копирования:

controls.target.copy( newTarget );
controls.target.set( x, y, z ) // where x, y and z are the new values

UDPATE

Если вы хотите использовать TWEEN, просто попробуйте вот так:

new TWEEN.Tween(camera.position).to(newPosition, tweenDuration);
new TWEEN.Tween(controls.target).to(newTarget, tweenDuration);
person Wilt    schedule 16.07.2016
comment
Понятно. Я обновил функцию, кажется, она отвечает правильно. Он немного прыгает при нажатии, но я думаю, что могу это исправить. Обновится с рабочим кодом. - person Migpics; 16.07.2016
comment
Это работает, чтобы не нарушать элементы управления, но я думаю, что есть проблема с моим подростком, поскольку орбита прыгает до того, как камера переместится. См. Обновленный код и ссылку. - person Migpics; 16.07.2016
comment
Стоит мне задать еще один вопрос или просто продолжать обновлять этот? - person Migpics; 16.07.2016
comment
@Migpics На самом деле это можно было бы считать другим вопросом, но я добавил обновление к своему ответу. Попробуйте так, если не получится, предлагаю вам задать новый вопрос ... - person Wilt; 16.07.2016
comment
Привет, @Wilt. Я узнал, что нарушает контроль. Я установил целевое значение z элемента управления равным значению z положения камеры. См. Ссылки выше по обновленному вопросу. - person Migpics; 16.07.2016