2012-11-16 8 views
1

서브 픽셀 렌더링을 사용하는 OpenGL을 기반으로하는 UI 시스템의 빠른 텍스트 렌더링을 만들고 있습니다. 검정 배경 위에 흰색 텍스트가 "정상적인"블렌딩에서는 잘 작동하지만 흰색 서브 픽셀 렌더링의 색상 줄무늬에 0이 곱해지기 때문에 (배경이 아님), 서브 픽셀 앨리어싱이 손실됩니다.OpenGL 블렌딩 (혼합하기 전에 텍스처 색상 반전)

이것이 올바른 방법이 아니라는 것을 알고 있습니다. (각 R, G 및 B 서브 픽셀 채널을 별도로 혼합해야하기 때문에) 매우 빠르고 모든 상황이 좋아 보입니다. 이, 내가 혼합 "전에"텍스처의 컬러를 반전해야합니까하기 위해

예를 들어, 수행됩니다

정상 혼합은 다음과 같습니다 SourceColor * SourceAlpha + DestColor * (1 - SourceAlpha)

난이 원하는 : ((1,1,1) - SourceColor) * SourceAlpha + DestColor * (1 - SourceAlpha)

을 셰이더없이 이것을 할 수있는 방법이 있습니까 ?? 나는 열쇠가 다른 블렌딩 세팅으로 두번의 패스를하는 것이라고 생각하지만 그냥 작동시키지 못한다고 생각한다.

두 개의 텍스쳐를 가질 수 있다는 것을 알았지 만, 보통의 것과 하나의 거꾸로하지만 나는 비디오를 낭비하고 싶지 않다. 메모리 (각 글꼴은 이미 큰 텍스쳐를 필요로하기 때문에)

+0

"* 서브 픽셀 렌더링의 색상 줄무늬에 0이 곱해지고 그 서브 픽셀 앨리어싱이 손실됩니다. *"그건 의미가 없습니다. 색상을 알파에 미리 곱 해 놓지 않는 이상 그렇게 할 수 없습니다. 프린지 알파가 0이면 알파는 0이 아니어야합니다. 그래서 배경색 (즉, 흰색과 혼합되는 색상)을 취해야합니다. 그리고 알파에 미리 색상을 곱한 경우 (즉, 강도 텍스처를 사용하는 경우), 블렌드 단계에서 소스 색상에 소스 알파 *를 다시 곱하지 않아야합니다. –

+0

글꼴은 RGBA 비트 맵에서 서브 픽셀 렌더링 (비트 맵 글꼴)을 사용하여 미리 렌더링됩니다. 렌더링 된 텍스트의 색상을 설정하고자 할 때 문제가 발생합니다. 흰색으로 원하면, (1,1, 1) 만약 내가 그것을 원한다면, 나는 검정으로 원한다면, 나는 (0,0,0)을 곱하면, (1,0,0)으로 곱하면된다.하지만 내가 할 때, 유일하게 남은 정보는 비트 맵은 알파 채널입니다. 그림없이 설명하기는 어렵지만 기본 아이디어는 괜찮습니다. – rafael

+0

이 상황에서 "서브 픽셀 렌더링"이란 무엇을 의미합니까? [이런 종류의] (http://en.wikipedia.org/wiki/Subpixel_rendering#Addressability_vs._resolution)에 대해 이야기하고 있습니까? –

답변

0

글꼴 텍스쳐에 알파 채널을 부여한 다음, 텍스쳐의 모든 픽셀의 색상을 유지하면서 글꼴의 모양을 지정하는 데 사용합니다. (알파 = 0이되어 rgba = 1110). 그런 다음 glColor3f(r,g,b)은 질감을 적절하게 (심지어 검정색으로) 채색하고 glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);을 사용하면 제대로 혼합됩니다.