用途:在 Three.js 中实现鼠标拾取、悬停检测、对象选择与视线(line-of-sight)检测。
主要能力:提供 Raycaster 构造函数(origin、direction、near、far),支持 ray、near、far、camera、layers、params 等属性;支持 set()、setFromCamera()、intersectObject()、intersectObjects() 等方法,返回按距离排序的 Intersection 数组,包含 distance、point、face、faceIndex、object、uv、normal、instanceId 等字段。支持 InstancedMesh 拾取与 Layers 过滤。
使用方式:鼠标拾取时先将 DOM 坐标转为 NDC(-1 到 +1),再调用 raycaster.setFromCamera(mouse, camera);对 Sprite 检测必须设置 raycaster.camera;方向向量必须归一化。非全屏画布使用 getBoundingClientRect() 计算 NDC。InstancedMesh 可通过 instanceId 获取实例矩阵与颜色。
性能与限制:不要在每次 mousemove 事件中直接射线检测,应节流到 requestAnimationFrame 或限制每秒 30-60 次;维护扁平可选对象数组并传 recursive: false;复用 results 数组(optionalTarget)避免频繁分配;使用 layers 过滤非交互对象;合理设置 near/far;使用前先判断 intersects.length > 0;instanceId 使用前需检查是否为 undefined。
适用场景:3D 场景中的交互选择、悬停高亮、实例化网格拾取、遮挡与视线判断等。
官方资料:https://threejs.org/docs/#api/en/core/Raycaster 与 https://threejs.org/docs/#api/en/core/Layers。其他收费、平台或效果信息暂未提供。