在 Autodesk Forge Viewer 中添加 ThreeJs 模型

Add ThreeJs model in Autodesk Forge Viewer

我在通过 objectloader 加载 threejs 模型时遇到问题,我添加了最新的 ThreeJs 库版本以获得更多功能,例如创建文本,使用 objectloader...这是我的代码:

    loadThreeJs() {
        const loader = new THREEE.ObjectLoader();

        loader.load('./assets/MVP-TW-CCTV TOWER.json', (obj) => {
            console.log(obj)
            var object3DInside = obj.children[0].children[0];
            console.log(object3DInside)
            setTimeout(() => {this.addScene(object3DInside)},1000)
        }, (xhr) => {
            console.log((xhr.loaded / xhr.total * 100) + '% loaded');
        });
    }
    addScene(obj:any)
    {
        this.viewer.impl.createOverlayScene('load-scene');
        this.viewer.impl.addOverlay('load-scene', obj );
        this.viewer.impl.invalidate(true);
    }

哪三个是我从外部加载的 threejs 库。 obj 是场景所以我得到 object3D 的 children 但它总是 return object not an instance of THREE.Object3D. 我记录结果和类型是 object3D,它应该是正确的但它不是?

看来你用的是three.js的另一个版本,全局引用,不是Forge Viewer自己交付的,会和Forge Viewer的一个冲突。正如 Petr 在这里提到的 (upgrade three js version in autodesk forge viewer),Forge Viewer 使用自我维护的 three.js r71 删除了大部分内置 three.js 功能。

如果您想使用 Forge Viewer 的 three.js 库中缺少的功能,我建议您使用一些现代开发工具,例如捆绑器(Webpack 是最流行的一种)。您可以利用 ES6 模块并仅将严格需要的依赖项导入您的应用程序。 threejs-full-es6 包允许您将 Three.js 功能独立导入您的应用程序,因此在这种情况下,我们可以导入 THREEE.ObjectLoader, 并且所有其他必需的依赖项将由包实现处理。

在此处查看 Forge 社区博客:https://forge.autodesk.com/blog/how-add-newest-threejs-features-forge-viewer