Depth Bias (Direct3D 9)
Polygone, die in Ihrem 3D-Raum koplanar sind, können so aussehen, als ob sie nicht koplanar sind, indem sie jedem einen Z-Bias hinzufügen. Dies ist eine Technik, die häufig verwendet wird, um sicherzustellen, dass Schatten in einer Szene ordnungsgemäß angezeigt werden. So hat beispielsweise ein Schatten auf einer Wand wahrscheinlich den gleichen Tiefenwert wie die Wand. Wenn Sie die Wand zuerst und dann den Schatten rendern, ist der Schatten möglicherweise nicht sichtbar, oder Tiefenartefakte sind sichtbar. Sie können die Reihenfolge umkehren, in der Sie die koplanaren Objekte in Hoffnungen auf eine Umkehrung des Effekts rendern, aber Tiefenartefakte sind weiterhin wahrscheinlich.
Eine Anwendung kann sicherstellen, dass koplanare Polygone ordnungsgemäß gerendert werden, indem sie den Z-Werten, die das System beim Rendern der Sätze von koplanaren Polygonen verwendet, einen Bias hinzufügen. Um einer Reihe von Polygonen einen Z-Bias hinzuzufügen, rufen Sie die IDirect3DDevice9::SetRenderState- Methode direkt vor dem Rendern auf, und legen Sie den parameter State auf D3DRS_DEPTHBIAS fest, und den parameter Value auf einen geeigneten Float-Wert (z. B. kann ein geeigneter Wert zwischen -1,0 und 1,0 sein); um diesen Wert an SetRenderState-zu übergeben, müssen Sie den Wert auch in eine DWORD-umwandeln. Ein höherer Z-Bias-Wert erhöht die Wahrscheinlichkeit, dass die von Ihnen gerenderten Polygone sichtbar sind, wenn sie mit anderen koplanaren Polygonen angezeigt werden.
Offset = m * D3DRS_SLOPESCALEDEPTHBIAS + D3DRS_DEPTHBIAS
dabei ist m die maximale Tiefenneigung des Dreiecks, das gerendert wird.
m = max(abs(delta z / delta x), abs(delta z / delta y))
Die Einheiten für die D3DRS_DEPTHBIAS und D3DRS_SLOPESCALEDEPTHBIAS Renderzustände hängen davon ab, ob Z-Pufferung oder W-Pufferung aktiviert ist. Die Anwendung muss geeignete Werte bereitstellen.
Die Verzerrung wird nicht auf einen Linien- und Punktgrundtyp angewendet. Diese Verzerrung muss jedoch auf Dreiecke angewendet werden, die im Drahtmodellmodus gezeichnet werden.
// RenderStates
D3DRS_SLOPESCALEDEPTHBIAS, // Defaults to zero
D3DRS_DEPTHBIAS, // Defaults to zero
// Caps
D3DPRASTERCAPS_DEPTHBIAS
D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS
Verwandte Themen