4

シーンの半分が表示され、シーンの半分が透明になる単純なシェーダーを作成しようとしています。透明度が機能しない理由がわかりません。

  uniform sampler2D tDiffuse;
  varying vec2 vUv;

  void main(){
        vec2 p = vUv;
        vec4 color;      

        if(p.x < 0.5){ 
              color = (1.0, 0.0, 0.0, 0.0);
        }else{
              color = texture2D(tDiffuse, p);
        }

        gl_FragColor = color;
  }

シェーダーは間違いなくエラーなしで実行されています。画面の右半分は私の threejs シーンで、画面の左半分は赤です (実際には透明である必要があります)。おそらく glBlendFunc(GL_SRC_ALPHA); を呼び出す必要があることを読みました。-しかし、これを試してみるとエラーが発生します。これを行うために、 renderer.context.blendFuncSeparate(GL_SRC_ALPHA); を実行しました。メインのjsファイル(シェーダーではありません)。これを機能させるには、これを別の場所に配置する必要がありますか?

どんな助けでも大歓迎です。参考までに、ほとんどの threejs シェーダーの例が使用する標準の EffectsComposer、shaderPass などでシェーダーを適用しています。

よろしくお願いします!!!

4

2 に答える 2

5

部分的な情報とコード スニペットだけであなたを助けることは難しいので、知識に基づいた推測しかできません。

デフォルトでは、フォーマットEffectComposer付きのレンダー ターゲットを使用しRGBます。指定しましたかRGBA

material.transparent = true を指定しましたか?

three.js r.56

于 2013-03-08T05:22:49.953 に答える