【问题标题】:Changing the property and opacity of elements in Forge viewer在 Forge 查看器中更改元素的属性和不透明度
【发布时间】:2021-01-20 09:44:52
【问题描述】:

我知道,有关于此主题的示例,但我无法得出任何结果。我试图用这个来改变材质属性:

  var instanceTree = viewer.model.getInstanceTree();
  var fragList = viewer.model.getFragmentList();
  instanceTree.enumNodeFragments( selectedDBID, (fragId) => {
    var material = fragList.getMaterial(fragId)

     if(material){
       material.opacity = 0.5
       material.transparent = true
       material.needsUpdate = true
     }
  });

  viewer.impl.invalidate(true,true,true)

比我试过这个:

 var customMaterial = new THREE.MeshPhongMaterial
  ({
       opacity:    0.2,
       transparent: true
   });       
   this.viewer.impl.matman().addMaterial('myCustomMaterial', customMaterial, true);
   fragList.setMaterial(fragId, customMaterial);
   viewer.impl.invalidate(true,true,true)

或者这个:

  fragmentList.setMaterial(fragId, new THREE.MeshPhongMaterial( { opacity: 0.5 } ));

当我在控制台上检查材质属性时,这些都会改变不透明度。然而,查看器上没有任何变化,组件看起来也一样。

所选元素的材质类型为MeshPhongMaterial,查看器为最新版本。

有人知道吗?

【问题讨论】:

    标签: autodesk-forge autodesk-viewer


    【解决方案1】:

    在 Forge Viewer 中修改对象的材质后看不到任何变化通常是由网格合并引起的 - 一种将多个几何图形合并为一个以减少 GPU 绘制调用次数的性能优化。尝试使用viewer.model.unconsolidate();“取消整合”您的模型,看看是否有帮助。

    至于自定义材质的不透明度,请注意这可能会产生意想不到的结果。加载模型时,Forge Viewer 预先计算一个特殊的数据结构,以根据其材料是完全不透明还是半透明来有效遍历和渲染其所有元素。稍后更改材质不会更新数据结构,例如,将具有半透明材质的对象与不透明对象一起渲染可能会导致视觉伪影。

    【讨论】:

    • 非常感谢您的快速响应。通过“取消合并”模型,不透明度现在对元素起作用。如果出现意外结果或性能问题,我将进一步研究。
    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 2019-07-09
    • 2015-02-22
    • 2012-01-01
    • 2017-05-06
    • 2016-07-04
    • 2014-03-29
    • 2021-12-23
    相关资源
    最近更新 更多