2012-03-20 6 views
1

OpenGL에서 투명 GUI를 만드는 중이며 일부 반투명 쿼드 위에 렌더링 된 텍스트를 얻으려고하지만 결과가 이상합니다. 나는 뒤에 아무것도 그 자체로 텍스트를 렌더링하는 경우OpenGL : 이상한 투명도 블렌딩 결과

는 그것을 잘 보이는 :

Text without transparent background

을 그러나, 나는 텍스트를 렌더링하기 전에 쿼드 렌더링 (뒤에 반투명 쿼드를 렌더링하는 경우),이 얻을 :

Text with transparent background

내가 (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)에 혼합 세트가 있습니다. 글꼴 텍스처는 알파 채널에있는 문자 모양을 가진 하얀색 텍스처입니다.

투명도의 기존 레이어 위에 알파 투명도를 수행 할 때 특별한 작업을 수행해야합니까? 아니면 확인해야 할 것이 있습니까?

+2

각 문자 주위에 알파가 0입니까? –

+0

@ 니콜 볼라스의 제안. 예를 들어 원본 이미지가 괜찮지 만 이미지 로더가 문제를 일으킬 수 있습니다. –

답변

0

글꼴 텍스처의 알파 값이 꺼져있는 것 같습니다. 눈에 보이지 않게하고 싶은 텍셀은 0이고, 보이는 텍셀은 1 (또는 255 바이트)이어야한다. 텍스처를 확인하고 알파 값이 올바른지 확인해야합니다.

알파 블렌딩 대신 알파 테스트를 사용할 수 있습니다. 이렇게하면 단편을 완전히 없애고 특정 임계 값보다 낮은 알파 값을 가지며 종종 블렌딩보다 훨씬 빠릅니다.

glDisbale(GL_BLEND);  
glEnable(GL_ALPHA_TEST); 
glAlphaFunc(GL_GREATER, 0.96f); // Or some fitting threshold for your texture 

이 텍스쳐의 알파 어떤 장소에서 꺼져 있지만처럼 보이지 않는 것은 'S'와 't'로, 여기 경우 경우에도 작동 할 수 있습니다 장소에서 낮은 알파를 갖고있는 것 같다 1이어야합니다.

0

감사합니다. 제 폰트 텍스처에 아무런 문제가 없었지만 당신의 제안으로 몇 가지 다른 것들을 시도하게되었습니다. 문제는 투명성이 아니라는 것을 알았습니다. 배경 쿼드를 렌더링하는 데 문제가있어서 텍스트 쿼드도 렌더링되지만 배경 텍스처는 사용되었습니다. Bah ...