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