Ich lerne programmierbare Rendering-Pipeline durch Implementierung eines winzigen Software-Renderers. Ich versuche es in einem "Hardware" -Stil zu implementieren. Ich bin jedoch nicht mit der GPU-Pipeline vertraut und habe einige Probleme mit homogenem Clipping.
Der homogene Clipping-Raum enthält eine w- Variable, die an jedem Scheitelpunkt unterschiedlich ist. Befindet sich die homogene Koordinate jedes Scheitelpunktobjekts (zwischen Projektionsmatrix und homogener Division durch w) in einem eigenen Beschneidungsraum? Wenn ja, wie kann man die Linien und Dreiecke näher als den Kegelstumpf abschneiden oder sich sogar hinter die Kamera strecken (dh w <= Kegelstumpf_znear)?
Update : Dieser Thread besagt, dass das Abschneiden im homogenen Raum direkt ein Schnittpunktproblem im homogenen 4D-Raum ist. Was bedeutet, dass der Schnittpunkt ist p_vec4 = t * point1_vec4 + (1 - t) * point2_vec4
. Angenommen, ich habe P0(-70, -70, 118, 120)
und P1(-32, -99, -13, -11)
in einem 4D-homogenen Raum, und der Schnittpunkt mit plane w = -z
(der in NDC z = -1 ist) ist (-35, -96, -1, 0.9) t = 0.99
, wie man das entsprechende Scheitelpunktobjekt im NDC-Raum erhält.
Und wenn ich den richtigen Schnittpunkt erhalten habe, sollte ich die Interpolation zwischen Scheitelpunktobjekten durchführen, die vom Scheitelpunkt-Shader erstellt wurden, um ein neues Scheitelpunktobjekt zu erhalten?
quelle
Antworten:
Das Abschneiden erfolgt im 3D-Raum vor der 'w'-Teilung, nicht im 4D-Raum.
Die GPU findet entweder nur die nahen und fernen Ebenen oder alle 6 3D-Ebenen des Ansichtsstumpfs und schneidet das Geo daran ab.
Wenn die Division vor dem Koordinatenzeichen durchgeführt würde, würden die Eckpunkte hinter dem Auge / der Kamera umgedreht.
Wenn nur Nah-Fern-Ebenen zum 3D-Clip vor der w-Division verwendet werden, kann es sein, dass die X- und Y-Ebenen in der Rasterphase ausschließlich auf 2D-Clipping angewiesen sind.
W ist nur ein Projektionsteiler, der in direktem Zusammenhang mit Z steht, nicht tatsächlich eine 4. Dimension. Die 4x4-Matrix ist ein "Hack", um eine Übersetzungs- und Projektionsabteilung in einem praktischen Format einzuschließen. Dies funktioniert nur, weil Positionen als (x, y, z, 1) und Normalen als (x, y, z, 0) impliziert sind.
Aber es sind nicht wirklich 4 unabhängige Dimensionen.
Jeder andere Wert für "W", der nicht 1 oder 0 ist, ist für die Geometrie wenig sinnvoll. Er ist ein praktischer Ein- / Ausschalter zum Ausschalten der Übersetzung.
quelle
Wenn Sie homogene Clip-Space-Koordinaten in NDC-Koordinaten (Normalized Device Coordinates) konvertieren möchten, gehen Sie wie folgt vor:
<x y z w> → <x/w y/w z/w>
Diese GDSE-Frage / Antwort zu Warum wird der Clip-Bereich immer als „homogener Clip-Bereich“ bezeichnet? kann Ihnen auch hilfreich sein.
quelle