深度偏差 (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
相关主题