prev up inhalt next

View Mapping

Statt nun das View Volume aus dem VRC direkt auf den Bildschirm zu projizieren, wird im Programm eine weitere Transformation durchgeführt, die nicht nur zur Effizienzsteigerung des Algorithmus führt, sondern auch die Projektion der Szene auf die Bildebene erleichert: Der Bildraum wird in einen zur Bildebene normal ausgerichteten Einheitswürfel $(0 \leq x \leq 1; 0 \leq y \leq 1; 0 \leq z \leq 1)$ umgewandelt. Anstelle mehrerer unterschiedlicher Projektionen muß so anschließend nur noch die orthogonale Parallelprojektion auf die Ebene $z=0$ durchgeführt werden. Das sogenannte View Mapping wird deshalb auch als Ausgabe auf einen normierten Bildschirm bezeichnet. Das Koordinatensystem, in dem sich der Einheitswürfel befindet, heißt Normalized Projection Coordinate System (NPC). Der Betrachterstandpunkt befindet sich im Unendlichen auf der positiven $z$-Achse und hat die homogenen Koordinaten $(0, 0, 1, 0)$. Vom Betrachter aus gesehen liegt im NPC der Punkt $(0,0,0)$ ``links unten hinten'' und $(1,1,1)$ ``rechts oben vorne''.


Abbildung 15.6: View Mapping

Bei der perspektivischen Projektion wird in einem ersten Schritt der Pyramidenstumpf, der den Bildraum darstellt und frustum genannt wird, auf einen regelmäßigen Pyramidenstumpf abgebildet. Dessen Grundfläche ist ein Quadrat, das mit jeder Seitenfläche einen Winkel von 45$^\circ$ einschließt. Dabei werden die $z$-Koordinaten nicht und die $x$- und $y$-Koordinaten proportional zur $z$-Koordinate verändert, was einer Scherung an der $z$-Achse entspricht. Im zweiten Schritt wird der regelmäßige Pyramidenstumpf in den normierten Einheitswürfel transformiert. Dazu müssen die $x$- und $y$-Koordinaten proportional zu den reziproken $z$-Werten skaliert werden. Die Front Plane entspricht im NPC der Ebene $z = 1$ und die Back Plane der Ebene $z=0$.

Beide Schritte werden im Programm zu einer Transformationsmatrix zusammengefaßt. Bei deren Anwendung auf die homogenen Koordinaten ist zu beachten, daß die resultierenden Punkte im allgemeinen $w$-Werte ungleich 1 haben, die affinen Koordinaten also erst nach der Division durch $w$ vorliegen. Außerdem ist diese Abbildung nur bezüglich der $x$- und $y$-Koordinaten linear. In $z$-Richtung werden die Werte durch die Scherung im zweiten Schritt reziprok verzerrt, d.h., äquidistante Punkte längs der $z$-Achse im VRC häufen sich im NPC bei $z=0$ nahe der Back Plane.

Zur Erleichterung der Herleitung wird zunächst das Koordinatensystem so transformiert, daß der $PRP$ im Ursprung sitzt. Danach wird das Koordinatensystem an der $ x y $-Ebene gespiegelt, indem die $z$-Koordinaten mit -1 multipliziert werden. Danach ist das Koordinatensystem linkshändig. Es seien $d_{min}, d$ und $d_{max}$ die Abstände der Frontplane, Bildebene und Backplane vom Augenpunkt.

Zur Durchführung von Punkt 3.) der Viewing Pipeline wird zunächst die abgeschnittene Pyramide (= frustum) transformiert in einen symmetrischen Pyramidenstumpf mit quadratischer Grundfläche und Kanten unter 45$^\circ$.


Abbildung 15.7: Überführung in Pyramidenstumpf

Es müssen also die $y$-Koordinaten proportional zur $z$-Koordinate verändert werden. Dies entspricht einer Scherung an der $z$-Achse, so daß die Achse vom $PRP$ zum Zentrum des ViewWindows mti der $z$-Achse zusammenfällt. Zusätzlich wird in $y$-Richtung so skaliert, daß die Grundseite des entstandenen Pyramidenstumpfs eine Kantenlänge von $2d$ bekommt:

\begin{eqnarray*}
y'& = & k_{1} \cdot y + k_{2} \cdot z \\
z'& = &z
\end{eqnarray*}



Punkt $(y_{\max}, d)$ soll abgebildet werden auf $(d, d)$;
Punkt $(y_{\min}, d)$ soll abgebildet werden auf $(-d, d)$.

Durch Lösen des Gleichungssystems

\begin{eqnarray*}
d& =& k_{1} \cdot y_{\max} + k_{2} \cdot d\\
-d& =& k_{1} \cdot y_{\min} + k_{2} \cdot d
\end{eqnarray*}



erhält man

\begin{displaymath}
k_1 = {\displaystyle 2d \over \displaystyle y_{\max} - y_{\m...
...le y_{\max}+ y_{\min}\over
\displaystyle y_{\max} - y_{\min}}
\end{displaymath}

Analoge Überlegungen für die $x$-Werte ergibt:

\begin{displaymath}
k_1 = {\displaystyle 2d\over \displaystyle x_{\max} - x_{min...
...yle x_{\max} + x_{\min}\over \displaystyle x_{max} - x_{min} }
\end{displaymath}

Als nächstes wird die regelmäßige Pyramide in den Einheitswürfel $ (0 \leq x \leq 1, 0 \leq y \leq 1, 0 \leq z \leq 1)$ transformiert. Die front plane entspricht der Ebene $z=0$ und die back plane der Ebene $z = 1$.


Abbildung 15.8: Überführung in Einheitswürfel

Da die $y$-Werte proportional zu den reziproken $z$-Werten skaliert werden müssen, ergibt sich als Transformation

\begin{eqnarray*}
y'& =& k_{1} + k_{2} \cdot \frac{y}{z}\\
z'& =& k_{3} + k_{4} \cdot \frac{1}{z}
\end{eqnarray*}



Der Kehrwert von $z$ im Term zu $y'$ ist nur möglich, indem durch einen geeigneten Eintrag in der vierten Zeile der noch zu konstruierenden Transformationsmatrix erreicht wird, dass die vierte Komponente des transformierten Punktes den Wert $z$ enthält. Bei der üblichen Auswertung einer homogenen Koordinate wird dann durch $z$ geteilt. Durch diesen Trick müssen aber neben dem Term für $y'$ und dem für $x'$ auch der Term zu $z'$ den Kehrwert von $z$ eingebaut bekommen.

Punkt $(d_{\max}, d_{\max})$ soll abgebildet werden auf $(1, 1)$,
Punkt $(-d_{\min}, d_{\min})$ soll abgebildet werden auf $(0,0)$.
Durch Lösen des Gleichungssystems

\begin{eqnarray*}
1&=&k_{1} + k_{2}\cdot{\displaystyle d_{\max}\over \displaysty...
... k_{2}\cdot{\displaystyle -d_{\min}\over \displaystyle d_{\min}}
\end{eqnarray*}



erhält man

\begin{eqnarray*}
k_{1}&= {\displaystyle 1 \over \displaystyle 2},\ \ \ \ k_{2}&=
{\displaystyle 1 \over \displaystyle 2} .
\end{eqnarray*}



Durch Lösen des Gleichungssystems

\begin{eqnarray*}
1&=&k_{3} + k_{4} \cdot {\displaystyle 1\over \displaystyle d_...
..._{3} + k_{4} \cdot {\displaystyle 1\over \displaystyle d_{\min}}
\end{eqnarray*}



erhält man

\begin{eqnarray*}
k_{3}& = {\displaystyle{ d_{\max}} \over \displaystyle{ d_{\ma...
...e d_{\min}\cdot
d_{\max}\over \displaystyle d_{\max}-d_{\min}} .
\end{eqnarray*}



Die $x$-Werte werden analog zu den $y$-Werten skaliert. Insgesamt ergibt sich somit

\begin{eqnarray*}
x'& =& {\displaystyle 1 \over \displaystyle 2} +{\displaystyle...
...{\max}- d_{\min}} \cdot{\displaystyle 1 \over \displaystyle z} .
\end{eqnarray*}



Zwar wird hierdurch die Szene im vorderen $z$-Bereich nicht-linear gestaucht, zur Bestimmung der Sichtbarkeit reichen die ermittelten $z$-Werte jedoch aus, da ihre Ordnung erhalten bleibt.

Durch Verknüpfen der beiden letzten Transformationen erhält man in Schritt 3.) als Transformationsmatrix

\begin{displaymath}
\left[ \begin{array}{cccc}
\displaystyle{ d} \over \displays...
...tyle d_{\max} - d_{\min}}\\
\\
0 & 0&1&0
\end{array} \right]
\end{displaymath}

die den sichtbaren Teil der Szene in den Einheitswürfel transformiert.

Um wieder ein rechtshändiges Koordinatensystem zu erhalten, wird zunächst das Koordinatensystem so transformiert, daß die Back Plane in die $ x y $-Ebene verschoben wird. Abschließend wird wieder an der $ x y $-Ebene gespiegelt.


prev up inhalt next