3D Homogeneous Vectors and Matrix transformations


We represent a point in 3D by its homogeneous form, as a column vector:

x
y
z
w

This is the transpose of the row vector [x y z w], so we can also refer to it as [x y z w]T.

We generally "normalize" this vector by scaling it so that w = 1. For example, we would convert [4 6 8 2]T to [2 3 4 1]T. The exception is a point at infinity (ie: a direction vector), in which case w = 0.


We represent transformations of points in 3D by 4×4 matrices:
x'       a   b   c   d       x
y'   ←   e   f   g   h   ×   y
z'       i   j   k   l   ×   z
w'       m   n   o   p       w

The following are convenient primitive matrices:

The identity matrix transforms a point to itself:

x       1   0   0   0       x
y   ←   0   1   0   0   ×   y
y       0   0   1   0   ×   z
w       0   0   0   1       w

A translation matrix translates the position of a point:

x+a       1   0   0   a       x
y+b   ←   0   1   0   b   ×   y
z+c       0   0   1   c   ×   z
w
      0   0   0   1       w

There are three primitive axes of rotation: X, Y, and Z, respectively:

x
      1   0   0   0       x
cosθ y - sinθ z   ←   0 cosθ -sinθ   0   ×   y
sinθ y + cosθ z       0 sinθ cosθ   0   ×   z
w
      0   0   0   1       w

sinθ z + cosθ x       cosθ 0 sinθ   0       x
y
  ←     0 1   0   0   ×   y
cosθ z - sinθ x       -sinθ 0 cosθ   0   ×   z
w
        0 0   0   1       w

 cosθ x - sinθ y       cosθ -sinθ 0   0       x
sinθ x + cosθ y   ←   sinθ cosθ 0   0   ×   y
z
        0   0 1   0   ×   z
w
       0   0 0   1       w

A scale matrix scales a point about the origin:

ax       a   0   0   0       x
by   ←   0   b   0   0   ×   y
cz       0   0   c   0   ×   z
w       0   0   0   1       w

Perspective in Z:

x/z       x       1   0   0   0       x
y/z   ←   y   ←   0   1   0   0   ×   y
w/z       w       0   0   0   1   ×   z
1
      z       0   0   1   0       w