對于一些紋理,我們不要求全部顯示出來,如用公告板顯示的一棵樹的紋理,此時就要求讓背景不顯示出來,只顯示樹的部分。
//首先圖片的背景要處理成透明,顯然我們看到是透明的了,但是對于計算機來說,同樣會將透明背景后的物品遮住。
//此時就要在渲染紋理前對其進行ALPHA混合
/*
alpha測試根據當前像素是否滿足alpha測試條件(即是否達到一定的透明度)來控制是否繪制該像素,圖形程序應用alpha測試可以有效地屏蔽某些像素顏色。與alpha混合相比,alpha測試不將當前像素的顏色與顏色緩沖區中像素的顏色混合,像素要么完全不透明,要么完全透明。由于無需進行顏色緩沖區的讀操作和顏色混合,因此alpha測試在速度上要優于alpha混合。
比如一棵樹,我們將它的背景ALPHA值設置為小于1。0,那么,我們可以將ALPHAREF 設置為1。0 即0x000000ff 然后ALPHAFUNC 設置為GREATEREQUAL (>=) 所以,只有當ALPHA值大于等于1的部份被渲染,這樣樹的背景就不用畫了!
*/
g_pMyd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );//開啟ALPHA混合功能
g_pMyd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);//設置源混合因子為(As,As,As,As)
g_pMyd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);//設置目標混合因子為(1-As,1-As,1-As,1-As);
g_pMyd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );//開啟ALPHA測試功能
g_pMyd3dDevice->SetRenderState( D3DRS_ALPHAREF, 0x0f );//設置ALPHA測試參考值
g_pMyd3dDevice->SetRenderState( D3DRS_ALPHAFUNC,D3DCMP_GREATEREQUAL );//設置APLHA測試比較規則
//在此處加載紋理和渲染
在渲染完畢后,不要忘了關閉開啟的功能
g_pMyd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, FALSE );
g_pMyd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );