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?