Platform SDK: DirectX

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

深度バッファリングとは、隠線および隠面を削除する方法である。概要については、「深度バッファとは」を参照すること。デフォルトでは、深度バッファリングは使用されない。

[C++]

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

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

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

// このコードでは、lpD3DDevice は IDirect3DDevice7 インターフェイスへの
// 有効なポインタであるとする。
 
// z バッファリングを有効にする。
lpD3DDevice->SetRenderState(D3DRENDERSTATE_ZENABLE, 
                            D3DZB_TRUE); // D3DZB_TRUE is the same as TRUE

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

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

[Visual Basic]

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

何かの理由で、Direct3D による深度バッファへの書き込みを防止する必要がある場合は、D3DRENDERSTATE_ZWRITEENABLE レンダリング ステートを使用し、Direct3DDevice7::SetRenderState の呼び出しの第 2 パラメータとして D3DZB_FALSE を指定する。

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

' このコードでは、D3DDevice に Direct3DDevice7 オブジェクトへの
' 有効な参照が格納されているとする。
 
' z バッファリングを有効にする。
Call D3DDevice.SetRenderState(D3DRENDERSTATE_ZENABLE, _ 
                              D3DZB_TRUE)

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

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