Создает проекционную матрицу, то есть матрицу, которая описывает набор линейных уравнений, которые преобразуют векторы из пространства глаза в пространство клипа. Матрицы действительно не являются черной магией. В случае с OpenGL это число чисел 4: 4:
X_x Y_x Z_x T_x
X_y Y_y Z_y T_y
X_z Y_z Z_z T_z
X_w Y_w Z_w W_w
Вы можете умножить 4-вектор на матрицу 4 × 4:
v' = M * v
v'_x = M_xx * v_x + M_yx * v_y + M_zx * v_z + M_tx * v_w
v'_y = M_xy * v_x + M_yy * v_y + M_zy * v_z + M_ty * v_w
v'_z = M_xz * v_x + M_yz * v_y + M_zz * v_z + M_tz * v_w
v'_w = M_xw * v_x + M_yw * v_y + M_zw * v_z + M_tw * v_w
После достижения пространства клипа (т.е. после этапа проецирования) примитивы обрезаются. Вершины, полученные в результате отсечения, затем подвергаются разрыву перспективы, т.е.
v'_x = v_x / v_w
v'_y = v_y / v_w
v'_z = v_z / v_w
( v_w = 1 = v_w / v_w )
И это все. На самом деле на всех этих этапах преобразования не происходит ничего больше, чем обычное умножение матрицы на вектор.
Теперь самое интересное в том, что матрицы могут использоваться для описания относительного выравнивания системы координат в другой системе координат. Что делает перспективное преобразование, так это то, что оно позволяет z-значениям вершин «проскальзывать» и в их спроецированные w-значения. А с точки зрения деления неединица w вызовет «искажение» координат вершины. Вершины с маленьким z будут разделены на маленькое w, поэтому их координаты «взорвутся», а вершины с большим z будут «сжаты», что и вызывает эффект перспективы.