深度偏差 (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 缓冲。 应用程序必须提供合适的值。

偏差不应用于任何线和点基元。 但是,这种偏差需要应用于在线框模式下绘制的三角形。

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

像素管道