Partager via


Biais de profondeur (Direct3D 9)

Les polygones coplanaires dans votre espace 3D peuvent apparaître comme s’ils ne sont pas coplanaires en ajoutant un biais z à chacun d’eux. Il s’agit d’une technique couramment utilisée pour s’assurer que les ombres d’une scène sont affichées correctement. Par exemple, une ombre sur un mur aura probablement la même valeur de profondeur que celle du mur. Si vous affichez d’abord le mur, puis l’ombre, l’ombre peut ne pas être visible, ou les artefacts de profondeur peuvent être visibles. Vous pouvez inverser l’ordre dans lequel vous affichez les objets coplanaires dans l’espoir d’inverser l’effet, mais les artefacts de profondeur sont toujours probables.

Une application peut vous aider à garantir que les polygones coplanaires sont rendus correctement en ajoutant un biais aux valeurs z que le système utilise lors du rendu des jeux de polygones coplanaires. Pour ajouter un biais z à un ensemble de polygones, appelez la méthode IDirect3DDevice9 ::SetRenderState juste avant de les afficher, en définissant le paramètre d’état sur D3DRS_DEPTHBIAS, et le paramètre Valeur à une valeur flottante appropriée (par exemple, une valeur appropriée peut être comprise entre -1.0 et 1.0) ; pour passer cette valeur à SetRenderState, vous devez également convertir la valeur en DWORD. Une valeur de biais z plus élevée augmente la probabilité que les polygones que vous affichez soient visibles lors de l’affichage avec d’autres polygones coplanaires.

Offset = m * D3DRS_SLOPESCALEDEPTHBIAS + D3DRS_DEPTHBIAS

où m correspond à la pente de profondeur maximale du triangle affiché.

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

Les unités des D3DRS_DEPTHBIAS et D3DRS_SLOPESCALEDEPTHBIAS états de rendu dépendent de l’activation de la mise en mémoire tampon z ou de la mise en mémoire tampon w. L’application doit fournir des valeurs appropriées.

Le biais n’est appliqué à aucune primitive de trait et de point. Toutefois, ce biais doit être appliqué aux triangles dessinés en mode filaire.

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

de pipeline de pixels