mhe*_*ers 8 javascript 3d canvas webgl three.js
所以我正在尝试使用补间基于场景中点击的对象来补间摄像机的fov,这很好用,但现在我想让它做的是让摄像机将焦点切换到对象上被点击,这是行不通的.这是我的点击代码:
function onDocumentMouseDown( event ) {
event.preventDefault();
var vector = new THREE.Vector3( ( event.clientX / window.innerWidth ) * 2 - 1, - ( event.clientY / window.innerHeight ) * 2 + 1, 0.5 );
var ray = new THREE.Ray( camera.position, vector.subSelf( camera.position ).normalize() );
var intersects = ray.intersectObjects( objects );
if ( intersects.length > 0 ) { //We've clicked a certain object
camTarget = intersects[0].object.position; //HERE'S THE VECTOR3 I WANT TO LOOK AT
camTween.start();
}
}
Run Code Online (Sandbox Code Playgroud)
和我的补间/相机运动代码:
var camUpdate = function(){
camera.fov = currentFov.fov; //WORKING
camera.lookAt(camTarget); //NOT WORKING
camera.updateProjectionMatrix();
}
var currentFov = { fov: camera.fov };
TWEEN.removeAll();
camTween = new TWEEN.Tween(currentFov).to({fov: +zoomInFov},tweenTime).easing(camEase).onUpdate(camUpdate);
Run Code Online (Sandbox Code Playgroud)
摄像机正在适当地补间视野,但它似乎始终指向与其始终指向的方向相同的方向,而不是切换到lookAt命令中指定的"camTarget"向量.
小智 13
渲染器调用THREE.Camera.update(),它默认设置摄像机的旋转以查看THREE.Camera.target(这是一个THREE.Object3D).而不是......
camera.lookAt( camTarget );
Run Code Online (Sandbox Code Playgroud)
...尝试...
camera.target.position.copy( camTarget );
Run Code Online (Sandbox Code Playgroud)
我不确定我是如何跟踪camTarget的补丁,或者它应该只是切换到新对象?
旁注:建议不要在事件处理程序中执行繁重的计算 - 在最好的世界中,您在事件处理程序中设置一个标志并在渲染循环中处理.
| 归档时间: |
|
| 查看次数: |
23909 次 |
| 最近记录: |