Microsoft DirectX 8.0 (C++)

深度バッファリング ステート

深度バッファリングとは、隠線および隠面を削除する方法である。デフォルトでは、Microsoft® Direct3D® で深度バッファリングは使用されない。

深度バッファの概要については、「深度バッファとは」を参照すること。

C++ アプリケーションでは、D3DZBUFFERTYPE 列挙のメンバのいずれかを使用して新しいステート値を指定することで、D3DRS_ZENABLE レンダリング ステートで深度バッファリング ステートを更新する。

Direct3D による深度バッファへの書き込みを防止する必要がある場合は、D3DRS_ZWRITEENABLE 列挙値を使用し、IDirect3DDevice8::SetRenderState の呼び出しの第 2 パラメータとして D3DZB_FALSE を指定する。

次のコードは、z バッファリングが有効になるように深度バッファ ステートを設定する方法を示している。

// このコード例では、d3dDevice は IDirect3DDevice8 インターフェイスへの
// 有効なポインタであると仮定している。
 
// z バッファリングを有効にする。
d3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);

アプリケーションでは、また、D3DRS_ZFUNC レンダリング ステートを使用して、深度バッファリングの実行時に Direct3D で使用する比較関数を制御できる。

z バイアスとは、互いの深度値が同じであっても、一方のサーフェスを他方のサーフェスより手前に表示する方法である。このテクニックは、さまざまなエフェクトを期待できる。一般的な例として、壁に影を付ける場合を考える。影も壁も深度値は同じである。しかし、どうしても壁に影を付けようとする場合がある。このような場合、影に z バイアスを適用することで、壁の上に影を適切に表示できる (「D3DRS_ZBIAS」を参照すること)。