我正在尝试应用shaderLib中的着色器,但大多数都会将节点变为白色或黑色。只有normal
着色器似乎有效。
这是我应用它的方式:
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 :(得分:0)
正如我在评论中所说,Forge Viewer使用的是私人拥有的three.js
,其WebGLRender
并未实现three.js
所有功能。因此,它可能不支持three.js
中的所有函数。
为了确定此案件发生的情况,您可以考虑提供一个可重复的案例,证明这一点,我很乐意将其传递给我们的开发团队。以下项目应在可重现的案例中:
Forge app
,可以使用一个简单的程序运行和调试,以分析其行为在样本模型中。three.js app
。 注意。 Forge Viewer正在使用r71 three.js
。 如果您的可复制案例无法公开发布,请将其发送至forge.help@autodesk.com
和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 );