Forge Viewer 中模型的默认值 material

Default material for model in Forge Viewer

我需要让完整模型使用默认 material(例如灰色),然后为每个节点使用外部定义的 material。

所以我正在寻找关于两点的建议: 1) 在所有节点上设置默认值 material。 2) 在从外部源获取给定节点后,为给定节点设置 material / 颜色。

是否可以在将模型加载到查看器之前的某个时刻完成此操作? (即服务器端)?如果没有,是否可以在查看器中完成?

来自 Forge 的所有几何体总是会为其定义一些 material,但是您可以遍历模型上所有对象的 dbID 并设置自定义 THREE.js material他们沿着这些方向使用了一些东西:

function setCustomMaterial(viewer, dbids) {
    const material = new THREE.MeshPhongMaterial({
        color: 0xAB00EE,
        specular: 0xEEABEE
    });
    viewer.impl.matman().addMaterial('CustomMaterial', material, true);
    const fragList = viewer.model.getFragmentList();
    const instanceTree = viewer.model.getData().instanceTree;
    for (let dbid of dbids) {
        instanceTree.enumNodeFragments(dbid, function(frag) {
            fragList.setMaterial(frag, material);
        });
    }
}