2017-08-29 117 views
0

我试图应用来自shaderLib的着色器,但其中大多数都会将节点完全变为白色或黑色。只有normal着色器似乎工作。如何将Three.js着色器应用于节点

这是我如何应用它:

const shader = THREE.ShaderLib.depth; 
const uniforms = shader.uniforms; 
const material = new THREE.ShaderMaterial({ 
    fragmentShader: shader.fragmentShader, 
    vertexShader: shader.vertexShader, 
    uniforms 
}) 

this._viewer.impl.matman().addMaterial(
    data.name, material, true) 

,并设置片段与材料:

function setMaterial(fragIds, material) { 

    const fragList = this._viewer.model.getFragmentList() 

    this.toArray(fragIds).forEach((fragId) => { 

     fragList.setMaterial(fragId, material) 
    }) 

    this._viewer.impl.invalidate(true) 
    } 

就像在这个例子中:https://forge.autodesk.com/blog/forge-viewer-custom-shaders-part-1

我也尝试添加颜色到像这样的制服,但它没有帮助。

任何想法,他们为什么不工作?

回答

0

正如我在评论中所说的,Forge Viewer使用的是私有的three.js,其'WebGLRender也没有实现所有的功能,如three.js。因此,它可能不支持three.js中的所有功能。

为了确定发生了什么事情,您可以考虑提供一个可重现的案例,证明我很乐意将它传递给我们的开发团队。那些以下项目应该在可重复的情况下:

  1. 简短的确切描述你想要达到的目标。你观察到的行为与你期望的行为,以及为什么这是一个问题。
  2. 一个完整又最少的样品源模型来运行测试。
  3. 一个完整又最小Forge app可以运行,并用简单的程序调试,分析其行为,住在样本模型。
  4. 一个完整但最小的​​3210可以运行并演示你想要的着色效果。 注意。 Forge Viewer正在使用r71 three.js
  5. 重现问题的详细逐步说明,例如挑哪一个元素,推出什么命令等

如果你的重现性情况下不能在这里公开张贴,请发送到[email protected]remove sensitive data or information before you send

========旧响应

你能否提供进一步的调试更详细的,好吗?

它似乎在我身边正常工作。这是我的测试代码。它在Forge RCDB上进行了测试(https://forge-rcdb.autodesk.io/database?id=57efaf0377c8eb0a560ef467)。

var shader = THREE.ShaderLib.depth; 
var uniforms = shader.uniforms; 
var material = new THREE.ShaderMaterial({ 
    fragmentShader: shader.fragmentShader, 
    vertexShader: shader.vertexShader, 
    uniforms 
}) 

NOP_VIEWER.impl.matman().addMaterial('ShaderLabDepth', material, true); 

var sel = NOP_VIEWER.getSelection(); 

var fragList = NOP_VIEWER.model.getFragmentList(); 
var it = NOP_VIEWER.model.getData().instanceTree; 
it.enumNodeFragments(sel[0], function(fragId) { 
    fragList.setMaterial(fragId, material) 
}); 

NOP_VIEWER.impl.invalidate(true); 

它的结果是这样的。它是你想要的吗? enter image description here

+0

这是完全白色的,我希望它保持以前的颜色,这甚至有可能吗? – shinzou

+0

对不起,这是我的联盟。我不知道'THREE.ShaderLib.depth'做了什么。 Forge Viewer使用私有的'three.js',所以它可能不支持'three.js'中的所有东西。 –

+0

您是否知道Autodesk中的人员知道如何在查看器中使用着色器或为查看器实现着色器? – shinzou