Share via


Alpha 測試狀態 (Direct3D 9)

C++ 應用程式可以使用 Alpha 測試來控制將圖元寫入轉譯目標表面的時機。 藉由使用 D3DRS_ALPHATESTENABLE 轉譯狀態,您的應用程式會設定目前的 Direct3D 裝置,使其根據 Alpha 測試函式測試每個圖元。 如果測試成功,圖元會寫入表面。 如果沒有,Direct3D 會忽略圖元。 選取具有 D3DRS_ALPHAFUNC 轉譯狀態的 Alpha 測試函式。 您的應用程式可以使用 D3DRS_ALPHAREF 轉譯狀態來設定所有圖元的參考 Alpha 值,

Alpha 測試最常見的用法是在點陣化幾乎透明的物件時改善效能。 如果點陣化的色彩資料比指定圖元 (D3DPCMPCAPS_GREATEREQUAL) 的色彩更不透明,則會寫入圖元。 否則,轉譯器會完全忽略圖元,儲存混合兩種色彩所需的處理。 下列程式碼範例會檢查指定的比較函式是否受到支援,如果是,則會設定在轉譯期間改善效能所需的比較函式參數。

// This code example assumes that pCaps is a
// D3DCAPS9 structure that was filled with a 
// previous call to IDirect3D9::GetDeviceCaps.

if (pCaps.AlphaCmpCaps & D3DPCMPCAPS_GREATEREQUAL)
{
    dev->SetRenderState(D3DRS_ALPHAREF, (DWORD)0x00000001);
    dev->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE); 
    dev->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);
}

// If the comparison is not supported, render anyway. 
// The only drawback is no performance gain.

並非所有硬體都支援所有 Alpha 測試功能。 您可以呼叫 IDirect3D9::GetDeviceCaps 方法來檢查裝置功能。 擷取裝置功能之後,請檢查相關聯的 D3DCAPS9 結構的 AlphaCmpCaps 成員,以取得所需的比較函式。 如果 AlphaCmpCaps 成員只包含D3DPCMPCAPS_ALWAYS功能或僅包含D3DPCMPCAPS_NEVER功能,驅動程式就不支援 Alpha 測試。

轉譯狀態