[D3D] Was ist Depth Clip?

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Krishty
Establishment
Beiträge: 8366
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

[D3D] Was ist Depth Clip?

Beitrag 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
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Jörg
Establishment
Beiträge: 296
Registriert: 03.12.2005, 13:06
Wohnort: Trondheim
Kontaktdaten:

Re: [D3D] Was ist Depth Clip?

Beitrag von Jörg »

Welche Z-Werte haben denn deine Vertices?
Benutzeravatar
Krishty
Establishment
Beiträge: 8366
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [D3D] Was ist Depth Clip?

Beitrag 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 :)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: [D3D] Was ist Depth Clip?

Beitrag 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 ...
Benutzeravatar
Krishty
Establishment
Beiträge: 8366
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [D3D] Was ist Depth Clip?

Beitrag 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 -.-
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: [D3D] Was ist Depth Clip?

Beitrag 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.)
Antworten