Was mich jetzt leicht verwirrt, ist, dass dieser Prozess in Real-Time Rendering anders erklärt wird. Dort wird erst die Projektion durchgeführt, in der das Sichtvolumen in den Einheitswürfel transformiert wird, anschließend geclipped und dann eben das Screen Mapping.
Ob du vor dem Homogenisieren gegen [-w, w] clippest oder oder nacher gegen [-1, 1] führt beides doch zum selben Ergebnis. Wobei das Clipping auf der Grafikkarte normalerweise vor der Division passiert, deswegen heißt es ja auch Clip Space.
Was ich dabei nicht verstehe: Warum muss das in den Einheitswürfel transformiert werden? Reicht es nicht aus, wenn ich meine Kamera und die gesamte Szene im Camera Space hab? Durch die Transformation muss ich ja dann auch irgendwie meine Objekte deformieren. Man stelle sich vor, ich gucke perspektivisch auf einen Würfel. Wenn das Sichtvolumen (das ein abgeschnittener Pyramidenstumpf ist) in den Einheitswürfel transformiert wird, dann verändert sich dabei doch auch die Geometrie des Würfels und aus der perspektivischen würde wieder eine Orthogonalprojektion werden?!
Du musst irgendwie deine Vertices auf die Bildebene projizieren. Der Einheitswürfel ist dabei ja eigentlich das was am Ende rauskommt, nämlich die homogenisierten Gerätekoordinaten wo dein Viewport eben von [-1, 1] geht. Wenn du jetzt deine Vertices nach deiner Zentralprojektion auf die Bildebene bringst dann berechnest du eben diese [-1, 1] Koordinaten die angeben wo im Viewport deine Vertices liegen. Dies ist äquivalent mit der Vorstellung dass dein View Frustrum in einen Einheitswürfel transformiert wird. Das sind einfach zwei geometrische Interpretationen für ein und den selben Vorgang.
Der Vorteil wenn man das alles so allgemein Formuliert liegt darin dass das ganze so für alle möglichen Projektionsformen funktioniert die man mit homogenen Koordinaten darstellen kann und nicht nur für eine bestimmte...
Punkt 2 ist die w-Koordinate. Wieso ist garantiert, dass die Vertizes nach der Division durch w in [-1,1] liegen? Offensichtlich ist das doch nur die Homogenisierung von 4x4 Vektoren?!
Alles was sichtbar ist liegt in [-1, 1], der Rest wird eben geclipped...