Platform SDK: DirectX |
深度バッファリングとは、隠線および隠面を削除する方法である。概要については、「深度バッファとは」を参照すること。デフォルトでは、深度バッファリングは使用されない。
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 アプリケーションでは、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 を参照すること)。