Core Idea
A matrix can only ever mix the coordinates it is given — rotate them, scale them, shear them. It cannot add anything, so it cannot move an object: translation is addition, not multiplication. The fix is not a bigger matrix trick but a change of address: give every point one extra coordinate, w, and let our whole world live on the w = 1 slice of a space one dimension up.
That’s what the scene above shows. The matrix is shearing the entire 2D plane — grid lines tilt, nothing is “moving sideways” — yet the line of points living at w = 1 experiences it as a clean translation. Translation is a shear, seen from inside the slice. Shears are linear, matrices do linear, so a 4×4 matrix can now move things.
The Lever in the Last Column
Mechanically, the translation offsets sit in the matrix’s last column, and the input’s w decides whether they fire:
x′ = x + tx·w w = 1 → x′ = x + tx (the point moves)
w = 0 → x′ = x (nothing happens)
The 1 is a lever. Multiply it by the translation column and the offset comes through at full strength; replace it with 0 and the same matrix, same column, delivers nothing.
Points Move, Directions Refuse
That refusal is not a bug — it’s the type system of 3D math. (x, y, z, 1) is a point: somewhere. (x, y, z, 0) is a direction: a facing with no location — a surface normal, a light direction, a ray. Directions must ignore translation (moving a wall doesn’t change which way it faces), and w = 0 is precisely the encoding that makes the matrix agree:
Flip the toggle to transform the normal as a point and you get one of the classic graphics bugs: the translation leaks into the direction, the arrow skews off perpendicular, and every lighting formula built on it quietly lies. (Non-uniform scale breaks normals in a subtler way — that page has the antidote, the normal matrix.)
Ratios, Not Coordinates
Homogeneous coordinates describe projective space, where a tuple names a ray through the origin, not a point: (1, 2, 3, 1) and (2, 4, 6, 2) are the same point, because only the ratios to w matter. The real position is wherever that ray pierces the w = 1 plane — (x/w, y/w, z/w). You can see one of those rays ghosted in the hero above.
Push w → 0 and the pierce point runs off to infinity: w = 0 is literally a point at infinity, which is why a direction has no location, and why parallel rails can honestly meet at a vanishing point.
The Second Job
That divide-by-w is not just bookkeeping — the pipeline weaponizes it. The projection matrix writes the vertex’s camera-space depth into w, and after clip space the GPU divides by it, shrinking distant things. One mechanism, two payoffs: w as translation lever on the way in, w as depth carrier on the way out.
Connections
Homogeneous coordinates are why model matrices are 4×4 instead of 3×3 — see matrices for what the columns mean and transformations for how translation joins rotation and scale in one TRS product. They are also why clip space tests −w ≤ x, y, z ≤ w instead of ±1: the NDC cube only exists after the divide. And the point-vs-direction distinction is the reason normals and light vectors are transformed with w = 0 — the smallest number in graphics doing the most work.