深度偏差 (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
相關主題