Platform SDK: DirectX |
C++ アプリケーションでは、アルファ テスティングを使用して、いつピクセルをレンダリング ターゲット サーフェスに書き込むかを制御する。D3DRENDERSTATE_ALPHATESTENABLE 列挙値を使用することにより、アプリケーションでは、アルファ テスト関数に基づいて各ピクセルをテストできるように現在の Direct3D デバイスを設定する。テストが成功すると、ピクセルがサーフェスに書き込まれる。テストが失敗すると、ピクセルは無視される。アルファ テスト関数は、D3DRENDERSTATE_ALPHAFUNC 列挙値で選択する。D3DRENDERSTATE_ALPHAREF レンダリング ステートを使用することにより、アプリケーションでは、比較するすべてのピクセルに参照アルファ値を設定する。
アルファ テスティングは、通常、透明に近いオブジェクトをラスタ化する際のパフォーマンスを改善するために使用する。ラスタ化する色データが指定のピクセル (D3DPCMPCAPS_GREATEREQUAL) よりも不透明の場合、ピクセルが書き込まれる。そうでない場合は、ラスタライザはピクセルを無視し、2 色のブレンドに必要な処理を省略する。次のコードは、指定の比較関数がサポートされているかどうかを調べ、サポートされている場合は、レンダリングのパフォーマンス改善に必要な比較関数のパラメータを設定する。
// この例では、pd3dDeviceDesc は、 // 前の IDirect3DDevice7::GetCaps の呼び出しによって格納された // D3DDEVICEDESC7 構造体であるとする。 if (pd3dDeviceDesc.dpcTriCaps.dwAlphaCmpCaps & D3DPCMPCAPS_GREATEREQUAL) { dev->SetRenderState( D3DRENDERSTATE_ALPHAREF, (DWORD)0x00000001); dev->SetRenderState( D3DRENDERSTATE_ALPHATESTENABLE, TRUE ); dev->SetRenderState( D3DRENDERSTATE_ALPHAFUNC, D3DCMP_GREATEREQUAL ); } // 比較関数がサポートされていない場合にもレンダリングを実行する。 // ただし、パフォーマンスは改善されない。
すべてのハードウェアがアルファ テスティング機能をサポートしているわけではない。デバイス機能を調べるには、IDirect3DDevice7::GetCaps メソッドを呼び出す。デバイス機能を取得した後、使用する比較関数の D3DPRIMCAPS 構造体 (関連付けられた D3DDEVICEDESC7 構造体に格納されている) の dwAlphaCmpCaps メンバを調べる。dwAlphaCmpCaps メンバが D3DPCMPCAPS_ALWAYS のみ、または D3DPCMPCAPS_NEVER のみ含んでいる場合、ドライバはアルファ テストをまったくサポートしていない。
Visual Basic で記述されたアプリケーションでは、アルファ テスティングを使用して、いつピクセルをレンダリング ターゲット サーフェスに書き込むかを制御する。D3DRENDERSTATE_ALPHATESTENABLE 列挙値を使用することにより、アプリケーションでは、アルファ テスト関数に基づいて各ピクセルをテストできるように現在の Direct3D デバイスを設定する。テストが成功すると、ピクセルがサーフェスに書き込まれる。テストが失敗すると、ピクセルは無視される。アルファ テスト関数は、D3DRENDERSTATE_ALPHAFUNC 列挙値で選択する。D3DRENDERSTATE_ALPHAREF レンダリング ステートを使用することにより、アプリケーションでは、比較するすべてのピクセルに参照アルファ値を設定する。
アルファ テスティングは、通常、透明に近いオブジェクトをラスタ化する際のパフォーマンスを改善するために使用する。ラスタ化する色データが指定のピクセル (D3DPCMPCAPS_GREATEREQUAL) よりも不透明に近い場合、ピクセルが書き込まれる。そうでない場合は、ラスタライザはピクセルを無視し、2 色のブレンドに必要な処理を省略する。次のコードは、指定の比較関数がサポートされているかどうかを調べ、サポートされている場合は、レンダリングのパフォーマンス改善に必要な比較関数のパラメータを設定する。
' この例では、d3dDeviceDesc は、 ' Direct3DDevice7::GetCaps の呼び出しによって格納された ' D3DDEVICEDESC7 型であるとする。 If (d3dDeviceDesc.dpcTriCaps.lAlphaCmpCaps And D3DPCMPCAPS_GREATEREQUAL) Then Call dev.SetRenderState(D3DRENDERSTATE_ALPHAREF, &H1) Call dev.SetRenderState(D3DRENDERSTATE_ALPHATESTENABLE, True) Call dev.SetRenderState(D3DRENDERSTATE_ALPHAFUNC, D3DCMP_GREATEREQUAL) End If ' 比較関数がサポートされていない場合にもレンダリングを実行する。 ' ただし、パフォーマンスは改善されない。
すべてのハードウェアがアルファ テスティング機能をサポートしているわけではない。デバイス機能を調べるには、Direct3DDevice7.GetCaps メソッドを呼び出す。デバイスの機能を検索した後、使用する比較関数の D3DPRIMCAPS 型 (関連付けられた D3DDEVICEDESC7 型に格納されている) の lAlphaCmpCaps メンバを調べる。lAlphaCmpCaps メンバが D3DPCMPCAPS_ALWAYS のみ、または D3DPCMPCAPS_NEVER のみ含んでいる場合、ドライバはアルファ テストをまったくサポートしていない。