共用方式為


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測試。

渲染狀態