次の方法で共有


深度バイアス (Direct3D 9)

3D 空間の同一平面内にあるポリゴンは、それぞれに z バイアスを追加することで、同一平面内に存在しないかのように表示させることができます。この方法は一般に、シーン内の影を適切に表示するために使用されます。たとえば、壁に映った影は、壁と同じ深度値を持つことが望まれます。壁を最初にレンダリングして、次に影をレンダリングする場合、影は見えなかったり、深度の不自然な効果が現れることがあります。エフェクトを逆にするために同一平面のオブジェクトをレンダリングする順序を逆にすることはできますが、深度の不自然な効果はやはり現れることがあります。

アプリケーションでは、z 値にバイアスを追加することで同一平面内のポリゴンを適切にレンダリングすることができます。この z 値は、システムによって同一平面のポリゴンをレンダリングするときに使用されます。一連のポリゴンに z バイアスを追加するには、ポリゴンのレンダリング直前に IDirect3DDevice9::SetRenderState メソッドを呼び出し、State パラメーターを D3DRS_DEPTHBIAS に設定して、Value パラメーターを 0 ~ 16 の値に設定します。z バイアス値が増えるほど、レンダリングするポリゴンは他の同一平面のポリゴンと表示したときに表示される可能性が高まります。

Offset = m * D3DRS_SLOPESCALEDEPTHBIAS + D3DRS_DEPTHBIAS

ここで m は、レンダリングする三角形の最大深度勾配です。

m = max(abs(delta z / delta x), abs(delta z / delta y)) 

D3DRS_DEPTHBIAS および D3DRS_SLOPESCALEDEPTHBIAS レンダリング ステートの単位は、z バッファーリングと w バッファーリングのどちらが有効であるかによって決まります。アプリケーションは適切な値を提供する必要があります。

バイアスは、ラインおよびポイント プリミティブには適用されません。ただし、ワイヤフレーム モードで描画された三角形にはこのバイアスを適用する必要があります。

// RenderStates
D3DRS_SLOPESCALEDEPTHBIAS, // Defaults to zero
D3DRS_DEPTHBIAS,           // Defaults to zero

// Caps
D3DPRASTERCAPS_DEPTHBIAS           
D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS