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

私がコメントで言ったように、フォージViewerは個人所有three.jsを使用している、そしてそのWebGLRenderはどちらか、three.jsとしてすべての機能を実装していませんでした。したがって、three.jsのすべての機能をサポートしていない可能性があります。

このケースで何が起こったのかを特定するには、再現可能なケースを提供することを検討してください。私はデベロッパーチームに喜んで渡します。以下の項目は再現可能なケースにする必要があります。

  1. 達成しようとしているものの正確な説明。観察している行動と期待する行動、そしてなぜこれが問題であるか。サンプルモデルでは、その動作寿命を分析するための簡単な手順で実行してデバッグすることができるForge app最小限まだ
  2. でテストを実行するための完全なまだ最小限のサンプルソースモデルは。
  3. 完全な。
  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

ビューアでシェーダを操作する方法や、ビューアのシェーダを実装する方法をオートデスクの誰が知っていますか? – shinzou

関連する問題