Javascript 当我更新相机时,Raycaster不会停留在中间

Javascript 当我更新相机时,Raycaster不会停留在中间,javascript,three.js,Javascript,Three.js,伙计们,我在光线投射方面遇到了问题,到目前为止我还没有找到解决办法 我想强调的是,我希望Raycaster始终保持在中心位置,比如当我移动相机并朝其他方向看时,我希望Raycaster保持在中心位置并更新,请帮助我 我使用的是FirstPersonControl,这是我使用光线投射的代码 ''' var raycaster=new THREE.raycaster(); var arrow=new THREE.ArrowHelper(raycaster.ray.direction,raycaste

伙计们,我在光线投射方面遇到了问题,到目前为止我还没有找到解决办法

我想强调的是,我希望Raycaster始终保持在中心位置,比如当我移动相机并朝其他方向看时,我希望Raycaster保持在中心位置并更新,请帮助我

我使用的是FirstPersonControl,这是我使用光线投射的代码 '''

var raycaster=new THREE.raycaster();
var arrow=new THREE.ArrowHelper(raycaster.ray.direction,raycaster.ray.origin,100,Math.random()*0xffffff);
场景。添加(箭头);
var相交;
函数sec(){
请求动画帧(秒);
var directionVector=new THREE.Vector3();
var positionVector=new THREE.Vector3();
var b=camera.getWorldDirection(方向向量);
var c=摄像机.getWorldPosition(位置向量);
raycaster.setFromCamera(b,camera);
箭头.位置.复制(摄像机.位置);
arrow.setDirection(raycaster.ray.direction);
intersects=光线投射器。intersectObjects(scene.children);
如果(相交长度>0){
相交[0]。对象。材质。颜色。集(0xff0000);
}

else if(intersects.length你应该看看文档。它说第一个参数是一个向量2,鼠标坐标在
[-1,1]
范围内。因为你想要屏幕的中心,所以在X轴上设为0,在Y轴上设为0:

//将mousePosition设置为(0,0)将使其成为屏幕的中心
var mousePos=新的三个向量2(0,0);
raycaster.setFromCamera(鼠标座,摄像头);
相交=光线投射器。相交对象(场景。子对象);
如果(相交长度>0){
console.log(与[0]相交);
}

你应该看看这些文档。上面说第一个参数是一个矢量2,鼠标坐标在
[-1,1]
范围内。因为你想要屏幕的中心,所以在X轴上设为0,在Y轴上设为0:

//将mousePosition设置为(0,0)将使其成为屏幕的中心
var mousePos=新的三个向量2(0,0);
raycaster.setFromCamera(鼠标座,摄像头);
相交=光线投射器。相交对象(场景。子对象);
如果(相交长度>0){
console.log(与[0]相交);
}

谢谢!我找到了解决方案,但也非常感谢。谢谢!我找到了解决方案,但也非常感谢。
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 && casted){
        for(var i=0; i<arr.length; i++){
             arr[i].material.color.set( 0x8f8f8f );
        }
    }
    camera.updateProjectionMatrix();
    camera.updateMatrixWorld(); 
}