Как использовать TWEEN для анимации положения камеры
function moveCameraTo(position, duration) {
var tween = new TWEEN.Tween( camera.position )
.to( position, duration )
.easing(TWEEN.Easing.Linear.None)
.onUpdate(function () {
camera.position = new THREE.Vector3().copy(position)
camera.lookAt({x:0,y:0,z:0})
})
.onComplete(function () {
camera.lookAt({x:0,y:0,z:0})
})
.start()
}
Я использую этот метод, чтобы переместить камеру в определенную позицию, и она правильно перемещает камеру в начале. Тогда TrackballControls не работает, и в консоли возникает ошибка.
TrackballControls.js:318 Uncaught TypeError: _this.object.position.addVectors is not a function
at THREE.TrackballControls.update (TrackballControls.js:318)
at animate ((index):456)
1 ответ
Положение камеры является неизменным, поэтому вы не можете настроить его напрямую.
Однако вы можете использовать Tween для анимации положения камеры с помощью шаблона, подобного приведенному ниже. Рекомендуется отключить элементы управления камерой, если вы используете один из них, а затем снова включить его по завершении.
function tweenCamera( targetPosition, duration ) {
controls.enabled = false;
var position = new THREE.Vector3().copy( camera.position );
var tween = new TWEEN.Tween( position )
.to( targetPosition, duration )
.easing( TWEEN.Easing.Back.InOut )
.onUpdate( function () {
camera.position.copy( position );
camera.lookAt( controls.target );
} )
.onComplete( function () {
camera.position.copy( targetPosition );
camera.lookAt( controls.target );
controls.enabled = true;
} )
.start();
}
var targetPosition = new THREE.Vector3( 10, 10, 10 );
var duration = 5000;
tweenCamera( targetPosition, duration );
Обязательно позвони TWEEN.update()
в вашем цикле анимации.
three.js r.86