You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Three.js中Raycast点击无法识别导入FBX模型网格问题求助

问题排查及解决方法

按优先级从高到低调整即可修复问题:

  1. 核心错误:标准化设备坐标Y轴计算错误
    Three.js要求标准化设备坐标(NDC)的Y轴取值范围为「屏幕顶部为1,底部为-1」,而浏览器clientY的取值规则是「屏幕顶部为0,底部为窗口高度」,你当前代码未加负号,计算出的射线方向完全偏离可视区域,因此永远检测不到物体。
    正确的坐标转换代码为:
cursor.y = - (event.clientY / window.innerHeight) * 2 + 1;
  1. FBX网格未预计算包围信息
    射线检测会优先用几何体的包围球做粗过滤,如果导入的FBX几何体没有预生成包围信息,会直接被过滤掉。在遍历网格时补充计算即可:
object.traverse(function(child){
    if(child.isMesh){
        child.geometry.computeBoundingBox();
        child.geometry.computeBoundingSphere();
        meshes.push(child);
    }
})
  1. 法线朝向导致的检测失效
    默认Three.js材质只会检测正面相交,如果你的FBX网格法线是朝内的,就会检测不到,可以手动设置为双面检测:
child.material.side = THREE.DoubleSide;
  1. 可选优化:开启递归检测
    如果FBX网格存在嵌套子层级,调用intersectObjects时可以传入第二个参数true开启递归检测,避免漏掉子网格:
var intersects = raycaster.intersectObjects(meshes, true);

内容的提问来源于stack exchange,提问作者bhnh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:06:01