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

如何用Three.js为3D物体/网格添加超链接?点击盒子跳转失效求助

解决Three.js立方体点击跳转链接的问题

你的代码核心问题是缺少射线检测的关键逻辑,intersects变量根本没定义,点击时自然无法识别点击到了哪个物体。按下面的步骤修改就能实现功能:

  • 先定义射线投射器和鼠标坐标变量,用来检测点击与3D物体的交互
  • 在点击事件里把屏幕鼠标坐标转换成Three.js需要的标准化坐标
  • 执行射线检测,获取相交的物体列表后再判断跳转

修改后的完整代码:

// 新增:定义射线投射器和鼠标向量
const raycaster = new THREE.Raycaster();
const mouse = new THREE.Vector2();

const coolTexture = new THREE.TextureLoader().load('cool.jpg');
const cool = new THREE.Mesh(
  new THREE.BoxGeometry(3, 3, 3),
  new THREE.MeshBasicMaterial({
    color: Math.random() * 0xffffff
  })
);

cool.userData = {
  URL: "http://stackoverflow.com"
};
scene.add(cool);

// 修改点击事件函数,添加射线检测逻辑
function linki(event) {
  // 把鼠标坐标转换成Three.js的标准化设备坐标
  mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
  mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;

  // 更新射线投射器的射线
  raycaster.setFromCamera(mouse, camera);

  // 检测射线与场景中物体的相交情况
  const intersects = raycaster.intersectObjects(scene.children);

  if (intersects.length > 0) {
    // 确保目标物体有URL才跳转
    if (intersects[0].object.userData.URL) {
      window.open(intersects[0].object.userData.URL);
    }
  }
}

document.body.onclick = linki

注意:代码里的camera是你场景中已经定义好的相机实例,要确保它已经正确初始化并添加到场景中,否则射线检测会失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:30:56