Platform SDK: DirectX

ステンシル バッファの動作

[C++]

Direct3D は、ステンシル バッファの内容をピクセルごとに調べる。ステンシル バッファの対応する値、ステンシル参照値、およびステンシル マスク値を使用して、ターゲット サーフェスの各ピクセルに対するテストを行う。テストにパスすると、Direct3D はアクションを実行する。このテストは次の手順で実行される。

  1. ステンシル参照値とステンシル マスクの AND をとる。
  2. カレント ピクセルに対するステンシル バッファ値とステンシル マスクの AND をとる。
  3. 比較関数を使用して、手順 1 と手順 2 の結果を比較する。

擬似コードで記述すると、これらの手順は次のようになる。

(StencilRef & StencilMask) CompFunc (StencilBufferValue & StencilMask)

ここで、StencilBufferValue は、カレント ピクセルに対するステンシル バッファの内容である。この擬似コードでは、& 記号は論理積演算子を表している。StencilMask はステンシル マスク、StencilRef はステンシル参照値を表している。CompFunc は比較関数である。

このステンシル テストにパスすると、カレント ピクセルはターゲット サーフェスに書き込まれるが、失敗した場合は無視される。デフォルトの比較処理は、各ビット操作の結果にかかわらず、ピクセルを書き込むことである (D3DCMP_ALWAYS)。この動作を変更するには、希望の比較関数を指定する D3DCMPFUNC 列挙型のメンバのいずれかを渡して、D3DRENDERSTATE_STENCILFUNC レンダリング ステートの値を変更する。

[Visual Basic]

Direct3D は、ステンシル バッファの内容をピクセルごとに調べる。ステンシル バッファの対応する値、ステンシル参照値、およびステンシル マスク値を使用して、ターゲット サーフェスの各ピクセルに対するテストを行う。テストにパスすると、Direct3D はアクションを実行する。このテストは次の手順で実行される。

  1. ステンシル参照値とステンシル マスクの AND をとる。
  2. カレント ピクセルに対するステンシル バッファ値とステンシル マスクの AND をとる。
  3. 比較関数を使用して、手順 1 と手順 2 の結果を比較する。

擬似コードで記述すると、これらの手順は次のようになる。

(StencilRef And StencilMask) CompFunc (StencilBufferValue And StencilMask)

ここで、StencilBufferValue は、カレント ピクセルに対するステンシル バッファの内容である。StencilMask はステンシル マスク、StencilRef はステンシル参照値を表している。CompFunc は比較関数である。

このステンシル テストにパスすると、カレント ピクセルはターゲット サーフェスに書き込まれるが、失敗した場合は無視される。デフォルトの比較処理は、各ビット操作の結果にかかわらず、ピクセルを書き込むことである (D3DCMP_ALWAYS)。この動作を変更するには、D3DRENDERSTATE_STENCILFUNC レンダリング ステートの値を変更して、希望の比較関数を指定する CONST_D3DCMPFUNC 列挙のメンバのいずれかを渡す。