我在场景中创建了一些对象,并设置了光线投射/补间代码,这样每当我点击一个对象时,该对象就会直接动画到相机的位置和旋转 .
这是我的光线投射/补间对象的代码:
function onDocumentMouseDown( event ) {
event.preventDefault();
mouse.x = ( event.clientX / renderer.domElement.clientWidth ) * 2 - 1;
mouse.y = - ( event.clientY / renderer.domElement.clientHeight ) * 2 + 1;
raycaster.setFromCamera( mouse, camera );
var intersects = raycaster.intersectObjects( scene.children );
if ( intersects.length > 0 ) {
new TWEEN.Tween( intersects[ 0 ].object.position ).to( {
x: 0,
y: 0,
z: -100 }, 2000 )
.easing( TWEEN.Easing.Elastic.Out).start();
new TWEEN.Tween( intersects[ 0 ].object.rotation ).to( {
x: 0,
y: 0,
z: 0 }, 2000 )
.easing( TWEEN.Easing.Elastic.Out).start();
object.lookAt.camera;
}
}
但是,我想知道,我怎么能让补间动画相机到对象,而不是相机的对象?我想这样做是因为我希望物体不断旋转并在场景中移动,并且希望相机能够保持并跟踪单个物体 .
顺便说一下,这都是透视相机 .
2 回答
我们假设您正在使用OrbitControls.js来控制您的相机 .
您需要做的是将控件目标
controls.target = new THREE.Vector3(0, 0, -100);
设置为对象的中心(或补间) . 您将对象旋转设置为(0,0,0),所以假设您要从顶部查看对象,将摄像机位置设置为(0,10,-100) - 与目标相同,只是偏移在你想要看的方向形式 .假设你的对象旋转不是(0,0,0),你需要计算它的前向向量(或你想要从中查看它的任何其他向量),并将摄像机位置放在沿该向量轴的某个位置 .
我正在尝试做类似的事情,这是我到目前为止,但努力获得对象面向方向向量
}
你需要添加controls = new THREE.TrackballControls(camera);