Как установить независимый материал для конкретного dbId - PullRequest
0 голосов
/ 20 мая 2019

Я настраиваю материал для элемента с определенным идентификатором dbId со следующим кодом.

getFragIdListFromGuid - это функция, которую я реализовал для получения fragIdList из определенного dbId. Но я обнаружил, что это действительно меняет весь фрагмент материала в сцене. Они делятся материалом вместе?

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 голосов
/ 21 мая 2019

Существует вероятность того, что материал распределяется между различными фрагментами.Чтобы обойти клонирование исходного материала перед обработкой и применить клон:

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

...