Device->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
Device->SetRenderState( D3DRS_SRCBLEND, 어쩌구);
Device->SetRenderState( D3DRS_DESTBLEND, 저쩌구 );
뭐 이런식으로 설정해서 나오는 알파블렌딩 적용을 통해 나오는 최종값 공식입니다.
FinalColor = TexelColor × SourceBlendFactor + PixelColor × DestBlendFactor
한글로 설명하면
결과색상 = 소스칼라값 * 소스 블렌딩 계수 + 대상칼라값 * 대상 블렌딩 계수
소스 - 프레임 버퍼에 전송하고자 하는 픽셀 - 그리고자 하는 픽셀
대상 - 그리고자 하기 이전에 이미 프레임 버퍼에 존재하던 픽셀
이런 최종값을 알파 텍스쳐 블렌딩 계수 변경을 통해 직접 수정할수 있다.
Constants
- D3DBLEND_ZERO
Blend factor is (0, 0, 0, 0).
- D3DBLEND_ONE
Blend factor is (1, 1, 1, 1).
- D3DBLEND_SRCCOLOR
Blend factor is (Rs,Gs,Bs,As).
- D3DBLEND_INVSRCCOLOR
Blend factor is (1 - Rs, 1 - Gs, 1 - Bs, 1 - As).
- D3DBLEND_SRCALPHA
Blend factor is (As, As, As, As).
- D3DBLEND_INVSRCALPHA
Blend factor is ( 1 - As, 1 - As, 1 - As, 1 - As).
- D3DBLEND_DESTALPHA
Blend factor is (Ad, Ad, Ad, Ad).
- D3DBLEND_INVDESTALPHA
Blend factor is (1 - Ad, 1 - Ad, 1 - Ad, 1 - Ad).
- D3DBLEND_DESTCOLOR
Blend factor is (Rd, Gd, Bd, Ad).
- D3DBLEND_INVDESTCOLOR
Blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad).
- D3DBLEND_SRCALPHASAT
Blend factor is (f, f, f, 1); f = min(A, 1 - Ad).
Device->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ZERO);
Device->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR );
이런 상태 설정후에 블렌딩 방정식은 다음과 같게된다
result = (Src-R, Src-G, Src-B, Src-A) * (0, 0, 0, 0) + (Dest-R, Dest-G, Dest-B, Dest-A) * (Src-R, Src-G, Src-B, Src-A)
= (Src-R*0 ,Src-G*0 ,Src-B*0 ,Src-A*0)
+ (Dest-R*Src-R ,Dest-G*Src-G ,Dest-B*Src-B ,Dest-A*Src-A)
= (Dest-R*Src-R ,Dest-G*Src-G ,Dest-B*Src-B ,Dest-A*Src-A)
출처 : http://cafe.naver.com/jzsdn/6116