Details darüber, was die GPU beim Abschneiden in einem homogenen 4D-Raum tatsächlich tut?


10

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?


Dies scheint mir zu viele Fragen für einen einzelnen Beitrag zu haben und sollte wahrscheinlich aufgeteilt werden. Die allgemeine Regel ist eine einzelne Frage (oder zumindest eine Schlüsselfrage) pro Beitrag.
Pikalek

@Pikalek Ich entferne die beiden anderen Fragen und versuche, diesen Thread vernünftig zu machen. Danke für deinen Rat.
Stanleyley

Antworten:


1

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.


0

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.


1
Danke für deine Antwort. Mein Problem ist jedoch die Interpolation. Angenommen, zwei Punkte e1, e2 unter der 3D-Augenkoordinate werden auf den homogenen 4D-Beschneidungsraum h1, h2 projiziert. Dann interpolieren wir im homogenen 4D-Raum, das Segment h1-h2 wird am 4D-Punkt h (t) = t * h1 + (1-t) * h2 abgeschnitten. Nehmen wir an, wir haben ohne Verlust der Allgemeinheit einen h1-h (t) -Teil (der sichtbar ist), der in die Rasterungsstufe eingespeist wird. Wir müssen also die entsprechenden Vertex-Eigenschaften generieren (wie das Ausgabeformat des Vertex-Shaders). Meine Frage ist, wie die Eigenschaften dieser neuen Scheitelpunkte generiert werden können.
Stanleyerror

Mein Verständnis ist, dass Interpolation in HCS nicht durchgeführt wird, aber ich könnte mich irren. Wenn Sie hier nicht mehr / bessere Antworten erhalten, können Sie versuchen, erneut auf SO zu migrieren.
Pikalek

Okay. Könnte ich diesen Thread direkt nach SO migrieren oder muss ich dort eine neue Frage erneut öffnen.
Stanleyley

Mein Fehler, Ihnen vorzuschlagen, erneut zu fragen; Von Crossposting wird generell abgeraten .
Pikalek

Ich denke, die Admins können das migrieren.
Sidar
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.