Projektion 3D - 2D
-
Hallo,
ich habe seit einiger Zeit ein Problem mit der Projektion in der 3D-Programmierung.
Wenn ich einen 3D-Vektor auf eine 2D-Ebene projizieren möchte, muss ich ja die x bzw. y-Koordinate durch die z-Koordinate teilen.
Aber was ist jetzt wenn die z-Koordinate kleiner gleich 0 ist? Die Division sorgt ja dafür, dass die Punkte, je größer die z-Koordinate wird, immer näher zum Fluchtpunkt rücken. Das tun sie jedoch auch bei einer negativen z-Koordinate. Dabei ist ja dort eher das Gegenteil der Fall. Ich habe unter anderem schon versucht bei einer negativen z-Koordinate anstatt einer Division eine Multiplikation auszuführen. Dabei "starten" die 2dimensionalen Koordinaten jedoch erst beim Fluchtpunkt und entfernen sich danach wieder. Das ist also auch keine Lösung.
Wie projiziere ich also bei z-Koordinaten die kleiner oder gleich 0 sind?
Vielen Dank schonmal für die Hilfe!
-
Clipping
-
Taeli schrieb:
Hallo,
ich habe seit einiger Zeit ein Problem mit der Projektion in der 3D-Programmierung.
Wenn ich einen 3D-Vektor auf eine 2D-Ebene projizieren möchte, muss ich ja die x bzw. y-Koordinate durch die z-Koordinate teilen.
Aber was ist jetzt wenn die z-Koordinate kleiner gleich 0 ist? Die Division sorgt ja dafür, dass die Punkte, je größer die z-Koordinate wird, immer näher zum Fluchtpunkt rücken. Das tun sie jedoch auch bei einer negativen z-Koordinate. Dabei ist ja dort eher das Gegenteil der Fall.
Nö, das passt schon. Je weiter weg, desto kleiner. In welcher Richtung ist dabei egal. Z = 0 ist halt ein Sonderfall.
Wobei die Projektion von Punkten mit Z < 0 soweiso selten Sinn macht. Ich meine, kannst du sehen was hinter dir ist? Kann eine Kamera filmen was hinter ihr ist? Nö. Also weglassen.
Sinnvollerweise kann man sogar alles weglassen was vor der Frontlinse liegt, und da die Frontlinse Z > 0 hat, ist alles in Butter, und es gibt keinen lästigen Sonderfall Z = 0 mehr.Ich habe unter anderem schon versucht bei einer negativen z-Koordinate anstatt einer Division eine Multiplikation auszuführen. Dabei "starten" die 2dimensionalen Koordinaten jedoch erst beim Fluchtpunkt und entfernen sich danach wieder. Das ist also auch keine Lösung.
Jo weil es Quatsch ist, siehe oben.
Wie projiziere ich also bei z-Koordinaten die kleiner oder gleich 0 sind?
Gar nicht.
-
Erstmal danke für die schnellen Antworten!
Weglassen geht aber leider nicht, natürlich kann ich nichts sehen was hinter mir ist, aber es kann eben sein, dass z.B. zwei z-Koordinaten einer rechteckigen Fläche negativ sind und zwei positiv. Man sieht dann also nur einen Teil der Fläche. Ich brauch ja dann aber trotzdem die entsprechenden Koordinaten, um die dann mit den anderen verbinden zu können.
Wie stelle ich dann also z.B. eine Wiese dar, auf der ich in der Mitte stehe?
Ein Teil der Wiese wäre dann praktisch hinter mir, wäre also außerhalb des Sichtfeldes, aber die andere Hälfte würde ich eben sehen. Trotzdem brauche ich aber zur Darstellung die Koordinaten des Teils der hinter mir ist.
-
Der Trick ist eigentlich, dass die projektion der letzte Schritt ist und du alle anderen Berechnungen (clipping etc) davor machst. Das heißt, du musst deine Geometrie zuerst in kamerakoordinaten umwandeln und dann bestimmen, was vor oder hinter der Kamera ist. Und dann zerlegst du die Dreiecke die sowohl drinnen als auch draussen sind in kleinere Dreiecke mit denen du umgehen kannst.
-
Er kann auch die Near Clipping-Plane in den World-Space transformieren und dann dort clippen.
Bzw. gleich in den Object-Space.
-
kann er das nicht auch über ganz normale Projektionsmatrizen machen?
vvT
vTv mal den Vector den er auf V abbilden will.