das*_*ang 2 javascript trackball tween three.js
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()
}
Run Code Online (Sandbox Code Playgroud)
我使用这种方法将相机移动到特定位置,并在开始时正确移动相机。然后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)
Run Code Online (Sandbox Code Playgroud)
相机的位置是不可变的,因此您不能直接对其进行补间。
但是,您可以使用 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 );
Run Code Online (Sandbox Code Playgroud)
一定要调用TWEEN.update()你的动画循环。
三.js r.86