glBlendFunc 함수

glBlendFunc 함수는 픽셀 산술 연산을 지정합니다.

구문

void WINAPI glBlendFunc(
   GLenum sfactor,
   GLenum dfactor
);

매개 변수

sfactor

빨강, 녹색, 파랑 및 알파 소스 혼합 요소를 계산하는 방법을 지정합니다. GL_ZERO, GL_ONE, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA 및 GL_SRC_ALPHA_SATURATE 9개의 기호 상수가 허용됩니다.

dfactor

빨간색, 녹색, 파랑 및 알파 대상 혼합 요소를 계산하는 방법을 지정합니다. GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA 및 GL_ONE_MINUS_DST_ALPHA 8개의 기호 상수가 허용됩니다.

반환 값

이 함수는 값을 반환하지 않습니다.

오류 코드

glGetError 함수에서 다음 오류 코드를 검색할 수 있습니다.

Name 의미
GL_INVALID_ENUM
인팩터 또는 dfactor는 허용되는 값이 아니었습니다.
GL_INVALID_OPERATION
함수는 glBegin 호출과 glEnd에 대한 해당 호출 사이에 호출되었습니다.

설명

RGB 모드에서는 들어오는(원본) RGBA 값을 프레임 버퍼(대상 값)에 이미 있는 RGBA 값과 혼합하는 함수를 사용하여 픽셀을 그릴 수 있습니다. 기본적으로 혼합은 사용하지 않도록 설정됩니다. glEnableglDisable을 GL_BLEND 인수와 함께 사용하여 혼합을 사용하도록 설정하고 사용하지 않도록 설정합니다.

사용하도록 설정하면 glBlendFunc 는 혼합 작업을 정의합니다. sfactor 매개 변수는 소스 색 구성 요소의 크기를 조정하는 데 사용되는 9가지 메서드 중 어느 것을 지정합니다. dfactor 매개 변수는 대상 색 구성 요소의 크기를 조정하는 데 사용되는 8가지 메서드 중 어느 것을 지정합니다. 11개의 가능한 메서드는 다음 표에 설명되어 있습니다. 각 메서드는 빨강, 녹색, 파랑 및 알파에 대해 각각 하나씩 네 개의 배율 요소를 정의합니다.

테이블 및 후속 수식에서 원본 및 대상 색 구성 요소를 (R? , G? , B? , A? ) 및 (Rd , Gd , Bd , Ad )라고 합니다. 0과 (k R, k G, kR,kA) 사이에 정수 값이 있는 것으로 이해됩니다. 여기서

kR =2mR - 1

kG =2mG - 1

kB =2mB - 1

kA =2mA - 1

및 (mR , mG , mB , mA )는 빨간색, 녹색, 파란색 및 알파 비트플레인의 수입니다.

원본 및 대상 배율 인수를 (R , sG , sB , sA ) 및 (dR , dG , dB , dA )라고 합니다. 표에 설명된 배율 인수(fR , fG , fB , fA )는 원본 또는 대상 요소를 나타냅니다. 모든 배율 계수의 범위는 [0,1]입니다.

매개 변수 (fR , fG , fB , fA )
GL_ZERO (0,0,0,0)
GL_ONE (1,1,1,1)
GL_SRC_COLOR (R? / kR , G? / kG , B? / kB , A? / kA )
GL_ONE_MINUS_SRC_COLOR (1,1,1,1) - (R? / kR , G? / kG , B? / kB , A? / kA )
GL_DST_COLOR (Rd / kR , Gd / kG , Bd / kB , Ad / kA )
GL_ONE_MINUS_DST_COLOR (1,1,1,1) - (Rd / kR , Gd / kG , Bd / kB , Ad / kA )
GL_SRC_ALPHA (A? / kA , A? / kA , A? / kA , A? / kA )
GL_ONE_MINUS_SRC_ALPHA (1,1,1,1) - (A? / kA , A? / kA , A? / kA , A? / kA )
GL_DST_ALPHA (Ad / kA , Ad / kA , Ad / kA , Ad / kA )
GL_ONE_MINUS_DST_ALPHA (1,1,1,1) - (Ad / kA , Ad / kA , Ad / kA , Ad / kA )
GL_SRC_ALPHA_SATURATE (i,i,i, 1)

테이블에서,

i = min (A? , kA - d ) / kA

RGBA 모드로 그릴 때 픽셀의 혼합된 RGBA 값을 결정하기 위해 시스템은 다음 수식을 사용합니다.

R (d) = min( kR , R? sR + d dR )

G (d) = min( kG , G? sG + GddG )

B (d) = min( kB, B? sB + d dB )

A (d) = min( kA , A? sA + d dA )

위의 수식의 정밀도에도 불구하고 혼합은 부정확한 정수 색 값으로 작동하기 때문에 혼합 산술을 정확히 지정하지 않습니다. 그러나 1과 같아야 하는 혼합 계수는 곱셈을 수정하지 않도록 보장되고 0과 같은 혼합 인수는 곱셈을 0으로 줄입니다. 예를 들어, 인팩터가 GL_SRC_ALPHA 경우 dfactorGL_ONE_MINUS_SRC_ALPHA A인가요? 는 kA와 같으며 수식은 단순 대체로 줄어듭니다.

Rd = R?

Gd = G?

Bd = B?

D = A?

예제

투명도는 가장 먼 곳에서 가장 가까운 것으로 정렬된 기본 형식이 있는 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)를 사용하여 구현하는 것이 가장 좋습니다. 이 투명도 계산에는 프레임 버퍼에 알파 비트플레인이 필요하지 않습니다.

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)를 사용하여 앤티앨리어싱된 점과 줄을 임의 순서로 렌더링할 수도 있습니다.

다각형 앤티앨리어싱을 최적화하려면 다각형이 가장 가까운 것에서 가장 먼 것으로 정렬된 glBlendFunc(GL_SRC_ALPHA_SATURATE, GL_ONE)를 사용합니다. 다각형 앤티앨리어싱에 대한 자세한 내용은 glEnable 의 GL_POLYGON_SMOOTH 인수를 참조하세요. 이 혼합 함수가 올바르게 작동하려면 있어야 하는 대상 알파 비트플레인은 누적된 적용 범위를 저장합니다.

들어오는(원본) 알파는 완전한 불투명도를 나타내는 1.0(KA )부터 완전한 투명도를 나타내는 0.0(0)까지의 재질 불투명도입니다.

그리기에 둘 이상의 색 버퍼를 사용하도록 설정하면 활성화된 각 버퍼가 개별적으로 혼합되고 버퍼의 내용이 대상 색에 사용됩니다. ( glDrawBuffer를 참조하세요.)

혼합은 RGBA 렌더링에만 영향을 줍니다. 색 인덱스 렌더러에서 무시됩니다.

다음 함수는 glBlendFunc와 관련된 정보를 검색합니다.

인수가 GL_BLEND_SRC glGet

인수가 GL_BLEND_DST glGet

인수가 GL_BLEND glIsEnabled

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버
Windows 2000 Server[데스크톱 앱만]
헤더
Gl.h
라이브러리
Opengl32.lib
DLL
Opengl32.dll

추가 정보

glAlphaFunc

glBegin

glClear

glDisable

glDrawBuffer

glEnable

glGet

glIsEnabled

glLogicOp

glStencilFunc