" 알파합성 "
1. 알파합성이란
- 폴리곤을 렌더링할 때, 폴리곤 색을 그냥 출력하는 것이 아니라 이미 렌더링된 화면에 여러 가지 합성을 해서 출력하는 방법
2. 주의 사항
- 알파 합성은 현재 그려져 있는 색과 렌더링하는 폴리곤의 색을 합성한다. 따라서 반투명 폴리곤을 렌더링하기 저에, 불투명 오브젝트를 렌더링해야 한다.
3. 알파합성 사용법
// 폴리곤을 반투명으로 렌더링할지 여부 결정
m_pd3dDeviece->SetRenderState(D3DRS_ALPHABLENDANABLE, TRUE);
m_pd3dDeviece->SetRenderState(D3DRS_ALPHABLENDANABLE, FALSE);
// 어떻게 색을 조합할지
m_pd3dDeviece->SetRenderState(D3dRS_BLENDOP, 값);
// 폴리곤의 합성 강도
m_pd3dDeviece->SetRenderState(D3DRS_SRCBLEND, 값A);
m_pd3dDeviece->SetRenderState(D3DRS_DESTBLEND, 값B);
4. 다양한 합성 방법
- 선형 합성
: 최종색 = ( 1 - a ) * 바닥색 + a * 덮일색
m_pd3dDeviece->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
m_pd3dDeviece->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
- 덧셈 합성
: 최종색 = 바닥색 + a * 덮일색
: 빛의 표현에 자주 사용
m_pd3dDeviece->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
m_pd3dDeviece->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
- 뺄셈 합성
: 최종색 = 바닥색 - a * 덮일색
: 간단한 그림자 표현에 자주 사용
m_pd3dDeviece->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_REVSUBTRACT);
m_pd3dDeviece->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
m_pd3dDeviece->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
- 곱셈 합성
: 한쪽이 검으면 최종색이 검게 된다.
: 최종색 = 바닥색 * 덮일색
m_pd3dDeviece->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR);
m_pd3dDeviece->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ZERO);
- 제곱 합성
: 어두운 곳은 더 어둡게 하고, 밝은 곳은 그대로 표시
: 최종색 = 바닥색 * 바닥색
m_pd3dDeviece->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_DESTCOLOP);
m_pd3dDeviece->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ZERO);
- 네거티프 포지티프 반전
: 흰 폴리곤을 렌더링하면, 검은 부분은 희게, 흰 부분은 검게 출력 되도록 색을 역전하는 변환
: 최종색 = ( 1 - 바닥색) * 덮일색
m_pd3dDeviece->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ZERO);
m_pd3dDeviece->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_INVDESTCOLOR);
- 불투명
: 최종색 = 덮일색
m_pd3dDeviece->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ZERO);
m_pd3dDeviece->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
댓글 없음:
댓글 쓰기