2016-10-16 5 views
0
나는 기본적으로 이것이 알파 블렌딩 (SRC_ALPHA, ONE_MINUS_SRC_ALPHA), 사용하려는

:의 Cg 쉐이더 알파 블렌딩

frag_out.aaaa * frag.out + ((1.0, 1.0, 1.0, 1.0) - frag_out.aaaa) * pixel_color 

의 화면에 이미 픽셀의 색상이 (1.0, 1.0, 1.0, 1.0)라고하자가 나는 현재 렌더링하고 색상은 (1.0, 1.0, 1.0, 0.4)

입니다 렌더링 할 때 화면의 결과 색상은 알파 0.76입니다 (이전에는 완전히 불투명했지만)

실제로 :

(0.4, 0.4, 0.4, 0.4) * (1.0, 1.0, 1.0, 0.4) + (0.6, 0.6, 0.6, 0.6) * (1.0, 1.0, 1.0, 1.0) = (1.0, 1.0, 1.0, 0.76) 

그래서 기본적으로 화면의 색상이 불투명 (흰색)이었고 화면 위에 투명 스프라이트를 놓은 후 화면이 투명 해져 (0.76 알파) 배경을 볼 수있었습니다. 다음과 같이 혼합하면 완벽 할 것입니다.

(0.4, 0.4, 0.4, 1.0) * (1.0, 1.0, 1.0, 0.4) + (0.6, 0.6, 0.6, 0.6) * (1.0, 1.0, 1.0, 1.0) = (1.0, 1.0, 1.0, 1.0) 

달성 할 수 있습니까? 그렇다면 어떻게? 혼합 기능 이후의 OpenGL 3.0 이상을 사용하여 RGB과 사건에 대한 A.이이 대상에 대한 혼합 비율을 지정하는 마지막 매개 변수

glBlendFuncSeparate(GL_SOURCE_ALPHA, GL_ONE_MINUS_SOURCE_ALPHA, GL_ONE, GL_ONE); 

것 개별적으로이 설정 될 때

답변

3

이 완벽하게 가능하다 대상 알파 <에 대한 동작을 지정하지 않았으므로 알파를 적용해야 할 수도 있습니다. 자세한 내용은 function documentation을 참조하십시오.

+0

고마워요! CG 쉐이딩 언어로 이러한 유형의 블렌딩을 지정하는 방법을 알고 있습니까? – Terko

+0

죄송 합니다만, CG는 사용하지 마십시오. – BDL