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

如何从GLTFLoader加载的模型中创建Three.js Mesh?

解决GLTFLoader加载模型后创建Mesh的错误问题

你遇到的错误:

Cannot convert undefined to object

出错的核心原因是GLTFLoader的load回调参数不是分开的geometry和materials——它只接收一个完整的GLTF对象。你写的(geometry, materials)这两个参数实际都是undefined,创建THREE.Mesh时自然会抛出上述错误。

下面是两种正确的处理方式:

方式1:直接使用模型自带的网格(推荐)

GLTF模型加载后,gltf.scene是包含模型所有层级对象的场景容器,你可以直接将它添加到主场景,也能遍历子对象定位到单个Mesh:

const loader = new GLTFLoader();
loader.load("path/to/model", gltf => {
  // 直接添加整个模型到主场景
  scene.add(gltf.scene);
  // 调整整个模型的位置
  gltf.scene.position.z = -10;

  // 或者遍历子对象,对单个Mesh做操作
  gltf.scene.traverse(child => {
    if (child.isMesh) {
      child.position.z = -10;
      // 还可以修改材质、缩放等属性
    }
  });
});

方式2:提取几何体和材质创建新Mesh

如果你确实需要基于原模型的几何体和材质创建全新的Mesh,得先从GLTF模型的子对象中提取对应的属性:

const loader = new GLTFLoader();
loader.load("path/to/model", gltf => {
  // 遍历模型找到第一个Mesh对象(根据你的模型结构调整,比如找特定名称的Mesh)
  let sourceMesh = null;
  gltf.scene.traverse(child => {
    if (child.isMesh) {
      sourceMesh = child;
      return; // 找到目标后停止遍历
    }
  });

  if (sourceMesh) {
    // 提取几何体和材质,注意材质可能是数组类型
    const newMesh = new THREE.Mesh(sourceMesh.geometry, sourceMesh.material);
    newMesh.position.z = -10;
    scene.add(newMesh);
  } else {
    console.error("加载的模型中未找到Mesh对象");
  }
});

内容的提问来源于stack exchange,提问作者Alin-Alexandru Peter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:56:06