2017-08-29 72 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