model
world
camera
\[ \matrix{ r_x & u_x & -v_x & e_x \\ r_y & u_y & -v_y & e_y \\ r_z & u_z & -v_z & e_z \\ 0 & 0 & 0 & 1 } \]
\[ \matrix{ r_x & u_x & -v_x & e_x \\ r_y & u_y & -v_y & e_y \\ r_z & u_z & -v_z & e_z \\ 0 & 0 & 0 & 1 }^{-1} \;=\; \matrix{ r_x & r_y & r_z & 0 \\ u_x & u_y & u_z & 0 \\ -v_x & -v_y & -v_z & 0 \\ 0 & 0 & 0 & 1 } \cdot \matrix{ 1 & 0 & 0 & -e_x \\ 0 & 1 & 0 & -e_y \\ 0 & 0 & 1 & -e_z \\ 0 & 0 & 0 & 1 } \]
Image from Wikipedia
\[ \matrix{ 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 } \]
\[ \matrix{ \frac{2}{r-l} & 0 & 0 & 0 \\ 0 & \frac{2}{t-b} & 0 & 0 \\ 0 & 0 & \frac{-2}{f-n} & 0 \\ 0 & 0 & 0 & 1 } \cdot \matrix{ 1 & 0 & 0 & -\frac{l+r}{2} \\ 0 & 1 & 0 & -\frac{b+t}{2} \\ 0 & 0 & 1 & -\frac{-n-f}{2} \\ 0 & 0 & 0 & 1 } \;=\; \matrix{ \frac{2}{r-l} & 0 & 0 & -\frac{l+r}{r-l} \\ 0 & \frac{2}{t-b} & 0 & -\frac{b+t}{t-b} \\ 0 & 0 & \frac{-2}{f-n} & -\frac{n+f}{f-n} \\ 0 & 0 & 0 & 1 } \]
\[ \vector{x\\y\\z} \;\mapsto\; \vector{x \cdot \frac{-d}{z} \\ y \cdot \frac{-d}{z} \\ -d} \quad\stackrel{?}{\longleftrightarrow}\quad \matrix{ ? & ? & ? & ? \\ ? & ? & ? & ? \\ ? & ? & ? & ? \\ ? & ? & ? & ? } \cdot \vector{x\\y\\z\\1} \]
Do not put \(z\) in the matrix!
\[ \vector{x\\y\\z} \;\mapsto\; \vector{x \cdot \frac{-d}{z} \\ y \cdot \frac{-d}{z} \\ -d} \quad\longleftrightarrow\quad \matrix{ 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & -1/d & 0 } \cdot \vector{x\\y\\z\\1} \;=\; \vector{x\\y\\z\\-z/d} \;\cong\; \vector{x \frac{-d}{z} \\ y \frac{-d}{z} \\ -d\\ 1} \]
How to transform \((x,y,z)\)?
\[ \begin{eqnarray*} x &\mapsto& \left( x \frac{n}{-z} - \frac{l+r}{2} \right) \cdot \frac{2}{r-l} \\[2mm] y &\mapsto& \left( y \frac{n}{-z} - \frac{b+t}{2} \right) \cdot \frac{2}{t-b} \end{eqnarray*} \]
Matrix representation:
\[ \matrix{ \frac{2n}{r-l} & 0 & \frac{l+r}{r-l} & 0 \\ 0 & \frac{2n}{t-b} & \frac{b+t}{t-b} & 0 \\ ? & ? & ? & 0 \\ 0 & 0 & -1 & 0 } \]
How to transform \((x,y,z)\)?
\[ \begin{eqnarray*} z &\mapsto& \frac{a \cdot z + b}{-z} \end{eqnarray*} \]
such that
\[-n \mapsto -1 \;,\quad -f \mapsto +1\]
This leads to
\[ a = -\frac{n+f}{f-n} \;,\quad b = -\frac{2nf}{f-n} \]
Matrix representation:
\[ \matrix{ \frac{2n}{r-l} & 0 & \frac{l+r}{r-l} & 0 \\ 0 & \frac{2n}{t-b} & \frac{b+t}{t-b} & 0 \\ 0 & 0 & -\frac{n+f}{f-n} & -\frac{2nf}{f-n} \\ 0 & 0 & -1 & 0 } \]
Check frustum corners, e.g.:
\[ \begin{eqnarray*} \transpose{(l,b,-n)} &\mapsto& \transpose{(-1,-1,-1)} \\[2mm] \transpose{(r,t,-n)} &\mapsto& \transpose{(+1,+1,-1)} \\[2mm] \transpose{(l\frac{f}{n},b\frac{f}{n},-f)} &\mapsto& \transpose{(-1,-1,+1)} \\[2mm] \transpose{(r\frac{f}{n},t\frac{f}{n},-f)} &\mapsto& \transpose{(+1,+1,+1)} \\[2mm] \end{eqnarray*} \]
Matrix representation:
\[ \matrix{ \frac{2n}{r-l} & 0 & \frac{l+r}{r-l} & 0 \\ 0 & \frac{2n}{t-b} & \frac{b+t}{t-b} & 0 \\ 0 & 0 & -\frac{n+f}{f-n} & -\frac{2nf}{f-n} \\ 0 & 0 & -1 & 0 } \]
Simple scaling of normalized device coordinates \[ [-1,1] \times [-1,1] \times [-1,1] \]
to window pixel coordinates \[ [l, l+w] \times [b,b+h] \times [0,1] \]Matrix representation \[ \matrix{ \frac{w}{2} & 0 & 0 & \frac{w}{2}+l \\ 0 & \frac{h}{2} & 0 & \frac{h}{2}+b \\ 0 & 0 & \frac{1}{2} & \frac{1}{2} \\ 0 & 0 & 0 & 1 } \]
Model transformation \(\mat{M} = \mat{R}_y\of{\cdot} \, \mat{T}_z\of{\cdot} \, \mat{S}_x\of{\cdot}\)