Я звоню, когда я нажимаю на сцену.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);
но теперь я получаю пересечение в соседнем месте, не в точном местоположении объекта.