Share via


Direct3D 9 (深度偏差)

在 3D 空間中共平面的多邊形,可以藉由將 z 偏差新增至每一個多邊形,使其顯示為不共平面。 這是通常用來確保場景中的陰影正確顯示的技術。 例如,牆上的陰影可能會有與牆相同的深度值。 如果您先轉譯牆,然後轉譯陰影,則陰影可能無法顯示,或可能會顯示深度成品。 您可以反轉轉轉效果時轉譯共同平面物件的順序,但深度成品仍然可能。

應用程式可藉由在轉譯平面多邊形集合時,將偏差新增至系統在轉譯平面多邊形時所使用的 z 值,協助確保正確轉譯共同平面多邊形。 若要將 z 偏差新增至一組多邊形,請在轉譯之前呼叫 IDirect3DDevice9::SetRenderState 方法、將 State 參數設定為 D3DRS_DEPTHBIAS,並將 Value 參數設定為適當的浮點值 (例如,適當的值可能是從 -1.0 到 1.0) ;若要將此值傳遞至 SetRenderState,您也必須將值轉換成 DWORD。 較高的 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-buffering。 應用程式必須提供適當的值。

偏差不會套用至任何線條和點基本類型。 不過,此偏差必須套用至以線框模式繪製的三角形。

// RenderStates
D3DRS_SLOPESCALEDEPTHBIAS, // Defaults to zero
D3DRS_DEPTHBIAS,           // Defaults to zero
// Caps
D3DPRASTERCAPS_DEPTHBIAS           
D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS 

圖元管線