블렌딩이란?
빨간색과 파란색을 합쳤을때 보라색이 나와야 하지 않을까?
이것과 같이 블렌딩은 우리가 어떤식으로 output 색상과 이미 타겟 버퍼안에있는 색상과 합칠지 결정해준다.
*Output 색상 - > Fragment Shader 에서 최종결정돼어 out 으로 뱉은 색깔
*Target Buffer -> Fragment Shader 가 그릴 버퍼 (목적지)
방법 -
glEnable(GL_BLEND) - glDisable(GL_BLEND)
glBlendFunc(src, dest)
src 의 디폴드는 GL_ONE
dest 의 디폴트는 GL_ZERO
glBlendEquation(mode)
mode 의 디폴트는 GL_FUNC_ADD -> 소스 컬러와 목적지컬러와 그냥 더해버린다.
이 뜻은 그냥 소스 색상이 1 이고 목적지 색은 0 이므로 결국 그냥 소스색상을 뱉겠다는 뜻이다. ( 디폴트로 사용한다면)
하지만 내가 한것은
GLCall(glEnable(GL_BLEND));
GLCall(glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA));
이것인데 이 뜻은 픽셀이 투명하다면
src alpha 는 0
dest = 1 - 0 = 1 ( 뒤집는다)
결국 그냥 목적지 색을 쓰라는 것이다.
공식을 대충 살펴보자면
R = (r(소스) * 0 ) + r(목적) (1-0)) = r 목적지
G = (g(소스) * 0 ) + g(목적) (1-0)) = g 목적지
B = (b(소스) * 0 ) + b(목적) (1-0)) = b 목적지
A = (a(소스) * 0 ) + a(목적) (1-0)) = a 목적지
예시로 보자

이런 흰색시트를
-> RGBA


RGBA -

이런 보라색위에 두는데 alpha 마이너스를 사용한다면 공식은

이런식으로 나올것이다
결과는?

'개인공부 > C++ Graphics' 카테고리의 다른 글
| OpenGL #13 Projection (2/3) (0) | 2025.01.16 |
|---|---|
| OpenGL #12 Projection (1/3) (0) | 2025.01.16 |
| OpenGL #10 Texture (1) | 2025.01.14 |
| OpenGL #9 Renderer (0) | 2025.01.13 |
| OpenGL (지금까지 내용) (0) | 2025.01.13 |