如何为特定的dbId设置独立的材料

时间:2019-05-20 16:49:49

标签: autodesk-forge

我正在使用以下代码为具有特定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
  }
})

1 个答案:

答案 0 :(得分:0)

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

  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);