1. 알파블랜딩
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 );
정렬을 신경쓰지 않고 적절히 출력할수 있는 방법이나, 알파테스트로 잘려나가지 않은 부분에선(알파블랜딩)
위그림처럼 보는시점에 따라서 가장자리가 지저분해질 수 있다.
간단한 알파 데모
Trackback URL : http://oneil.cafe24.com/tatter/trackback/40