Причина, по которой вы не можете установить третью строку матрицы в том виде, в котором вы ее указали, заключается в том, что нижняя строка не соответствует никаким преобразованиям, которые вы, вероятно, захотите.
Матрица 2x2, действующая на двумерный вектор в декартовых координатах, может выполнять только линейные преобразования (масштабирование, наклоны и повороты относительно начала координат, но не трансляции).
Чтобы получить аффинные 2D преобразования (включая переводы), вам нужно использовать однородные координаты. В практических целях это означает, что вы увеличиваете до трех измерений, добавляете фиктивную координату «z» ко всем вашим векторам, и всякий раз, когда вам требуется 2D-перевод, вы действительно выполняете трехмерный перекос перпендикулярно оси z. Это третий столбец.
По соглашению (и для простоты) фиктивное значение z всегда равно 1. Для практических целей оно действует как "скорость перевода" - удвоение его удвоит эффект любых переводов, которые вы пытаетесь выполнить. Итак, мы не хотим, чтобы что-либо изменило это значение z с 1.
Третья строка матрицы, как вы написали, соответствует значению z. Пока эта строка остается «0 0 1», x и y не могут влиять на z, и она остается на 1. Если вы можете установить эту строку, вы можете случайно позволить x и y «просочиться» в z или умножить значение Z, делая все ваши преобразования с тех пор действовать очень странно. Блокировка этой строки предотвращает это без каких-либо полезных преобразований.
Конечно, это теория. На практике маловероятно, что программное обеспечение даже содержит модель третьего ряда. Они просто используют особый случай формулы, которая предполагает «0 0 1» - так что это другая часть ответа. Вы не можете установить это, потому что это фактически не существует в способе работы программного обеспечения. ;)