Autodesk forge 如何为特定dbId设置独立材质

Autodesk forge 如何为特定dbId设置独立材质,autodesk-forge,Autodesk Forge,我正在使用以下代码为具有特定dbId的元素设置材质 getFragIdListFromGuid是我实现的一个函数,用于从特定dbId检索fragIdList。但我发现这张照片实际上改变了场景中所有的碎片材质。他们一起分享材料吗 const fragIdList = await getFragIdListFromDBId(this.dataComponents, this.instanceTree, dbId) fragIdList.forEach((fragId) => { let m

我正在使用以下代码为具有特定dbId的元素设置材质

getFragIdListFromGuid是我实现的一个函数,用于从特定dbId检索fragIdList。但我发现这张照片实际上改变了场景中所有的碎片材质。他们一起分享材料吗

const fragIdList = await getFragIdListFromDBId(this.dataComponents, this.instanceTree, dbId)
fragIdList.forEach((fragId) => {
  let material = fragList.getMaterial(fragId)
  if (material) {
    material.opacity = opacity
    material.transparent = true
    material.needsUpdate = true
  }
})

有一种可能性,即材料在不同的碎片之间共享。要解决在处理和应用克隆之前克隆原始材料的问题,请执行以下操作:

  let material = fragList.getMaterial(fragId).clone();
  if (material) {
    material.opacity = opacity
    material.transparent = true
    material.needsUpdate = true
  }
        viewer.impl.matman().addMaterial ('myCustomMaterial', material, true);
        viewer.model.getFragmentList().setMaterial(fragId, material);
        viewer.impl.invalidate(true);