next up previous contents
Nächste Seite: Clipping bezüglich des Sichtvolumens Aufwärts: 3-dimensionale Darstellung Vorherige Seite: Klassifizierung der Projektionen   Inhalt

Unterabschnitte

Kanonische Sichtvolumen

Für eine Implementierung der Projektion und der Clipping-Operationen (auch bei obiger Parallelprojektion) ist es zweckmäßig, den sichtbaren Bereich der Szene als ein kanonisches Sichtvolumen zu repräsentieren, d.h.

Parallelprojektion

Berechnung eines kanonischen Sichtvolumens für die Parallelprojektion


\begin{displaymath}K_{\mathrm{par}}=S\cdot T\cdot V_{\mathrm{par}}\cdot R_{uvn}\cdot T_c \end{displaymath}

wobei

\begin{displaymath}T_c =
\left(\begin{array}{cccc}
1 & 0 & 0 & -c_x \\
0 & 1 & ...
...-c_y \\
0 & 0 & 1 & -c_z \\
0 & 0 & 0 & 1
\end{array}\right)
\end{displaymath}

den Ursprung in den Kamerapunkt verschiebt,

\begin{displaymath}R_{uvn} =
\left(\begin{array}{cccc}
u_0 & v_1 & v_2 & 0 \\
v...
...0 \\
n_0 & n_1 & n_2 & 0 \\
0 & 0 & 0 & 1
\end{array}\right)
\end{displaymath}

die Weltkoordinaten in Kamerakoordinaten transformiert,

\begin{displaymath}V_{\mathrm{par}} =
\left(\begin{array}{cccc}
1 & 0 & -p_x/p_z...
...p_z & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{array}\right)
\end{displaymath}

durch eine Scherung die schiefwinklige Projektion in eine orthogonale umwandelt,

\begin{displaymath}T=
\left(\begin{array}{cccc}
1 & 0 & 0 & -xw_{min} \\
0 & 1 ...
..._{min} \\
0 & 0 & 1 & -F \\
0 & 0 & 0 & 1
\end{array}\right)
\end{displaymath}

den Ursprung in eine Ecke des Quaders verschiebt,

\begin{displaymath}S=
\left(\begin{array}{cccc}
1/(xw_{max}-xw_{min}) & 0 & 0 & ...
...0 \\
0 & 0 & 1/(B-F) & 0 \\
0 & 0 & 0 & 1
\end{array}\right)
\end{displaymath}

den Quader zum Einheitswürfel skaliert.

Zentralprojektion

Berechnung eines kanonischen Sichtvolumens für die Zentralprojektion

Betrachten wir folgenden etwas vereinfachten Fall, d.h. der Fokuspunkt der Projektion liegt auf der $n$-Achse des Kamerakoordinatensystems:


\begin{displaymath}K_{per}=S_2\cdot S_1\cdot V_{pre}\cdot T_r\cdot R_{uvn}\cdot T_c \end{displaymath}

wobei

\begin{displaymath}T_r =
\left(\begin{array}{cccc}
1 & 0 & 0 & -r_x \\
0 & 1 & ...
...-r_y \\
0 & 0 & 1 & -r_z \\
0 & 0 & 0 & 1
\end{array}\right)
\end{displaymath}

den Ursprung in den Fokuspunkt verschiebt (stimmt die Kameraposition mit dem Fokuspunkt überein, was wohl der in der Praxis verwendete Fall ist, dann braucht nicht verschoben zu werden, d.h. $T_r=I$)

\begin{displaymath}V_{pre} =
\left(\begin{array}{cccc}
1 & 0 & a & 0 \\
0 & 1 & b & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{array}\right)
\end{displaymath}

mit

\begin{eqnarray*}
a&=&-(c_x+(xw_{\mathrm{min}}+xw_{\mathrm{max}})/2)/c_z \\
b&=&-(c_y+(yw_{\mathrm{min}}+yw_{\mathrm{max}})/2)/c_z
\end{eqnarray*}



durch eine Scherung die Mittellinie des Sichtvolumens in die $z$-Achse ($n$-Achse) transformiert,

\begin{displaymath}S_1=
\left(\begin{array}{cccc}
2c_z/(xw_{\mathrm{max}}-xw_{\m...
...& 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{array}\right)
\end{displaymath}

durch eine $xy$-Skalierung die seitlichen Begrenzungsebenen zu $45^\circ$-Ebenen neigt,

\begin{displaymath}S_2=
\left(\begin{array}{cccc}
1/(c_z+B) & 0 & 0 & 0 \\
0 & ...
...\\
0 & 0 & 1/(c_z+B) & 0 \\
0 & 0 & 0 & 1
\end{array}\right)
\end{displaymath}

die Pyramide zur Einheitspyramide skaliert.

Diese Pyramide kann auch in den Einheitswürfel transformiert werden.

Tun Sie dies!


next up previous contents
Nächste Seite: Clipping bezüglich des Sichtvolumens Aufwärts: 3-dimensionale Darstellung Vorherige Seite: Klassifizierung der Projektionen   Inhalt
© 2004/2005, A. Formella & D. Fellner, Universität Braunschweig