2012-04-14 70 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做到這一點? – 2012-04-14 23:54:48

+0

您可以從myWebGLRenderer.getContext()獲得這個情景並且執行ContextContext.disable(theContext.DEPTH_TEST) – MikaelEmtinger 2012-04-15 17:40:41

+1

(r71)您可以將'material.depthTest'設置爲'false'。渲染器將​​會遵守設置。 – 2015-07-23 01:47:16