光线投射用于进行鼠标拾取(在三维空间中计算出鼠标移过了什么物体)。

const raycaster = new THREE.Raycaster();
const pointer = new THREE.Vector2();
 
function onPointerMove( event ) {
 
	// 将鼠标位置归一化为设备坐标。x 和 y 方向的取值范围是 (-1 to +1)
 
	pointer.x = ( event.clientX / window.innerWidth ) * 2 - 1;
	pointer.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
 
}
 
function render() {
 
	// 通过摄像机和鼠标位置更新射线
	raycaster.setFromCamera( pointer, camera );
 
	// 计算物体和射线的焦点
	const intersects = raycaster.intersectObjects( scene.children );
 
	for ( let i = 0; i < intersects.length; i ++ ) {
 
		intersects[ i ].object.material.color.set( 0xff0000 );
 
	}
 
	renderer.render( scene, camera );
 
}
 
window.addEventListener( 'pointermove', onPointerMove );
 
window.requestAnimationFrame(render);