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)
答案 0 :(得分:2)
相机的位置是不可变的,所以你不能直接补间它。
但是,您可以使用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