Projections And Vanishing Points
Homogene Koordinaten
Punkte
(1)
\begin{align} [x, y, z]^T \rightarrow [wx, wy, wz, w]^T, w \neq 0 \end{align}
Vektoren
(2)
\begin{align} [x, y, z]^T \rightarrow [x, y, z, 0]^T \end{align}
Dehomogenisierung
Durch die letzte Komponente teilen:
(3)
\begin{align} [wx, wy, wz, w]^T \rightarrow [x, y, z, 1]^T \end{align}
Standardprojektion
(4)
\begin{align} [x, y, z]^T \rightarrow \left[ {x \over z}, {y \over z} \right]^T \end{align}
mit Projektionszentrum $[0,0,0]^T$ und Projektionsebene bei $z = -1$.
Als Matrix:
(5)
\begin{align} P = \left( \begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & -1 & 0 \\ \end{array} \right) \end{align}
Nach der Dehomogenisierung ergibt sich mit $v = [wx, wy, wz, w]^T$
(6)
\begin{align} Pv = [wx, wy, wz, -wz]^T \rightarrow [-{x \over z}, - {x \over z}, 1, -1]^T \end{align}
Bei dieser Matrix wird davon ausgegangen, daß der Betrachter in Richtung der negativen z-Achse guckt und die Bildebene orthogonal zur z-Achse ist. Über den Umweg der homogegen Koordinaten wird ein Punkt perspektivisch verkürzt, je weiter er vom Betrachter weg ist, bzw. je kleiner seine z-Koordinate ist (nicht vergessen, negative z-Achse).
Generelle Projektion I
Gegeben:
- Fokaldistanz $\delta$
- Normale der Projektionsebene $n$
- Zentrum der Projektion ist $[0,0,0]^T$
Bildchen malen!
Die Projektion $q'$ von $q$ wird mit
(7)
\begin{align} q' = {\delta \over n^Tq} q, \end{align}
berechnet. Als Matrix:
(8)
\begin{align} P_I = \left( \begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ \frac{n_x}{\delta} & \frac{n_y}{\delta} & \frac{n_z}{\delta} & 0 \\ \end{array} \right) \end{align}
Der Faktor ${\delta \over n^Tq}$ befindet sich dann als Kehrwert in der 4. Komponente, eine Dehomogenisierung liefert das gewünschte Ergebnis.
Generelle Projektion II
Gegeben:
- Projektionsebene durch den Ursprung, Normalenvektor $n$
- Fokaldistanz $\delta$
- Zentrum der Projektion ist $-\delta n$
Bildchen!
Zuerst wird die orthogonale Projektion von $q$ auf die Projektionsebene berechnet:
(9)
\begin{equation} q' = q - nn^Tq = (I-nn^T)q \end{equation}
Die Projektion $q''$ von $q$ ist dann
(10)
\begin{align} q'' = \alpha q' \end{align}
Mit
(11)
\begin{eqnarray} {a \over b} = {a' \over b'}, {a \over b} = {\delta \over n^Tq}, \\ {a' \over b'} = {\delta \over n^Tq}, \\ \alpha = {a' \over a' + b'} = {\delta \over \delta + n^Tq}. \end{eqnarray}
Also
(12)
\begin{eqnarray} q'' = q' / {\delta + n^Tq \over \delta } = q' / \left({n^Tq \over \delta }+1 \right) \\ = (I-nn^T)q / \left({n^Tq \over \delta }+1 \right). \end{eqnarray}
Als Matrix
(13)
\begin{align} P_{II} = \left( \begin{array}{clc} & 0 \\ (I - nn^T) & 0 \\ & 0 \\ {n^T \over \delta } & 1 \\ \end{array} \right) \end{align}
oder ausgeschrieben
(14)
\begin{align} M = \left( \begin{array}{cccc} 1-n_x^2 & n_x\cdot n_y & n_x\cdot n_z & 0 \\ n_x\cdot n_y & 1-n_y^2 & n_y\cdot n_z & 0 \\ n_x\cdot n_z & n_y\cdot n_z & 1-n_z^2 & 0 \\ \frac{n_x}{\delta} & \frac{n_y}{\delta} & \frac{n_z}{\delta} & 1 \\ \end{array} \right) \end{align}
Die obere 3x3-Matrix berechnet $p'$ und die untere Zeile den Nenner, um mit einer Dehomogenisierung $p''$ zu erhalten.
Fluchtpunkte
Wie verhält sich eine Gerade
(15)
\begin{align} L(\lambda) = \left( \begin{array}{c} x+\lambda \Delta x \\ y+\lambda \Delta y \\ z+\lambda \Delta z \\ \end{array} \right), \end{align}
wenn wir $\lambda \to \infty$ streben lassen?
Die Standardprojektion der Geraden:
(16)
\begin{align} PL(\lambda)= \left( \begin{array}{c} {x+\lambda \Delta x \over z+\lambda \Delta z}\\ {y+\lambda \Delta y \over z+\lambda \Delta z}\\ \end{array} \right) \end{align}
Für die $x$-Koordinate gilt:
- $\Delta z = 0$:
(17)
\begin{align} \lim_{\lambda\to\infty} {x+\lambda \Delta x \over z} \to \infty \end{align}
- $\Delta z \not= 0$:
(18)
\begin{align} \lim_{\lambda\to\infty}{ {1\over\lambda}x+ \Delta x \over{1\over\lambda} z+ \Delta z} \to {\Delta x \over \Delta z} \end{align}
Für die $y$-Koordinate entsprechend.
Fluchtpunkte kann man auch konstruieren, indem die betrachtete Gerade parallelverschoben wird, bis die das Projektionszentrum schneidet. Der Fluchtpunkt ist dann der Schnitt der Geraden mit der Bildebene.