2016-09-08 21 views
0

我打电话给我,只要我点击现场。RayCaster停止检测物体时,我打电话camera.lookAt()

function onMouseDown(event) { 
    controls.update(); 
    var position = new THREE.Vector3(); 
    position.setFromMatrixPosition(scene.group.children[0].matrixWorld); 
    position.normalize(); 
    console.log(position); 

    var raycaster = new THREE.Raycaster(); // create once 
    var mouse = new THREE.Vector2(); // create once 

    mouse.x = (event.clientX/renderer.domElement.width) * 2 - 1; 
    mouse.y = - (event.clientY/renderer.domElement.height) * 2 + 1; 
    //console.log(mouse); 

    raycaster.setFromCamera(mouse, camera); 

    console.log(raycaster.ray.direction); 

    var intersects = raycaster.intersectObjects(scene.group.children , false); 
    if (intersects.length > 0) { 
     intersects[ 0 ].object.material.color.set(0xff0000); 
     console.log(intersects); 
    } 
} 

开始时,我有没有施加旋转点击作品,但只要我打电话

scope.target.x = offset * Math.sin((scope.phi + iphi) * Math.PI/180) * Math.cos((scope.theta + itheta) * Math.PI/180); 
scope.target.y = offset * Math.cos((scope.phi + iphi) * Math.PI/180); 
scope.target.z = offset * Math.sin((scope.phi + iphi) * Math.PI/180) * Math.sin((scope.theta + itheta) * Math.PI/180); 

scope.camera.lookAt(scope.target); 

RayCaster不返回任何对象。

我也注意到,即使旋转之后,我的raycaster也会在屏幕的相同位置给出相同的方向矢量。

然后我试图在raycaster手动

var e = new THREE.Euler(((controls.phi-90)/180)*Math.PI, 0, (controls.theta/180)*Math.PI, 'XYZ'); 
raycaster.setFromCamera(mouse, camera); 
raycaster.ray.direction.applyEuler(e); 

应用旋转,但现在我在附近由没有对象的确切位置得到交集。

回答

0

的问题是我没有更新世界坐标基于摄像机旋转呼吁

camera.updateMatrixWorld(); 

相机更新解决了这个问题。