在 Forge 查看器中更改元素的 属性 和不透明度
Changing the property and opacity of elements in Forge viewer
我知道,有关于这个主题的例子,但我无法得出任何结果。我试图用这个改变 material 属性:
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 } ));
当我检查控制台上的 material 属性时,这些都在改变不透明度。但是,查看器上没有任何变化,组件看起来也一样。
Material所选元素类型为MeshPhongMaterial,查看器为最新版本。
有人知道吗?
在 Forge Viewer 中修改 material 对象后看不到任何变化通常是由网格合并引起的 - 一种性能优化,将多个几何图形合并为一个以减少 GPU 绘制调用的数量。尝试使用 viewer.model.unconsolidate();
“取消合并”您的模型,看看是否有帮助。
就 不透明度 的自定义 material 而言,请注意,这可能会产生意想不到的结果。加载模型时,Forge Viewer 会根据它们的 material 是完全不透明还是 semi-transparent 预先计算一个特殊的数据结构,以高效遍历和渲染其所有元素。稍后更改 material 不会更新数据结构,例如,将具有 semi-transparent material 的对象与不透明对象一起渲染会导致视觉伪影。
我知道,有关于这个主题的例子,但我无法得出任何结果。我试图用这个改变 material 属性:
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 } ));
当我检查控制台上的 material 属性时,这些都在改变不透明度。但是,查看器上没有任何变化,组件看起来也一样。
Material所选元素类型为MeshPhongMaterial,查看器为最新版本。
有人知道吗?
在 Forge Viewer 中修改 material 对象后看不到任何变化通常是由网格合并引起的 - 一种性能优化,将多个几何图形合并为一个以减少 GPU 绘制调用的数量。尝试使用 viewer.model.unconsolidate();
“取消合并”您的模型,看看是否有帮助。
就 不透明度 的自定义 material 而言,请注意,这可能会产生意想不到的结果。加载模型时,Forge Viewer 会根据它们的 material 是完全不透明还是 semi-transparent 预先计算一个特殊的数据结构,以高效遍历和渲染其所有元素。稍后更改 material 不会更新数据结构,例如,将具有 semi-transparent material 的对象与不透明对象一起渲染会导致视觉伪影。