次の方法で共有


深度バッファー ステート (Direct3D 9)

深度バッファーは、非表示の線やサーフェスを削除する方法です。既定では、Direct3D では深度バッファーは使用されません。

深度バッファーの概念の概要については、「深度バッファー (Direct3D 9)」を参照してください。

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

アプリケーションで Direct3D による深度バッファーへの書き込みを防ぐ必要がある場合は、D3DRS_ZWRITEENABLE 列挙値を使用して、IDirect3DDevice9::SetRenderState を呼び出すときの 2 番目のパラメーターとして D3DZB_FALSE を指定します。

次のコード例は、深度バッファー ステートで z バッファーの使用を有効にする方法を示しています。

// This code example assumes that d3dDevice is a 
// valid pointer to an IDirect3DDevice9 interface.
// Enable z-buffering.
d3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);

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

z バイアスは、深度値が同じでも、特定のサーフェスを別のサーフェスの手前に表示する方法です。このテクニックは、さまざまな効果に使用できます。一般的な例には、壁へのシャドウ レンダリングがあります。シャドウも壁も同じ深度値を持っています。しかし、アプリケーションではシャドウを壁の上に表示する必要があります。シャドウに z バイアスを指定することにより、シャドウと壁は適切に表示されます (「D3DRS_DEPTHBIAS」を参照)。