Autodesk forge 为特定元素设置透明
我希望为特定元素设置透明,我遵循以下代码:Autodesk forge 为特定元素设置透明,autodesk-forge,autodesk-viewer,Autodesk Forge,Autodesk Viewer,我希望为特定元素设置透明,我遵循以下代码: var instanceTree = this.viewer.model.getInstanceTree(); var fragList = this.viewer.model.getFragmentList(); this.listElement.forEach(element => { instanceTree.enumNodeFragments(element, (f
var instanceTree = this.viewer.model.getInstanceTree();
var fragList = this.viewer.model.getFragmentList();
this.listElement.forEach(element => {
instanceTree.enumNodeFragments(element, (fragId) => {
console.log(element.material)
var material = fragList.getMaterial(fragId)
if (material) {
material.opacity = value;
material.transparent = true;
material.needsUpdate = true;
}
});
});
this.viewer.impl.invalidate(true, true, true);
但它覆盖了所有元素都有这种材料。如何设置所选元素?
感谢您的评论
更新1:
我发现绕道是克隆主要材料,而不是用不同的名称注册:
var newMaterial = material.clone();
const materials = this.viewer.impl.matman();
materials.addMaterial('mymaterial',newMaterial,true);
fragList.setMaterial(fragId,newMaterial);
newMaterial.opacity = value;
newMaterial.transparent = true;
newMaterial.needsUpdate = true;
但效果不是我想要的,它有不同的颜色,当设置为透明时,我只能看到它后面的一对物体
您可以创建自己的自定义THREE.js材质,并使用
fragList.setMaterial(fragId,material)
将其分配给片段
有关使用自定义材质或着色器的详细信息,请参见
编辑:
关于视觉异常(例如,当您只看到半透明物体后面的一些物体时),这是一个已知的问题,不幸的是没有明确的解决方案。当Forge Model Derivative服务创建要在Forge Viewer中查看的SVF文件时,各个场景元素存储在为快速遍历而优化的数据结构中,具体取决于它们是半透明的还是完全不透明的。这个数据结构是固定的,所以不幸的是,当你将一个原本完全不透明的对象变成半透明时,它很可能会以错误的顺序呈现…谢谢你的信息,我将更新我的问题,我有两个问题。我更新了上面的帖子。