Raycaster не остается в центре, когда я обновляю камеру

#javascript #three.js

#javascript #three.js

Вопрос:

ребята, у меня проблема с Raycasting, и я пока не смог найти решение.

Я пытаюсь архивировать то, что я хочу, чтобы Raycaster всегда оставался в центре, например, когда я перемещаю камеру и смотрю в другом направлении, я хочу, чтобы Raycaster оставался в центре и обновлялся, пожалуйста, помогите мне.

Я использую FirstPersonControls, это код, который у меня есть с raycasting «‘

 var raycaster = new THREE.Raycaster();
var arrow = new THREE.ArrowHelper( raycaster.ray.direction, raycaster.ray.origin, 100, Math.random() * 0xffffff );
scene.add( arrow );
var intersects;
function sec(){
 requestAnimationFrame(sec);
    var directionVector = new THREE.Vector3();
        var positionVector = new THREE.Vector3();
    var b = camera.getWorldDirection(directionVector);
    var c = camera.getWorldPosition(positionVector);

    raycaster.setFromCamera( b,camera );
                
    arrow.position.copy(camera.position);
    arrow.setDirection(raycaster.ray.direction);

    intersects = raycaster.intersectObjects( scene.children );
    if(intersects.length>0){
        intersects[0].object.material.color.set( 0xff0000 );
      }
        else if(intersects.length<1 amp;amp; casted){
        for(var i=0; i<arr.length; i  ){
             arr[i].material.color.set( 0x8f8f8f );
        }
    }
    camera.updateProjectionMatrix();
    camera.updateMatrixWorld(); 
}
  

»’

Ответ №1:

Вы должны взглянуть на Raycaster.setFromCamera() документы. Там прямо говорится, что первым аргументом является Vector2 с координатами мыши в [-1, 1] диапазоне. Поскольку вам нужен центр экрана, сделайте его 0 на осях X и 0 на осях Y:

 // Setting mousePosition to (0, 0) makes it the center of your screen 
var mousePos = new THREE.Vector2(0, 0);
raycaster.setFromCamera(mousePos, camera);

intersects = raycaster.intersectObjects(scene.children);
if(intersects.length > 0){
    console.log(intersects[0]);
}
  

Комментарии:

1. Спасибо! я нашел решение, но спасибо и за это.