알파 블랜딩 + 알파 테스트로 나무그리기
Posted 2007/05/29 14:48, Filed under: 3D Programming/Rendering1. 알파블랜딩
m_pDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
m_pDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
m_pDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );

오른쪽처럼 뒤쪽에 있는 매쉬부터 그려오면 문제가 없지만, 왼쪽그림처럼 앞쪽이 먼저그려진다면,
치명적인 결과를 불러 일으킨다!! ㅜ_ㅜ.
2. 알파테스트
m_pDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );
m_pDevice->SetRenderState( D3DRS_ALPHAREF, 0x08 );
m_pDevice->SetRenderState( D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL );

알파블랜딩처럼 치명적인 위험은 전혀 없지만, 나무 가장자리가 도트수준으로 잘려 두드러져 보인다.
알파채널값은 0x08 로 설정되었고, 이값보다 크거나 같으면 텍셀을 출력하게 된다.
3. 알파블랜딩 + 알파테스트
m_pDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
m_pDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
m_pDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
m_pDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );
m_pDevice->SetRenderState( D3DRS_ALPHAREF, 0x08 );
m_pDevice->SetRenderState( D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL );


정렬을 신경쓰지 않고 적절히 출력할수 있는 방법이나, 알파테스트로 잘려나가지 않은 부분에선(알파블랜딩)
위그림처럼 보는시점에 따라서 가장자리가 지저분해질 수 있다.
m_pDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
m_pDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
m_pDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
m_pDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );
m_pDevice->SetRenderState( D3DRS_ALPHAREF, 0x08 );
m_pDevice->SetRenderState( D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL );


정렬을 신경쓰지 않고 적절히 출력할수 있는 방법이나, 알파테스트로 잘려나가지 않은 부분에선(알파블랜딩)
위그림처럼 보는시점에 따라서 가장자리가 지저분해질 수 있다.
간단한 알파 데모
AlphaDemo.zip