2014-06-19 14 views
4

알파로 구를 그리려하고 있지만 Z 버퍼에 문제가 있습니다. 일부 픽셀은 투명하지만 Zbuffer에 쓰기 때문에 바로 뒤에있는 픽셀 불투명도가 숨겨집니다.OpenGl 알파 테스트 - 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)이 할 수있는 기능을 알고 있지만 나는 그것이 OpenGL을 3.1 버전 이후 사용되지 않는 기능이 있다는 읽기 : 여기

내 설정입니다. 어떻게 ALPHAFunc를 사용하지 않고 올바른 렌더링을 할 수 있습니까? 누군가가 트릭이나 셰이더를 통해이를 수행하는 방법을 알고 있습니까?

+2

현대 GL에서 그 조각 쉐이더에서, 예를 들어, 'if (result.a> threshold) 버리기; – 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; 
}