2014-01-12 5 views
1

를 혼합 나는는 OpenGL ES 2.0

glEnable(GL_BLEND); 
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 

에 glBlendFunc을 설정하고 테스트를 위해 나는 객체가 완전히 투명하지 않겠이

gl_FragColor = vec4(1.0,0.0,0.0,0.0); 

처럼 내 조각 쉐이더의 색상을 설정? 그렇지 않은 이유는 무엇일까요?

답변

2

glBlendFunc()의 첫 번째 인수는 원본 요소이며 두 번째 인수는 대상 요소입니다. 귀하의 경우 :

sfactor = 1.0; 
dfactor = 1.0 - src.alpha; 

gl_FragColor에서 src.alpha = 0.0을, 인 :

sfactor = 1.0; 
dfactor = 1.0; 

그래서 버퍼에 넣어 색이 될 것입니다 :

buffer = sfactor * src + dfactor * dst; 

대입 ...

buffer = (1.0,0.0,0.0,0.0) + dst; 

그래서 간단하게, 기존 버퍼의 빨간 채널에 1을 더합니다. 당신은 출력이 완전히 투명하게하려면

는 일반적인 기능은 다음과 같습니다 당신이 쓴

glBlendFunc(GL_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

하나는 일반적으로 소스에 미리 곱한 알파에 사용됩니다. 하지만 (1, 0, 0, 0)은 분명히 미리 곱셈 된 알파 값이 아닙니다!

+0

매우 도움이되는 설명, 감사합니다! – cboe