본문 바로가기

개인공부/C++ Graphics

OpenGL #11 Blending

블렌딩이란?

 

빨간색과 파란색을 합쳤을때 보라색이 나와야 하지 않을까?

 

이것과 같이 블렌딩은 우리가 어떤식으로 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

0.5 라 어느정도 투명한 흰색이다

 

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