Blending이란?
일부 혹은 전체가 transparent한 무언가를 렌더링할 때 어떤 식으로 렌더링 할지를 연산하는 과정

OpenGL에서 블렌딩을 조정하는 세 가지 방법
glEnable(GL_BLEND) / glDisable(GL_BLEND)
: 블랜딩 기능 활성화/비활성화
glBlendFunc(src, dest)
: src는 새로 블렌딩시켜줄 픽셀의 RGBA(다른 컬러채널일 수도 있음)에 곱해줄 값을 의미하고,
dest는 목표 위치에 이미 있는 픽셀의 RGBA에 곱해줄 값을 의미한다.
src의 기본값은 1, dest는 0이다.
glBlendEquation(mode)
: src RGBA와 dest RGBA를 서로 어떤 연산을 통해 블랜딩 시켜줄지를 결정한다.
기본값은 더하기이다.
고로 OpenGL의 블렌딩 기본 설정은 (src RGBA * 1) + (dest RGBA * 0), 즉 원본 RGBA를 0으로 날려버리고 src RGBA로 덮어씌우는 설정이다.

그럼 이번엔 지난 시간 작성한 코드와 함께 살펴보자.
int main( void )
{
...
GLCall( glEnable(GL_BLEND) );
GLCall( glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) );
...
일단 블렌딩을 활성화 시킨 후
src=GL_SRC_ALPHA, dest=GL_ONE_MINUS_SRC_ALPHA를 사용했다.
GL_SRC_ALPHA는 해당 src RGBA의 Alpha값(투명도)을 의미하고
GL_ONE_MINUS_SRC_ALPHA는 (1 - 해당 src RGBA의 Alpha값)을 의미한다.

해당 설정으로 블랜딩을 하면 Alpha == 0인, 즉 완전히 투명한 픽셀은 무시되고 원본(dest) 픽셀을 대신 사용하는 것을 알 수 있다.

또 다른 예시를 살펴보면, Alpha가 0과 1 사이에 있는 색의 경우에도 일반적인 블랜딩처럼 잘 처리되는 것을 볼 수 있다.
'computer graphics > OpenGL' 카테고리의 다른 글
[OpenGL] 12. Model View Projection Matrices (0) | 2022.05.03 |
---|---|
[OpenGL] 11. OpenGL과 수학 (0) | 2022.04.16 |
[OpenGL] 9. Textures (0) | 2022.04.09 |
[OpenGL] 8. 추상화(Abstraction)와 렌더러 (0) | 2022.04.02 |
[OpenGL] 7. Vertex Array Object (VAO) (0) | 2022.03.01 |