Define homogeneous coordinates for 2D space. replace points like this (x, y) (2D coordinate vector) with points like this (x, y, 1) (2D homogeneous coordinate vector) Translation of 2D coordinates is an affine operation, not a linear operation. T(x, y) = (x, y) + (a, b) = (x + a, y + b) translation of a point by a vector T(v) = Iv + a I is the identity matrix, a is the translation vector But translation of 2D homogeneous coordinates IS a linear operation. T(x, y, 1) = [1 0 a] [x] = [1*x + 0*y + a*1] = [x + a] = (x + a, y + b, 1) [0 1 b] * [y] [0*x + 1*y + b*1] [y + b] [0 0 1] [1] [0*x + 0*y + 1*1] [ 1 ] Translation of a 2D homogeneous point is done with this homogeneous translation matrix. [1 0 a] [0 1 b] [0 0 1] Of the three common transformations, scaling, rotation, and translation, only translation requires a homogeneous matrix. So why do we use homogeneous matrices for all of our transformations (including rotation and scaling)? Why not use regular matrices for rotation and scaling and use either a translation vector or a homogeneous matrix for each translation? (That would save memory space since each homogeneous vertex is 4 numbers instead of 3 numbers, and each homogeneous matrix is 16 numbers instead of 9 number.) Suppose we need to transform each vertex v_i from a Model by a sequence of transformations with some scalings, some rotations, and some translations. T(v_i) = R1( T1( R2( T2( S1( T3(v_i)))))) If all of the transformations are represented by the same kind of matrix (a homogeneous matrix) then we can pre-multiply all the matrices together and do all the transformations as a single matrix multiply. T(v_i) = (R1 * T1 * R2 * T2 * S1 * T3) * v_i = M * v_i (where M = R1*T1*R2*T2*S1*T3) On the other hand, if the transformations are represented by different kinds of computations (regular matrices and homogeneous matrices, or regular matrices and translation vectors), then there is no way to combine all the transformations into one single step. So even though representing all transformations as homogeneous matrices takes up a bit more space (and makes each matrix multiplication a bit more complicated) the ability to combine (concatenate) a sequence of transformations into a single matrix is an optimization that more than makes up for the extra space and computation required by homogeneous points and matrices. We can also define homogeneous coordinates for 3D space. replace points like this (x, y, z) (3D coordinate vector) with points like this (x, y, z, 1) (3D homogeneous coordinate vector) Translation of a 3D homogeneous point is done with this homogeneous translation matrix. [1 0 0 a] [0 1 0 b] [0 0 1 c] [0 0 0 1]