Share via


Sesgo de profundidad (Direct3D 9)

Los polígonos que son coplanares en el espacio 3D se pueden hacer para que aparezcan como si no fueran coplanar agregando un sesgo z a cada uno. Se trata de una técnica que se usa normalmente para garantizar que las sombras de una escena se muestren correctamente. Por ejemplo, una sombra en una pared probablemente tendrá el mismo valor de profundidad que la pared. Si representa primero la pared y luego la sombra, es posible que la sombra no sea visible o que los artefactos de profundidad sean visibles. Puede invertir el orden en el que se representan los objetos coplanares con la esperanza de revertir el efecto, pero es probable que los artefactos de profundidad sigan siendo probables.

Una aplicación puede ayudar a garantizar que los polígonos coplanares se representan correctamente agregando un sesgo a los valores z que el sistema usa al representar los conjuntos de polígonos coplanares. Para agregar un z-bias a un conjunto de polígonos, llame al método IDirect3DDevice9::SetRenderState justo antes de representarlos, estableciendo el parámetro State en D3DRS_DEPTHBIAS y el parámetro Value en un valor float adecuado (por ejemplo, un valor adecuado podría ser de -1,0 a 1,0); para pasar este valor a SetRenderState, también debe convertir el valor en un DWORD. Un valor de sesgo z mayor aumenta la probabilidad de que los polígonos que represente sean visibles cuando se muestren con otros polígonos coplanares.

Offset = m * D3DRS_SLOPESCALEDEPTHBIAS + D3DRS_DEPTHBIAS

donde m es la pendiente de profundidad máxima del triángulo que se representa.

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

Las unidades de la D3DRS_DEPTHBIAS y D3DRS_SLOPESCALEDEPTHBIAS estados de representación dependen de si está habilitado el almacenamiento en búfer z o w-buffering. La aplicación debe proporcionar valores adecuados.

El sesgo no se aplica a ningún primitivo de línea y punto. Sin embargo, este sesgo debe aplicarse a los triángulos dibujados en modo de trama de alambre.

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

Canalización de píxeles