Pyramidenstumpf zu Würfel transformieren
-
Because you know that the transformation of z into z' does not depend on x or y in any way, you know that you want a formula of the form z'z = pz + q, where p and q are constants.
wie kommt er drauf, dass z'z = pz+q ist?
-
so wie ich das sehe kann ich nur sagen, das eine Skalierung und eine Verschiebung stattfinden muss:
z'=s*z+t(1-s)+t
z'=s*z+t-s*t+toh... ich sehe jetzt warum - hat er aber schlecht erklärt
-
war etwas voreilig - habs doch noch nicht kapiert... wie kommt er auf z'z = pz+q?
-
Hey, entschuldigung dass ich sowas frage, aber kannst du mir mal erklären, was
r, l, d, t, b, f, n sind?Interessiert mich einfach.
-
Guck Dir das Bild an.
-
Sgt. Nukem schrieb:
Guck Dir das Bild an.
Ah okay, stimmt, hab das Bild nicht gesehen. Sind also Koordinaten
-
Hey, entschuldigung dass ich sowas frage, aber kannst du mir mal erklären, was ...
left, right, bottom, top, far, near
mit diesen 6 Größen ist das Sichtvolumen (Pyramidenstumpf = Frustum) eindeutig festgelegt
-
Wenn du einen Punkt aus dem Intervall [n,f] auf [-1,1] (oder [0,1] wie bei D3D) abbilden willst, erfordert das eine Skalierung und Translation. Das z skaliert das Intervall als ein Intervall der "Länge" 1 und das q verschiebt es so, dass der Mittelpunkt im Koordinatenursprung (des View Space) liegt.
Wenn n=0, dann bräuchtest du nur eine Skalierung und wenn f-n=2, dann nur eine Translation.
-
aber warum steht auf der linken seite z * z' ? und nicht nur z'=...
-
Würde ich [n,f] auf [0,1] transformieren wollen würde ich das wie folgt machen:
Strecke [n,f] am Punkt n + (f-n)/2 auf 1 Skalieren. Anschließend alles um 0,5 nach rechts verschieben:
z' = [z - (n + \frac{f-n}{2})]* \frac{1}{f-n}+ \frac{1}{2}
wie komm ich jetzt drauf, dass z'z= p z + q ist...?
-
Probe:
z' = [n - (n + \frac{f-n}{2})] * \frac{1}{f-n} + \frac{1}{2}
-
z' = [f-(n+\frac{f-n}{2})]*\frac{1}{f-n}+\frac{1}{2}
z'=[f-n-\frac{f-n}{2}]*\frac{1}{f-n}+\frac{1}{2}
-
soll ich dich alleinunterhalter vielleicht ins matheforum verschieben? (auf wunsch?)
-
soll ich dich alleinunterhalter vielleicht ins matheforum verschieben? (auf wunsch?)
ja - verschieb mich
-
Dieser Thread wurde von Moderator/in rapso aus dem Forum Spiele-/Grafikprogrammierung in das Forum Mathematik verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
habe gerade ein Testprogramm für die angegebene Projektionsmatrix geschrieben:
http://turing.fh-landshut.de/~jamann/wireframe.PNGEs funktioniert - ich weiß bloß noch nicht warum
-
Die Projektionsmatrix transformiert die z-Koordinate eines Punktes im View Space NICHT auf das Intervall [0,1], sondern erstmal in das Intervall [0,w] bzw. [0,z]. (Das siehst du auch daran, dass in der Frustum Clipping Stage der D3D FFP Punkte verworfen werden, deren Punkte nicht im Intervall 0<=z<=w liegen).
Erst die anfolgende homogene Division bildet dann das Intervall [0,z] auf [0,1] ab.
-
@interpreter: erst mal danke - du hast mir schon ein schönes Stück weitergeholfen, aber ich habs immer noch nicht ganz kapiert
dass in der Frustum Clipping Stage der D3D FFP Punkte verworfen werden, deren Punkte nicht im Intervall 0<=z<=w liegen
Die FFP (Fixed Function Pipeline) verwirft die Punkte nicht, sondern diese Koordinaten wandern in den Clipper, aber das meintest du wahrscheinlich
Bisher habe ich immer angenommen, dass die Transformation von [n,f] nach [0,1] liniear wäre. Ist sie aber anscheinend nicht.
Die Projektionsmatrix transformiert die z-Koordinate eines Punktes im View Space NICHT auf das Intervall [0,1], sondern erstmal in das Intervall [0,w] bzw. [0,z].
wie? wie projeziert man das Interval [n,f] auf [0,w]?
laut Projektionsmatrix:
wenn ich jetzt z=f setze, dann müsste doch f rauskommen?
z' wird durch die Homogene Koordinate, also z geteilt:
Damit habe ich die Form:
also eine Hyperbel...
-
Hier wird die Transformation von [n,f] auf [0,1] aus einer Hyperbel Funktion hergeleitet:
http://sebastian.g3th.net/files/papers/projektion.doc
-
wenn man mit z multipliziert kommt man auf die Form: z'z = pz+q *lol*