【问题标题】:Forge viewer: How to disable transparancy at MaterialsForge 查看器:如何在材质中禁用透明度
【发布时间】:2019-07-09 14:20:01
【问题描述】:

为了在 Forge 查看器中为许多对象设置颜色,我做了一个扩展,它在材质上设置颜色并将对象连接到它。这样我只更新查看器一次而不是多次。但是我想没有透明度,但我一直得到它,即使我已经将材料透明度设置为假。我该如何解决这个问题?

void setColorMaterial(material, viewer) 
{
    var mesh_material = this.addMaterial(material, viewer)

    for (var i=0; i< material.dbIds.length; i++) {
        var dbid = material.dbIds[i]

        var it = viewer.model.getData().instanceTree
        it.enumNodeFragments(dbid, function (fragId) {
            var renderProxy = viewer.impl.getRenderProxy(viewer.model, fragId)
        renderProxy.meshProxy = new THREE.Mesh(renderProxy.geometry, renderProxy.material)
        renderProxy.meshProxy.matrix.copy(renderProxy.matrixWorld)
        renderProxy.meshProxy.matrixWorldNeedsUpdate = true
        renderProxy.meshProxy.matrixAutoUpdate = false
        renderProxy.meshProxy.frustumCulled = false
        viewer.impl.addOverlay(material.name, renderProxy.meshProxy)
      }, false)
    }
    this.materialHolder.push(material)
    viewer.impl.invalidate(true)
}

void addMaterial(material, viewer) 
{
    var mesh_material = new THREE.MeshPhongMaterial({
        color: #007dfa,
        opacity: 1,
        transparent: false,
        name: 'materialName'
})
    viewer.impl.matman().addMaterial(this.newGuid(), mesh_material)
    viewer.impl.createOverlayScene(material.name, mesh_material, mesh_material)
}

【问题讨论】:

  • 移除不透明度:1
  • 我没有看到您的 addMaterial 正在返回您创建的不透明材质,也没有看到您的 mesh_material 被应用于添加到叠加层的对象?
  • Bryan:我根据您的建议修复了代码(据我了解)。添加了更新的代码。

标签: three.js autodesk-forge


【解决方案1】:

首先,感谢您的回复,不幸的是,透明度仍然存在。

Alex:我移除了不透明度。

Bryan:我根据您的建议修复了代码(据我了解)。下面是更新的代码。

从链接中的图片可以看出,透明度仍然存在。任何其他建议将不胜感激。

setColorMaterial(material, viewer) {
    var mesh_material = this.addMaterial(material, viewer)

    for (var i=0; i< material.dbIds.length; i++) {
        var dbid = material.dbIds[i]

        //from dbid to node, to fragid
        var it = viewer.model.getData().instanceTree
        it.enumNodeFragments(dbid, function (fragId) {
            var renderProxy = viewer.impl.getRenderProxy(viewer.model, fragId)
            renderProxy.meshProxy = new THREE.Mesh(renderProxy.geometry, mesh_material)
            renderProxy.meshProxy.matrix.copy(renderProxy.matrixWorld)
            renderProxy.meshProxy.matrixWorldNeedsUpdate = true
            renderProxy.meshProxy.matrixAutoUpdate = false
            renderProxy.meshProxy.frustumCulled = false
            viewer.impl.addOverlay(material.name, renderProxy.meshProxy)
        }, false)
    }
    viewer.impl.invalidate(true)
}

addMaterial(material, viewer) {
  var mesh_material = new THREE.MeshPhongMaterial({
      color: material.color,
      transparent: false,
      blendEquationAlpha: false,
      name: material.name
  })
  viewer.impl.matman().addMaterial(this.newGuid(), mesh_material)
  viewer.impl.createOverlayScene(material.name, mesh_material)
  return mesh_material
}

Transparency still there image

【讨论】:

  • 尝试将renderProxy.meshProxy = new THREE.Mesh(renderProxy.geometry, mesh_material)更改为THREE.Mesh(renderProxy.geometry, renderProxy.material),因为在创建叠加层时已经传入了覆盖材料。
  • 我发现了错误,错误在 viewer.impl.createOverlayScene(material.name, mesh_material, mesh_material) 中。我现在已经更新了上面示例中的代码,它现在可以工作了。感谢您的帮助。
猜你喜欢
  • 2021-06-12
  • 2015-02-16
  • 2021-02-17
  • 2020-06-28
  • 2018-05-13
  • 2016-03-01
  • 1970-01-01
  • 2017-12-18
  • 2015-03-04
相关资源
最近更新 更多