アルファ テスト状態 (Direct3D 9)

C++ アプリケーションでは、アルファ テストを使用して、ピクセルがレンダー ターゲット サーフェスに書き込まれるタイミングを制御できます。 D3DRS_ALPHATESTENABLEレンダリング状態を使用して、アプリケーションはアルファ テスト関数に従って各ピクセルをテストするように、現在の Direct3D デバイスを設定します。 テストが成功すると、ピクセルがサーフェスに書き込まれます。 そうでない場合、Direct3D はピクセルを無視します。 D3DRS_ALPHAFUNCレンダリング状態のアルファ テスト関数 選択します。 アプリケーションでは、D3DRS_ALPHAREFレンダリング状態を使用して、比較するすべてのピクセルの参照アルファ値 設定できます。

アルファ テストの最も一般的な用途は、ほぼ透明なオブジェクトをラスター化するときのパフォーマンスを向上することです。 ラスター化されるカラー データが、特定のピクセル (D3DPCMPCAPS_GREATEREQUAL) の色よりも不透明な場合は、ピクセルが書き込まれます。 それ以外の場合、ラスタライザーはピクセルを完全に無視し、2 つの色をブレンドするために必要な処理を保存します。 次のコード例では、特定の比較関数がサポートされているかどうかを確認し、サポートされている場合は、レンダリング中のパフォーマンスを向上させるために必要な比較関数パラメーターを設定します。

// 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.

すべてのハードウェアでアルファ テスト機能がすべてサポートされているわけではありません。 デバイス機能をチェックするには、IDirect3D9::GetDeviceCaps メソッドを呼び出します。 デバイス機能を取得した後、関連する D3DCAPS9 構造体の AlphaCmpCaps メンバーを目的の比較関数にチェックします。 AlphaCmpCaps メンバーにD3DPCMPCAPS_ALWAYS機能のみが含まれている場合、またはD3DPCMPCAPS_NEVER機能のみが含まれている場合、ドライバーはアルファ テストをサポートしません。

レンダリングの状態