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

如何在ThreeJS层级中添加GLTF模型?Forge Viewer开发加载扩展报错处理

报错原因

Forge Viewer 内置的 Three.js 是定制版本,和你外部引入的最新版 Three.js 构造的类实例不兼容,overlays.addMesh 仅支持识别 Viewer 内置 Three 生成的对象;且该方法仅支持传入单个 Mesh 实例,你直接传入整个 gltf.scene 复合对象也会触发异常。

解决方案

优先使用 Viewer 内置的 Three 实例加载模型,同时遍历模型内所有 Mesh 节点逐个添加到 overlay 场景,修正后的代码如下:

// 从Viewer实例获取内置的THREE对象,不要使用外部引入的版本
const THREE = this.viewer.impl.THREE;
const gltfLoader = new THREE.GLTFLoader();
const overlayName = "gltf";

// 提前初始化overlay场景
if (!this.viewer.overlays.hasScene(overlayName)) {
  this.viewer.overlays.addScene(overlayName);
}

gltfLoader.load(
  "https://threejsfundamentals.org/threejs/resources/models/cartoon_lowpoly_small_city_free_pack/scene.gltf",
  (gltf) => {
    // 遍历所有Mesh节点逐个添加
    gltf.scene.traverse(node => {
      if (node.isMesh) {
        this.viewer.overlays.addMesh(node, overlayName);
      }
    });
    // 触发Viewer重渲染
    this.viewer.impl.invalidate(true);
  }
);

注意事项

  • 确保存放gltf资源的服务器配置了正确的CORS跨域头,避免加载失败。
  • 如果你必须使用新版Three.js的特性,需要将外部加载得到的geometry、material手动转换为Viewer内置Three的对应实例后再添加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:06:03