Home » Blogs » Matrix Compendium » Pre-multiplication, left-handed coordinate system as in DirectX® 9

Pre-multiplication, left-handed coordinate system as in DirectX® 9

Fixed function pipeline of DirectX® 9 and previous versions use a pre-multiplication left-handed coordinate system.

Axis in matrix

\begin{array}{c} \begin{bmatrix*}[r] \color{red} \textrm{X-Axis} \rightarrow & \color{red} \mathbf{m_{11}} & \color{red} \mathbf{m_{12}} & \color{red} \mathbf{m_{13}} & \color{gray} m_{14}\\ \color{green} \textrm{Y-Axis} \rightarrow & \color{green} \mathbf{m_{21}} & \color{green} \mathbf{m_{22}} & \color{green} \mathbf{m_{23}} & \color{gray} m_{24}\\ \color{blue} \textrm{Z-Axis} \rightarrow & \color{blue} \mathbf{m_{31}} & \color{blue} \mathbf{m_{32}} & \color{blue} \mathbf{m_{33}} & \color{gray} m_{34}\\ \textrm{Translate} \rightarrow & \mathbf{m_{41}} & \mathbf{m_{42}} & \mathbf{m_{43}} & \color{gray} m_{44}\\ \end{bmatrix*} \end{array}

Translation Transformation

\begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ T_x & T_y & T_z & 1\\ \end{bmatrix}

Scale Transformation

\begin{bmatrix} S_x & 0 & 0 & 0\\ 0 & S_y & 0 & 0\\ 0 & 0 & S_z & 0\\ 0 & 0 & 0 & 1\\ \end{bmatrix}

Rotation Transformation

  • From Euler Angles

\begin{array}{ccc} \textrm{X - Axis} & \textrm{Y - Axis} & \textrm{Z - Axis} \\ \begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & \cos(\theta) & \sin(\theta) & 0\\ 0 & -\sin(\theta) & \cos(\theta) & 0\\ 0 & 0 & 0 & 1\\ \end{bmatrix} & \begin{bmatrix} \cos(\theta) & 0 & -\sin(\theta) & 0\\ 0 & 1 & 0 & 0\\ \sin(\theta) & 0 & \cos(\theta) & 0\\ 0 & 0 & 0 & 1\\ \end{bmatrix} & \begin{bmatrix} \cos(\theta) & \sin(\theta) & 0 & 0\\ -\sin(\theta) & \cos(\theta) & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1\\ \end{bmatrix} \end{array}

  • From Quaternion

Quaternion defined Q : a + b\mathbf{i} + c\mathbf{j} + d\mathbf{k} = (r, \vec{v}) = (Q_w, Q_x, Q_y, Q_z)

\begin{bmatrix} 1 - 2(Q_y^2 + Q_z^2) & 2(Q_xQ_y + Q_zQ_w) & 2(Q_xQ_z - Q_yQ_w) & 0\\ 2(Q_xQ_y - Q_zQ_w) & 1 - 2(Q_x^2 + Q_z^2) & 2(Q_yQ_z + Q_xQ_w) & 0\\ 2(Q_xQ_z + Q_yQ_w) & 2(Q_yQ_z - Q_xQ_w) & 1 - 2(Q_x^2 + Q_y^2) & 0\\ 0 & 0 & 0 & 1\\ \end{bmatrix}

  • From Axis Angle

Axis angle defined U : \cos(\theta) + \sin(\theta)(\hat{u}_x, \hat{u}_y, \hat{u}_z)

where : ||\hat{u}|| = 1

\begin{bmatrix} (1-c)\hat{u}_x^2 + c & (1-c)\hat{u}_x\hat{u}_y + s\hat{u}_z & (1-c)\hat{u}_x\hat{u}_z - s\hat{u}_y & 0\\ (1-c)\hat{u}_x\hat{u}_y - s\hat{u}_z & (1-c)\hat{u}_y^2 + c & (1-c)\hat{u}_y\hat{u}_z + s\hat{u}_x & 0\\ (1-c)\hat{u}_x\hat{u}_z + s\hat{u}_y & (1-c)\hat{u}_y\hat{u}_z - s\hat{u}_x & (1-c)\hat{u}_z^2 + c & 0\\ 0 & 0 & 0 & 1\\ \end{bmatrix}

Reflection Transformation

  • Axis Plane symmetry

\begin{array}{ccc} \textrm{XY Plane} & \textrm{XZ Plane} & \textrm{YZ Plane} \\ \begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & -1 & 0\\ 0 & 0 & 0 & 1\\ \end{bmatrix} & \begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & -1 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1\\ \end{bmatrix} & \begin{bmatrix} -1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1\\ \end{bmatrix} \end{array}

  • Axial symmetry

\begin{array}{ccc} \textrm{X - Axis} & \textrm{Y - Axis} & \textrm{Z - Axis} \\ \begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & -1 & 0 & 0\\ 0 & 0 & -1 & 0\\ 0 & 0 & 0 & 1\\ \end{bmatrix} & \begin{bmatrix} -1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & -1 & 0\\ 0 & 0 & 0 & 1\\ \end{bmatrix} & \begin{bmatrix} -1 & 0 & 0 & 0\\ 0 & -1 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1\\ \end{bmatrix} \end{array}

  • Central symmetry

\begin{bmatrix} -1 & 0 & 0 & 0\\ 0 & -1 & 0 & 0\\ 0 & 0 & -1 & 0\\ 0 & 0 & 0 & 1\\ \end{bmatrix}

  • Generic plane symmetry

Plane defined P : ax + by + cz + d = 0

\begin{bmatrix} 1-2a^2 & -2ab & -2ac & 0\\ -2ab & 1-2b^2 & -2bc & 0\\ -2ac & -2bc & 1-2c^2 & 0\\ -2ad & -2bd & -2cd & 1\\ \end{bmatrix}

Shear Transformation

\begin{array}{cccc} \textrm{X - Axis} & \textrm{Y - Axis} & \textrm{Z - Axis} & \textrm{General}\\ \begin{bmatrix} 1 & H_y & H_z & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1\\ \end{bmatrix} & \begin{bmatrix} 1 & 0 & 0 & 0\\ H_x & 1 & H_z & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1\\ \end{bmatrix} & \begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ H_x & H_y & 1 & 0\\ 0 & 0 & 0 & 1\\ \end{bmatrix} & \begin{bmatrix} 1 & H_y^x & H_z^x & 0\\ H_x^y & 1 & H_z^y & 0\\ H_x^z & H_y^z & 1 & 0\\ 0 & 0 & 0 & 1\\ \end{bmatrix} \end{array}

Planar Projections Transformation

Orthographic Transformation

l – left coordinate of the orthographic frustum

r – right coordinate of the orthographic frustum

b – bottom coordinate of the orthographic frustum

t – top coordinate of the orthographic frustum

n – distance to the near plane of the orthographic frustum

f – distance to the far plane of the orthographic frustum

w – width of the near plane of the orthographic frustum

h – height of the near plane of the orthographic frustum

  • Clip space \mathbf{z \in \lbrack 0,1 \rbrack}

View Space

Left-handed NDC Space

Right-handed NDC Space

image

image

image

image

\begin{array}{ccc} \textrm{General} & \textrm{Symmetric} & \textrm{Symmetric 2D} \\ \begin{bmatrix} \frac{2}{r-l} & 0 & 0 & 0\\ 0 & \frac{2}{t-b} & 0 & 0\\ 0 & 0 & \frac{1}{f-n} & 0\\ \frac{r+l}{r-l} & \frac{t+b}{t-b} & -\frac{n}{f-n} & 1\\ \end{bmatrix} & \begin{bmatrix} \frac{2}{w} & 0 & 0 & 0\\ 0 & \frac{2}{h} & 0 & 0\\ 0 & 0 & \frac{1}{f-n} & 0\\ 0 & 0 & -\frac{n}{f-n} & 1\\ \end{bmatrix} & \begin{bmatrix} \frac{2}{w} & 0 & 0 & 0\\ 0 & \frac{2}{h} & 0 & 0\\ 0 & 0 & \frac{1}{2} & 0\\ 0 & 0 & \frac{1}{2} & 1\\ \end{bmatrix} \end{array}

  • Clip space \mathbf{z \in \lbrack -1,1 \rbrack}

View Space

Left-handed NDC Space

Right-handed NDC Space

image

image

image

image

\begin{array}{ccc} \textrm{General} & \textrm{Symmetric} & \textrm{Symmetric 2D} \\ \begin{bmatrix} \frac{2}{r-l} & 0 & 0 & 0\\ 0 & \frac{2}{t-b} & 0 & 0\\ 0 & 0 & \frac{2}{f-n} & 0\\ \frac{r+l}{r-l} & \frac{t+b}{t-b} & -\frac{f+n}{f-n} & 1\\ \end{bmatrix} & \begin{bmatrix} \frac{2}{w} & 0 & 0 & 0\\ 0 & \frac{2}{h} & 0 & 0\\ 0 & 0 & \frac{2}{f-n} & 0\\ 0 & 0 & -\frac{f+n}{f-n} & 1\\ \end{bmatrix} & \begin{bmatrix} \frac{1}{w} & 0 & 0 & 0\\ 0 & \frac{1}{h} & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1\\ \end{bmatrix} \end{array}

Perspective Transformation

l – left coordinate of the perspective frustum

r – right coordinate of the perspective frustum

b – bottom coordinate of the perspective frustum

t – top coordinate of the perspective frustum

n – distance to the near plane of the perspective frustum

f – distance to the far plane of the perspective frustum

w – width of the near plane of the perspective frustum

h – height of the near plane of the perspective frustum

\alpha – angle between of left and right frustum planes of the perspective frustum

\beta – angle between of top and bottom frustum planes of the perspective frustum

  • Perspective Transformation \mathbf{\lbrack n,f \rbrack}, Clip Space \mathbf{z \in \lbrack 0,1 \rbrack}

View Space

Left-handed NDC Space

Right-handed NDC Space

image

image

image

image

\begin{array}{ccc} \textrm{Frustum} & \textrm{Symmetric Vertical FOV} & \textrm{Symmetric Horizontal FOV} \\ \begin{bmatrix} \frac{2n}{r-l} & 0 & 0 & 0\\ 0 & \frac{2n}{t-b} & 0 & 0\\ -\frac{r+l}{r-l} & -\frac{t+b}{t-b} & \frac{f}{f-n} & 1\\ 0 & 0 & -\frac{fn}{f-n} & 0\\ \end{bmatrix} & \begin{bmatrix} \frac{w}{h}\cot(\frac{\alpha}{2}) & 0 & 0 & 0\\ 0 & \cot(\frac{\alpha}{2}) & 0 & 0\\ 0 & 0 & \frac{f}{f-n} & 1\\ 0 & 0 & -\frac{fn}{f-n} & 0\\ \end{bmatrix} & \begin{bmatrix} \cot(\frac{\beta}{2}) & 0 & 0 & 0\\ 0 & \frac{h}{w}\cot(\frac{\beta}{2}) & 0 & 0\\ 0 & 0 & \frac{f}{f-n} & 1\\ 0 & 0 & -\frac{fn}{f-n} & 0\\ \end{bmatrix} \end{array}

  • Perspective Transformation infinite far plane \mathbf{\lbrack n,\infty \rbrack}, Clip Space \mathbf{z \in \lbrack 0,1 \rbrack}

View Space

Left-handed NDC Space

Right-handed NDC Space

image

image

image

image

\begin{array}{ccc} \textrm{Frustum} & \textrm{Symmetric Vertical FOV} & \textrm{Symmetric Horizontal FOV} \\ \begin{bmatrix} \frac{2n}{r-l} & 0 & 0 & 0\\ 0 & \frac{2n}{t-b} & 0 & 0\\ -\frac{r+l}{r-l} & -\frac{t+b}{t-b} & 1 & 1\\ 0 & 0 & -n & 0\\ \end{bmatrix} & \begin{bmatrix} \frac{w}{h}\cot(\frac{\alpha}{2}) & 0 & 0 & 0\\ 0 & \cot(\frac{\alpha}{2}) & 0 & 0\\ 0 & 0 & 1 & 1\\ 0 & 0 & -n & 0\\ \end{bmatrix} & \begin{bmatrix} \cot(\frac{\beta}{2}) & 0 & 0 & 0\\ 0 & \frac{h}{w}\cot(\frac{\beta}{2}) & 0 & 0\\ 0 & 0 & 1 & 1\\ 0 & 0 & -n & 0\\ \end{bmatrix} \end{array}

  • Perspective Transformation \mathbf{\lbrack n,f \rbrack}, Reversed Clip Space \mathbf{z \in \lbrack 1,0 \rbrack}

View Space

Left-handed NDC Space

Right-handed NDC Space

image

image

image

image

\begin{array}{ccc} \textrm{Frustum} & \textrm{Symmetric Vertical FOV} & \textrm{Symmetric Horizontal FOV} \\ \begin{bmatrix} \frac{2n}{r-l} & 0 & 0 & 0\\ 0 & \frac{2n}{t-b} & 0 & 0\\ -\frac{r+l}{r-l} & -\frac{t+b}{t-b} & -\frac{n}{f-n} & 1\\ 0 & 0 & \frac{fn}{f-n} & 0\\ \end{bmatrix} & \begin{bmatrix} \frac{w}{h}\cot(\frac{\alpha}{2}) & 0 & 0 & 0\\ 0 & \cot(\frac{\alpha}{2}) & 0 & 0\\ 0 & 0 & -\frac{n}{f-n} & 1\\ 0 & 0 & \frac{fn}{f-n} & 0\\ \end{bmatrix} & \begin{bmatrix} \cot(\frac{\beta}{2}) & 0 & 0 & 0\\ 0 & \frac{h}{w}\cot(\frac{\beta}{2}) & 0 & 0\\ 0 & 0 & -\frac{n}{f-n} & 1\\ 0 & 0 & \frac{fn}{f-n} & 0\\ \end{bmatrix} \end{array}

  • Perspective Transformation infinite far plane \mathbf{\lbrack n,\infty \rbrack}, Reversed Clip Space \mathbf{z \in \lbrack 1,0 \rbrack}

View Space

Left-handed NDC Space

Right-handed NDC Space

image

image

image

image

\begin{array}{ccc} \textrm{Frustum} & \textrm{Symmetric Vertical FOV} & \textrm{Symmetric Horizontal FOV} \\ \begin{bmatrix} \frac{2n}{r-l} & 0 & 0 & 0\\ 0 & \frac{2n}{t-b} & 0 & 0\\ -\frac{r+l}{r-l} & -\frac{t+b}{t-b} & 0 & 1\\ 0 & 0 & n & 0\\ \end{bmatrix} & \begin{bmatrix} \frac{w}{h}\cot(\frac{\alpha}{2}) & 0 & 0 & 0\\ 0 & \cot(\frac{\alpha}{2}) & 0 & 0\\ 0 & 0 & 0 & 1\\ 0 & 0 & n & 0\\ \end{bmatrix} & \begin{bmatrix} \cot(\frac{\beta}{2}) & 0 & 0 & 0\\ 0 & \frac{h}{w}\cot(\frac{\beta}{2}) & 0 & 0\\ 0 & 0 & 0 & 1\\ 0 & 0 & n & 0\\ \end{bmatrix} \end{array}

  • Perspective Transformation \mathbf{\lbrack n,f \rbrack}, Clip Space \mathbf{z \in \lbrack -1,1 \rbrack}

View Space

Left-handed NDC Space

Right-handed NDC Space

image

image

image

image

\begin{array}{ccc} \textrm{Frustum} & \textrm{Symmetric Vertical FOV} & \textrm{Symmetric Horizontal FOV} \\ \begin{bmatrix} \frac{2n}{r-l} & 0 & 0 & 0\\ 0 & \frac{2n}{t-b} & 0 & 0\\ -\frac{r+l}{r-l} & -\frac{t+b}{t-b} & \frac{f+n}{f-n} & 1\\ 0 & 0 & -\frac{2fn}{f-n} & 0\\ \end{bmatrix} & \begin{bmatrix} \frac{w}{h}\cot(\frac{\alpha}{2}) & 0 & 0 & 0\\ 0 & \cot(\frac{\alpha}{2}) & 0 & 0\\ 0 & 0 & \frac{f+n}{f-n} & 1\\ 0 & 0 & -\frac{2fn}{f-n} & 0\\ \end{bmatrix} & \begin{bmatrix} \cot(\frac{\beta}{2}) & 0 & 0 & 0\\ 0 & \frac{h}{w}\cot(\frac{\beta}{2}) & 0 & 0\\ 0 & 0 & \frac{f+n}{f-n} & 1\\ 0 & 0 & -\frac{2fn}{f-n} & 0\\ \end{bmatrix} \end{array}

  • Perspective Transformation infinite far plane \mathbf{\lbrack n,\infty \rbrack}, Clip Space \mathbf{z \in \lbrack -1,1 \rbrack}

View Space

Left-handed NDC Space

Right-handed NDC Space

image

image

image

image

\begin{array}{ccc} \textrm{Frustum} & \textrm{Symmetric Vertical FOV} & \textrm{Symmetric Horizontal FOV} \\ \begin{bmatrix} \frac{2n}{r-l} & 0 & 0 & 0\\ 0 & \frac{2n}{t-b} & 0 & 0\\ -\frac{r+l}{r-l} & -\frac{t+b}{t-b} & 1 & 1\\ 0 & 0 & -2n & 0\\ \end{bmatrix} & \begin{bmatrix} \frac{w}{h}\cot(\frac{\alpha}{2}) & 0 & 0 & 0\\ 0 & \cot(\frac{\alpha}{2}) & 0 & 0\\ 0 & 0 & 1 & 1\\ 0 & 0 & -2n & 0\\ \end{bmatrix} & \begin{bmatrix} \cot(\frac{\beta}{2}) & 0 & 0 & 0\\ 0 & \frac{h}{w}\cot(\frac{\beta}{2}) & 0 & 0\\ 0 & 0 & 1 & 1\\ 0 & 0 & -2n & 0\\ \end{bmatrix} \end{array}

  • Perspective Transformation \mathbf{\lbrack n,f \rbrack}, Reversed Clip Space \mathbf{z \in \lbrack 1,-1 \rbrack}

View Space

Left-handed NDC Space

Right-handed NDC Space

image

image

image

image

\begin{array}{ccc} \textrm{Frustum} & \textrm{Symmetric Vertical FOV} & \textrm{Symmetric Horizontal FOV} \\ \begin{bmatrix} \frac{2n}{r-l} & 0 & 0 & 0\\ 0 & \frac{2n}{t-b} & 0 & 0\\ -\frac{r+l}{r-l} & -\frac{t+b}{t-b} & -\frac{f+n}{f-n} & 1\\ 0 & 0 & \frac{2fn}{f-n} & 0\\ \end{bmatrix} & \begin{bmatrix} \frac{w}{h}\cot(\frac{\alpha}{2}) & 0 & 0 & 0\\ 0 & \cot(\frac{\alpha}{2}) & 0 & 0\\ 0 & 0 & -\frac{f+n}{f-n} & 1\\ 0 & 0 & \frac{2fn}{f-n} & 0\\ \end{bmatrix} & \begin{bmatrix} \cot(\frac{\beta}{2}) & 0 & 0 & 0\\ 0 & \frac{h}{w}\cot(\frac{\beta}{2}) & 0 & 0\\ 0 & 0 & -\frac{f+n}{f-n} & 1\\ 0 & 0 & \frac{2fn}{f-n} & 0\\ \end{bmatrix} \end{array}

  • Perspective Transformation infinite far plane \mathbf{\lbrack n,\infty \rbrack}, Reversed Clip Space \mathbf{z \in \lbrack 1,-1 \rbrack}

View Space

Left-handed NDC Space

Right-handed NDC Space

image

image

image

image

\begin{array}{ccc} \textrm{Frustum} & \textrm{Symmetric Vertical FOV} & \textrm{Symmetric Horizontal FOV} \\ \begin{bmatrix} \frac{2n}{r-l} & 0 & 0 & 0\\ 0 & \frac{2n}{t-b} & 0 & 0\\ -\frac{r+l}{r-l} & -\frac{t+b}{t-b} & -1 & 1\\ 0 & 0 & 2n & 0\\ \end{bmatrix} & \begin{bmatrix} \frac{w}{h}\cot(\frac{\alpha}{2}) & 0 & 0 & 0\\ 0 & \cot(\frac{\alpha}{2}) & 0 & 0\\ 0 & 0 & -1 & 1\\ 0 & 0 & 2n & 0\\ \end{bmatrix} & \begin{bmatrix} \cot(\frac{\beta}{2}) & 0 & 0 & 0\\ 0 & \frac{h}{w}\cot(\frac{\beta}{2}) & 0 & 0\\ 0 & 0 & -1 & 1\\ 0 & 0 & 2n & 0\\ \end{bmatrix} \end{array}

Jitter Orthographic Transformation

l – left coordinate of the orthographic frustum

r – right coordinate of the orthographic frustum

b – bottom coordinate of the orthographic frustum

t – top coordinate of the orthographic frustum

n – distance to the near plane of the orthographic frustum

f – distance to the far plane of the orthographic frustum

w – width of the near plane of the orthographic frustum

h – height of the near plane of the orthographic frustum

j_x – jitter in NDC space in the x-direction

j_y – jitter in NDC space in the y-direction

  • Jitter Orthographic Transformation Clip space \mathbf{z \in \lbrack 0,1 \rbrack}

\begin{array}{ccc} \textrm{General} & \textrm{Symmetric} & \textrm{Symmetric 2D} \\ \begin{bmatrix} \frac{2}{r-l} & 0 & 0 & 0\\ 0 & \frac{2}{t-b} & 0 & 0\\ 0 & 0 & \frac{1}{f-n} & 0\\ \frac{r(1+j_x)+l(1-j_x)}{r-l} & \frac{t(1+j_y)+b(1-j_y)}{t-b} & -\frac{n}{f-n} & 1\\ \end{bmatrix} & \begin{bmatrix} \frac{2}{w} & 0 & 0 & 0\\ 0 & \frac{2}{h} & 0 & 0\\ 0 & 0 & \frac{1}{f-n} & 0\\ j_x & j_y & -\frac{n}{f-n} & 1\\ \end{bmatrix} & \begin{bmatrix} \frac{2}{w} & 0 & 0 & 0\\ 0 & \frac{2}{h} & 0 & 0\\ 0 & 0 & \frac{1}{2} & 0\\ j_x & j_y & \frac{1}{2} & 1\\ \end{bmatrix} \end{array}

  • Jitter Orthographic Transformation Clip space \mathbf{z \in \lbrack -1,1 \rbrack}

\begin{array}{ccc} \textrm{General} & \textrm{Symmetric} & \textrm{Symmetric 2D} \\ \begin{bmatrix} \frac{2}{r-l} & 0 & 0 & 0\\ 0 & \frac{2}{t-b} & 0 & 0\\ 0 & 0 & \frac{2}{f-n} & 0\\ \frac{r(1+j_x)+l(1-j_x)}{r-l} & \frac{t(1+j_y)+b(1-j_y)}{t-b} & -\frac{f+n}{f-n} & 1\\ \end{bmatrix} & \begin{bmatrix} \frac{2}{w} & 0 & 0 & 0\\ 0 & \frac{2}{h} & 0 & 0\\ 0 & 0 & \frac{2}{f-n} & 0\\ j_x & j_y & -\frac{f+n}{f-n} & 1\\ \end{bmatrix} & \begin{bmatrix} \frac{1}{w} & 0 & 0 & 0\\ 0 & \frac{1}{h} & 0 & 0\\ 0 & 0 & 1 & 0\\ j_x & j_y & 0 & 1\\ \end{bmatrix} \end{array}

Jitter Perspective Transformation

l – left coordinate of the perspective frustum

r – right coordinate of the perspective frustum

b – bottom coordinate of the perspective frustum

t – top coordinate of the perspective frustum

n – distance to the near plane of the perspective frustum

f – distance to the far plane of the perspective frustum

w – width of the near plane of the perspective frustum

h – height of the near plane of the perspective frustum

j_x – jitter in NDC space in the x-direction

j_y – jitter in NDC space in the y-direction

\alpha – angle between of left and right frustum planes of the perspective frustum

\beta – angle between of top and bottom frustum planes of the perspective frustum

  • Jitter Perspective Transformation \mathbf{\lbrack n,f \rbrack}, Clip Space \mathbf{z \in \lbrack 0,1 \rbrack}

\begin{array}{ccc} \textrm{Frustum} & \textrm{Symmetric Vertical FOV} & \textrm{Symmetric Horizontal FOV} \\ \begin{bmatrix} \frac{2n}{r-l} & 0 & 0 & 0\\ 0 & \frac{2n}{t-b} & 0 & 0\\ -\frac{r(1+j_x)+l(1-j_x)}{r-l} & -\frac{t(1+j_y)+b(1-j_y)}{t-b} & \frac{f}{f-n} & 1\\ 0 & 0 & -\frac{fn}{f-n} & 0\\ \end{bmatrix} & \begin{bmatrix} \frac{w}{h}\cot(\frac{\alpha}{2}) & 0 & 0 & 0\\ 0 & \cot(\frac{\alpha}{2}) & 0 & 0\\ -j_x & -j_y & \frac{f}{f-n} & 1\\ 0 & 0 & -\frac{fn}{f-n} & 0\\ \end{bmatrix} & \begin{bmatrix} \cot(\frac{\beta}{2}) & 0 & 0 & 0\\ 0 & \frac{h}{w}\cot(\frac{\beta}{2}) & 0 & 0\\ -j_x & -j_y & \frac{f}{f-n} & 1\\ 0 & 0 & -\frac{fn}{f-n} & 0\\ \end{bmatrix} \end{array}

  • Jitter Perspective Transformation infinite far plane \mathbf{\lbrack n,\infty \rbrack}, Clip Space \mathbf{z \in \lbrack 0,1 \rbrack}

\begin{array}{ccc} \textrm{Frustum} & \textrm{Symmetric Vertical FOV} & \textrm{Symmetric Horizontal FOV} \\ \begin{bmatrix} \frac{2n}{r-l} & 0 & 0 & 0\\ 0 & \frac{2n}{t-b} & 0 & 0\\ -\frac{r(1+j_x)+l(1-j_x)}{r-l} & -\frac{t(1+j_y)+b(1-j_y)}{t-b} & 1 & 1\\ 0 & 0 & -n & 0\\ \end{bmatrix} & \begin{bmatrix} \frac{w}{h}\cot(\frac{\alpha}{2}) & 0 & 0 & 0\\ 0 & \cot(\frac{\alpha}{2}) & 0 & 0\\ -j_x & -j_y & 1 & 1\\ 0 & 0 & -n & 0\\ \end{bmatrix} & \begin{bmatrix} \cot(\frac{\beta}{2}) & 0 & 0 & 0\\ 0 & \frac{h}{w}\cot(\frac{\beta}{2}) & 0 & 0\\ -j_x & -j_y & 1 & 1\\ 0 & 0 & -n & 0\\ \end{bmatrix} \end{array}

  • Jitter Perspective Transformation \mathbf{\lbrack n,f \rbrack}, Reversed Clip Space \mathbf{z \in \lbrack 1,0 \rbrack}

\begin{array}{ccc} \textrm{Frustum} & \textrm{Symmetric Vertical FOV} & \textrm{Symmetric Horizontal FOV} \\ \begin{bmatrix} \frac{2n}{r-l} & 0 & 0 & 0\\ 0 & \frac{2n}{t-b} & 0 & 0\\ -\frac{r(1+j_x)+l(1-j_x)}{r-l} & -\frac{t(1+j_y)+b(1-j_y)}{t-b} & -\frac{n}{f-n} & 1\\ 0 & 0 & \frac{fn}{f-n} & 0\\ \end{bmatrix} & \begin{bmatrix} \frac{w}{h}\cot(\frac{\alpha}{2}) & 0 & 0 & 0\\ 0 & \cot(\frac{\alpha}{2}) & 0 & 0\\ -j_x & -j_y & -\frac{n}{f-n} & 1\\ 0 & 0 & \frac{fn}{f-n} & 0\\ \end{bmatrix} & \begin{bmatrix} \cot(\frac{\beta}{2}) & 0 & 0 & 0\\ 0 & \frac{h}{w}\cot(\frac{\beta}{2}) & 0 & 0\\ -j_x & -j_y & -\frac{n}{f-n} & 1\\ 0 & 0 & \frac{fn}{f-n} & 0\\ \end{bmatrix} \end{array}

  • Jitter Perspective Transformation infinite far plane \mathbf{\lbrack n,\infty \rbrack}, Reversed Clip Space \mathbf{z \in \lbrack 1,0 \rbrack}

\begin{array}{ccc} \textrm{Frustum} & \textrm{Symmetric Vertical FOV} & \textrm{Symmetric Horizontal FOV} \\ \begin{bmatrix} \frac{2n}{r-l} & 0 & 0 & 0\\ 0 & \frac{2n}{t-b} & 0 & 0\\ -\frac{r(1+j_x)+l(1-j_x)}{r-l} & -\frac{t(1+j_y)+b(1-j_y)}{t-b} & 0 & 1\\ 0 & 0 & n & 0\\ \end{bmatrix} & \begin{bmatrix} \frac{w}{h}\cot(\frac{\alpha}{2}) & 0 & 0 & 0\\ 0 & \cot(\frac{\alpha}{2}) & 0 & 0\\ -j_x & -j_y & 0 & 1\\ 0 & 0 & n & 0\\ \end{bmatrix} & \begin{bmatrix} \cot(\frac{\beta}{2}) & 0 & 0 & 0\\ 0 & \frac{h}{w}\cot(\frac{\beta}{2}) & 0 & 0\\ -j_x & -j_y & 0 & 1\\ 0 & 0 & n & 0\\ \end{bmatrix} \end{array}

  • Jitter Perspective Transformation \mathbf{\lbrack n,f \rbrack}, Clip Space \mathbf{z \in \lbrack -1,1 \rbrack}

\begin{array}{ccc} \textrm{Frustum} & \textrm{Symmetric Vertical FOV} & \textrm{Symmetric Horizontal FOV} \\ \begin{bmatrix} \frac{2n}{r-l} & 0 & 0 & 0\\ 0 & \frac{2n}{t-b} & 0 & 0\\ -\frac{r(1+j_x)+l(1-j_x)}{r-l} & -\frac{t(1+j_y)+b(1-j_y)}{t-b} & \frac{f+n}{f-n} & 1\\ 0 & 0 & \frac{-2fn}{f-n} & 0\\ \end{bmatrix} & \begin{bmatrix} \frac{w}{h}\cot(\frac{\alpha}{2}) & 0 & 0 & 0\\ 0 & \cot(\frac{\alpha}{2}) & 0 & 0\\ -j_x & -j_y & \frac{f+n}{f-n} & 1\\ 0 & 0 & -\frac{2fn}{f-n} & 0\\ \end{bmatrix} & \begin{bmatrix} \cot(\frac{\beta}{2}) & 0 & 0 & 0\\ 0 & \frac{h}{w}\cot(\frac{\beta}{2}) & 0 & 0\\ -j_x & -j_y & \frac{f+n}{f-n} & 1\\ 0 & 0 & -\frac{2fn}{f-n} & 0\\ \end{bmatrix} \end{array}

  • Jitter Perspective Transformation infinite far plane \mathbf{\lbrack n,\infty \rbrack}, Clip Space \mathbf{z \in \lbrack -1,1 \rbrack}

\begin{array}{ccc} \textrm{Frustum} & \textrm{Symmetric Vertical FOV} & \textrm{Symmetric Horizontal FOV} \\ \begin{bmatrix} \frac{2n}{r-l} & 0 & 0 & 0\\ 0 & \frac{2n}{t-b} & 0 & 0\\ -\frac{r(1+j_x)+l(1-j_x)}{r-l} & -\frac{t(1+j_y)+b(1-j_y)}{t-b} & 1 & 1\\ 0 & 0 & -2n & 0\\ \end{bmatrix} & \begin{bmatrix} \frac{w}{h}\cot(\frac{\alpha}{2}) & 0 & 0 & 0\\ 0 & \cot(\frac{\alpha}{2}) & 0 & 0\\ -j_x & -j_y & 1 & 1\\ 0 & 0 & -2n & 0\\ \end{bmatrix} & \begin{bmatrix} \cot(\frac{\beta}{2}) & 0 & 0 & 0\\ 0 & \frac{h}{w}\cot(\frac{\beta}{2}) & 0 & 0\\ -j_x & -j_y & 1 & 1\\ 0 & 0 & -2n & 0\\ \end{bmatrix} \end{array}

  • Jitter Perspective Transformation \mathbf{\lbrack n,f \rbrack}, Reversed Clip Space \mathbf{z \in \lbrack 1,-1 \rbrack}

\begin{array}{ccc} \textrm{Frustum} & \textrm{Symmetric Vertical FOV} & \textrm{Symmetric Horizontal FOV} \\ \begin{bmatrix} \frac{2n}{r-l} & 0 & 0 & 0\\ 0 & \frac{2n}{t-b} & 0 & 0\\ -\frac{r(1+j_x)+l(1-j_x)}{r-l} & -\frac{t(1+j_y)+b(1-j_y)}{t-b} & -\frac{f+n}{f-n} & 1\\ 0 & 0 & \frac{2fn}{f-n} & 0\\ \end{bmatrix} & \begin{bmatrix} \frac{w}{h}\cot(\frac{\alpha}{2}) & 0 & 0 & 0\\ 0 & \cot(\frac{\alpha}{2}) & 0 & 0\\ -j_x & -j_y & -\frac{f+n}{f-n} & 1\\ 0 & 0 & \frac{2fn}{f-n} & 0\\ \end{bmatrix} & \begin{bmatrix} \cot(\frac{\beta}{2}) & 0 & 0 & 0\\ 0 & \frac{h}{w}\cot(\frac{\beta}{2}) & 0 & 0\\ -j_x & -j_y & -\frac{f+n}{f-n} & 1\\ 0 & 0 & \frac{2fn}{f-n} & 0\\ \end{bmatrix} \end{array}

  • Jitter Perspective Transformation infinite far plane \mathbf{\lbrack n,\infty \rbrack}, Reversed Clip Space \mathbf{z \in \lbrack 1,-1 \rbrack}

\begin{array}{ccc} \textrm{Frustum} & \textrm{Symmetric Vertical FOV} & \textrm{Symmetric Horizontal FOV} \\ \begin{bmatrix} \frac{2n}{r-l} & 0 & 0 & 0\\ 0 & \frac{2n}{t-b} & 0 & 0\\ -\frac{r(1+j_x)+l(1-j_x)}{r-l} & -\frac{t(1+j_y)+b(1-j_y)}{t-b} & -1 & 1\\ 0 & 0 & 2n & 0\\ \end{bmatrix} & \begin{bmatrix} \frac{w}{h}\cot(\frac{\alpha}{2}) & 0 & 0 & 0\\ 0 & \cot(\frac{\alpha}{2}) & 0 & 0\\ -j_x & -j_y & -1 & 1\\ 0 & 0 & 2n & 0\\ \end{bmatrix} & \begin{bmatrix} \cot(\frac{\beta}{2}) & 0 & 0 & 0\\ 0 & \frac{h}{w}\cot(\frac{\beta}{2}) & 0 & 0\\ -j_x & -j_y & -1 & 1\\ 0 & 0 & 2n & 0\\ \end{bmatrix} \end{array}

Camera Transformations

  • “Look At” Transformation

at – position of the point at which the camera will be pointing at

eye – position of the camera

up – “Up” direction of the camera

\vec{C}“Forward” vector

\vec{A}“Right” vector

\vec{B}“Up” vector

\vec{C} = \frac{\vec{\textrm{at}} - \vec{\textrm{eye}}}{|\vec{\textrm{at}} - \vec{\textrm{eye}}|} \vec{A} = \vec{\textrm{up}} \times \vec{C} \vec{B} = \vec{C} \times \vec{A}

\begin{bmatrix} \vec{A}_x & \vec{B}_x & \vec{C}_x & 0\\ \vec{A}_y & \vec{B}_y & \vec{C}_y & 0\\ \vec{A}_z & \vec{B}_z & \vec{C}_z & 0\\ -(\vec{A} \cdot \vec{\textrm{eye}}) & -(\vec{B} \cdot \vec{\textrm{eye}}) & -(\vec{C} \cdot \vec{\textrm{eye}}) & 1\\ \end{bmatrix}

  • “Look To” Transformation

dir – desired direction of the camera

up – “Up” direction of the camera

\vec{C}“Forward” vector

\vec{A}“Right” vector

\vec{B}“Up” vector

\vec{C} = \vec{\textrm{dir}} \vec{A} = \vec{\textrm{up}} \times \vec{C} \vec{B} = \vec{C} \times \vec{A}

\begin{bmatrix} \vec{A}_x & \vec{B}_x & \vec{C}_x & 0\\ \vec{A}_y & \vec{B}_y & \vec{C}_y & 0\\ \vec{A}_z & \vec{B}_z & \vec{C}_z & 0\\ -(\vec{A} \cdot \vec{\textrm{eye}}) & -(\vec{B} \cdot \vec{\textrm{eye}}) & -(\vec{C} \cdot \vec{\textrm{eye}}) & 1\\ \end{bmatrix}

Miscellaneous Matrices

  • Planar Shadow Projection

Plane defined P: Ax + By + Cz + D = 0

Light position L: (L_x, L_y, L_z)

where w = 0 for direction light

w = 1 for point light

\vec{L} = (L_x, L_y, L_x, w) \vec{P} = (A, B, C, D) k = \vec{P} \cdot \vec{L}

\begin{bmatrix} k - \vec{P}_x \vec{L}_x & -\vec{P}_y \vec{L}_x & -\vec{P}_z \vec{L}_x & -\vec{P}_d \vec{L}_x \\ -\vec{P}_x \vec{L}_y & k - \vec{P}_y \vec{L}_y & -\vec{P}_z \vec{L}_y & -\vec{P}_d \vec{L}_y \\ -\vec{P}_x \vec{L}_z & -\vec{P}_y \vec{L}_z & k - \vec{P}_z \vec{L}_z & -\vec{P}_d \vec{L}_z \\ -\vec{P}_x \vec{L}_w & -\vec{P}_y \vec{L}_w & -\vec{P}_z \vec{L}_w & k - \vec{P}_d \vec{L}_w \\ \end{bmatrix}

Introduction – Matrix Compendium

The GPUOpen Matrix Compendium covers how matrices are used in 3D graphics and implementations in host code and shading languages. It’s a growing guide, so keep checking back!

Looking for a good place to get started with exploring GPUOpen?

AMD GPUOpen documentation

Explore our huge collection of detailed tutorials, sample code, presentations, and documentation to find answers to your graphics development questions.

AMD GPUOpen Effects - AMD FidelityFX technologies

Create wonder. No black boxes. Meet the AMD FidelityFX SDK!

AMD GPUOpen Performance Guides

The home of great performance and optimization advice for AMD RDNA™ 2 GPUs, AMD Ryzen™ CPUs, and so much more.

AMD GPUOpen Samples

Browse all our useful samples. Perfect for when you’re needing to get started, want to integrate one of our libraries, and much more.

AMD GPUOpen developer SDKs

Discover what our SDK technologies can offer you. Query hardware or software, manage memory, create rendering applications or machine learning, and much more!

AMD GPUOpen Developer Tools

Analyze, Optimize, Profile, Benchmark. We provide you with the developer tools you need to make sure your game is the best it can be!

Getting started: AMD GPUOpen software

New or fairly new to AMD’s tools, libraries, and effects? This is the best place to get started on GPUOpen!

AMD GPUOpen Getting Started Development and Performance

Looking for tips on getting started with developing and/or optimizing your game, whether on AMD hardware or generally? We’ve got you covered!