2012-04-14 11 views
2

このような小さなシェーダがあり、きれいな効果があります。GLSLのブレンディングモードは、追加の透明度を作成します。

uniform float beatScale; 
varying vec3 vPos; 

void main() { 

    vec3 normPos = (normalize(vPos) + vec3(1, 1, 1))/vec3(2, 2, 2); 
    float alpha; 

    if (normPos.y < beatScale - 0.1) { 
    alpha = 0.0; 
    } else if (normPos.y < beatScale) { 
    alpha = 1.0 - (beatScale - normPos.y)/0.1; 
    } else { 
    alpha = 1.0; 
    } 

    gl_FragColor = vec4(normPos, alpha);  
} 

しかし、前に私のオブジェクトの透明部分は、レンダリングされているはずのピクセルをノックアウト、背後にあるオブジェクトをブロックします。

gl_FragColor = gl_FragColor + vec4(normPos, alpha); 

しかし、それはそれを変更していないようでした:

マイ申し訳ありませんの試みでした。私はgl_FragColorが前のピクセルの色を持っていたが、ダイスはなかったと思っていた。

計算された色を以前にあった色に追加するにはどうすればよいですか?私は上に何があるのか​​気にしない、これは私が単に一緒に追加することができるすべての光沢のあるものです。

答えて

1

添加剤ブレンドを行っている場合は、深度書き込みをオフにする必要があります。

+0

three.jsをどうやって作るのですか? –

+0

myWebGLRenderer.getContext()からcontexを取得し、theContext.disable(theContext.DEPTH_TEST)を実行します。 – MikaelEmtinger

+1

(r71) 'material.depthTest'を' false'に設定するだけです。レンダラーは設定を尊重します。 –

関連する問題