2014-06-19 42 views
4

我想繪製與alpha的球體,但我有我的Z緩衝區的問題。有些像素是透明的,但在Zbuffer中寫入,所以後面的不透明像素被隱藏起來。OpenGl alpha測試 - 如何取代AlphaFunc棄用?

這裏是我的設置:

gl Enable: gl DEPTH_TEST. 
gl DepthFunc: gl LEQUAL. 
gl Disable: gl CULL_FACE. 
gl Enable: gl BLEND. 
gl BlendFunc: gl SRC_ALPHA with: gl ONE_MINUS_SRC_ALPHA. 

我知道該功能glAlphaFunc(GREATER, aFloat)enable(ALPHA_TEST)能做到這一點,但我讀了它,因爲3.1版本的OpenGL棄用功能。我如何在不使用ALPHAFunc的情況下進行正確的渲染?有人知道一個技巧,或通過着色器做到這一點嗎?

+2

在現代GL你應該做的是,在片段着色器,例如'if(result.a> threshold)discard;'。 – keltar

+0

您的問題與此非常相似:http://stackoverflow.com/questions/23280692/opengl-es2-alpha-test-problems/23283256。我現在不會將它建議爲重複的,因爲它是一個稍微不同的用例。但我在這個問題上的答案仍然適用於你的情況。 –

回答

10

這是很容易在片段着色器來實現:

uniform float alpha_threshold; 

void main() { 
    vec4 color = ...; 

    if(color.a <= alpha_threshold) // Or whichever comparison here 
     discard; 

    gl_FragColor = color; 
}