Seite 1 von 1

[D3D] Was ist Depth Clip?

Verfasst: 10.03.2010, 19:36
von Krishty
Hi,

Was ist Depth Clip? Aktivierbar ist es durch D3D10/11_RASTERIZER_DESC::DepthClipEnable. Liege ich damit richtig, dass es schlicht die Pixel verwirft, deren Tiefenwerte nicht zwischen 0 und 1 liegen?

Irgendwie kriege ich das nämlich gerade nicht mit vortransformierten Vertices kombiniert …

Gruß, Ky

Re: [D3D] Was ist Depth Clip?

Verfasst: 10.03.2010, 21:04
von Jörg
Welche Z-Werte haben denn deine Vertices?

Re: [D3D] Was ist Depth Clip?

Verfasst: 10.03.2010, 21:19
von Krishty
Null (W ist 1), und sie werden nicht gerendert.

Sobald Z größer wird als 1 oder kleiner als 0, wird wieder gerendert, aber nur der Nullpunkt (=> alles schwarz).

Edit: Oh, da schien ein nicht geclearter Backbuffer durch … die vortransformierten Vertices funktionieren. Die andere Geometrie aber nicht … mal gucken, was sich da machen lässt.

Ähm, die Frage, was Depth Clipping ist, bleibt bestehen :)

Re: [D3D] Was ist Depth Clip?

Verfasst: 10.03.2010, 23:51
von eXile
Mit Depth-Clipping werden vor der perspektivischen Transformation alle Vertices, welche nicht zwischen der Near- und Far-Plane liegen, verworfen. Gäbe ansonsten hässliche wrap-arounds ...

Re: [D3D] Was ist Depth Clip?

Verfasst: 11.03.2010, 01:19
von Krishty
eXile hat geschrieben:Mit Depth-Clipping werden vor der perspektivischen Transformation alle Vertices, welche nicht zwischen der Near- und Far-Plane liegen, verworfen. Gäbe ansonsten hässliche wrap-arounds ...
Was wären das für Wrap-Arounds? (Habe früher vereinzelt Geometrie ohne Depth-Clipping gerendert … Zeug, das verdeckungsfrei und weit entfernt war). Habe mir schon gedacht, dass es irgendwie in die Richtung geht, aber nie genau nachgefragt/forscht.

Mein Geometrieproblem hat sich erledigt – ich hatte eine 4×4-Projektionsmatrix auf 3×4 beschnitten. Da ich früher ohne Depth-Clipping gerendert habe, fiel mir nie auf, dass damit die Z-Koordinaten total abgef***t waren -.-

Re: [D3D] Was ist Depth Clip?

Verfasst: 12.03.2010, 14:46
von eXile
Ich hab mich mal mit dem Thema etwas weiter beschäftigt ... zunächst sollte man zwischen Depth-Clamping und Depth-Clipping unterscheiden:

Depth-Clamping bedeutet, dass z-Werte außerhalb von [0,1] auf eben dieses Intervall zurückgesetzt werden. D.h. egal was der Rasterizer für einen z-Wert ausspuckt, der Rasterizer "clampt" den z-Wert auf [0,1]. Depth-Clamping ist immer aktiv.

Das Depth-Clipping ist optional, und wird während des Rasterisierens ausgeführt. Wenn beim Rasterisieren mal ein Wert außerhalb von [0,1] auftaucht, wird dieser Pixel verworfen. Alle gezeichneten Pixel sind also im Interval [0,1], und das Depth-Clamping muss nichts mehr machen. Aber das Depth-Clipping hat noch eine Besonderheit: Sollte der Rasterizer eine homogene Division mit einem w < 0 durchführen, so werden die entstehenden Pixel alle verworfen (bzw. erst gar nicht erzeugt). Sollte man also (warum auch immer) mal nen Vertex mit w < 0 haben, und läge der hinter der Kamera, würde der plötzlich nach vorne projeziert werden. Mit Depth-Clipping würden dann alle Pixel auf diesem Dreieck verworfen. (Ich habe das allerdings noch nicht praktisch nachprüfen können.)