Autor: Jiří Hnídek / jiri.hnidek@tul.cz
Definujeme polohu kamery: $K = [k_{x}, k_{y}, K_{z}]$ a bod na který se kamera dívá: $C = [c_{x}, c_{y}, c_{z}]$
Tyto dva body určují směr pozorování: $\vec{l} = C - K = (l_{x}, l_{y}, l_{z})$.
Dále musí mít kamera určený směr vzhůru: $\vec{u} = (u_{x}, u_{y}, u_{z})$ a vektor ukazující směrem doprava:
$$ \vec{p} = \vec{l} \times \vec{u} = (p_{x}, p_{y}, p_{z}) $$Při aplikování transformační matice na vektory kamery musí platit následující vztahy
Předchozí tři vztahy můžeme přepsat do následující matice:
$$ \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} = T_{cam} \begin{bmatrix} p_{x} & h_{x} & -l_{x} & 0 \\ p_{y} & h_{y} & -l_{y} & 0 \\ p_{z} & h_{z} & -l_{z} & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} = T_{cam} M_{cam} $$Ze vztahu je zřejmé, že $T_{cam} = M_{cam}^{-1}$ a jelikož je matice $T_{cam}$ ortonormální, tak řešení inverzní matice se zjednoduší na $T_{cam} = M_{cam}^{T}$
Výsledný vztah transformační matice má následující vztah:
$$ T_{cam} = \begin{bmatrix} p_{x} & p_{y} & p_{z} & 0 \\ h_{x} & h_{y} & h_{z} & 0 \\ -l_{x} & -l_{y} & -l_{z} & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} $$Z promítání jsou vyřazeny plošky, které nebudou promítnuty na průmětnu, protože jsou mimo pohledový řetězec.
Body z 3D prostoru jsou touto transformací přeneseny na stínítko. V praxi se používají dva způsoby promítání:
Matice rovinného promítání na stínítko kamery ležící s rovinou $XY$ rovnoběžně ve vzdálenosti $z_{0}$:
$$ T_{XY} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & z_{0} \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} $$Perspektivní promítání více připomíná způsob jakým vnímáme okolní reálný svět.
Matice perspektivního promítání na stínítko kamery ležící s rovinou $XY$ rovnoběžně ve vzdálenosti $z_{0}$:
$$ T_{persp} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 1/z_{0} & 0 \\ \end{bmatrix} $$