Pyramidenstumpf zu Würfel transformieren
-
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*
-
so jetzt weiß ich es
- man nimmt eine Hyperlfunktion wegen dem z-Buffer (damit enstehen weniger Artefakte in der Nähe der Neare Clipping Plane, aber dafür mehr im Bereich der Far Clipping Plane, was aber meistens weniger schlimm ist)
siehe dazu:
http://de.wikipedia.org/wiki/Z-BufferVom Prinzip her dürfte es egal sein wie man die z-Werte transformiert, da sie ja eh wegfallen - hauptsache die z-Werte der Eckpunte, die sich im Frustum befinden werden auf das Interval [0,1] abgebildet, damit sie beim Clippen nicht einfach verschwinden
Lineare Transformation von [n,f] auf [-1,1]:
-
zum nachlesen für alle Interesierte
http://turing.fh-landshut.de/~jamann/PerspektivischeProjektion.pdf