블랜딩 op 도와주세요

2D, 3D, 다각형, 픽셀 등 게임의 그래픽 프로그래밍에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

블랜딩 op 도와주세요

Post by 비회원 »

현재 구현해야하는 블랜딩이..

Sa = 소스알파
Sc = 소스컬러
Fa = 프레임에적용하는 FactorAlpha

BFa = Sa * Fa
BF~a = 1 - (Sa * Fa)

즉.. 소스의 알파값에 커스텀 알파값을 곱해 블랜딩을 줘야하는 상황이구요..
텍스쳐는 1개만 사용하고 생성시 텍스쳐에 알파값이 매겨져있습니다.

아래는 블랜딩 공식입니다.

Dc * BF~a + Sc * BFa

현재 제가 구현한 소스입니다.

if(BAlpha<255)
{
_pD3DDevice->SetRenderState( D3DRS_SEPARATEALPHABLENDENABLE , TRUE );
_pD3DDevice->SetRenderState( D3DRS_BLENDFACTOR , D3DCOLOR_ARGB(BAlpha,BAlpha,BAlpha,BAlpha) );
_pD3DDevice->SetRenderState( D3DRS_SRCBLEND , D3DBLEND_BLENDFACTOR );
_pD3DDevice->SetRenderState( D3DRS_DESTBLEND , D3DBLEND_INVBLENDFACTOR );
_pD3DDevice->SetRenderState( D3DRS_SRCBLENDALPHA , D3DBLEND_SRCALPHA );
_pD3DDevice->SetRenderState( D3DRS_DESTBLENDALPHA , D3DBLEND_INVSRCALPHA );
_pD3DDevice->SetRenderState( D3DRS_BLENDOPALPHA , D3DBLENDOP_ADD );
}
else
{
_pD3DDevice->SetRenderState( D3DRS_SRCBLEND , D3DBLEND_SRCALPHA );
_pD3DDevice->SetRenderState( D3DRS_DESTBLEND , D3DBLEND_INVSRCALPHA );
}

_pD3DDevice->SetRenderState( D3DRS_BLENDOP , D3DBLENDOP_ADD );

_pD3DDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
_pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);

_pD3DDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
_pD3DDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);


결과적으로 블랜딩은 되는데 색깔이 이상하게 나오게 됨니다.
알파채널로 뚤려야 하는곳에도 엉뚱한 색깔이 나오고있습니다..
도와주세요..ㅠ
비회원

해결했습니다..

Post by 비회원 »

자문 자답이 되었네요..

버텍스에 디퓨즈값의 알파채널에 값을넣고..

_pD3DDevice->SetRenderState( D3DRS_SRCBLEND , D3DBLEND_SRCALPHA );
_pD3DDevice->SetRenderState( D3DRS_DESTBLEND , D3DBLEND_INVSRCALPHA );
_pD3DDevice->SetRenderState( D3DRS_BLENDOP , D3DBLENDOP_ADD );

_pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
_pD3DDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE );


... 텍스쳐에서 알파만 곱해서 해결했네요;
Locked