Некоторые пояснения о матрицах преобразования: все столбцы, кроме последнего, описывают ориентацию новой системы координат в базе текущей системы координат. Таким образом, первый столбец - это вектор X новой системы координат, как видно из текущего, второй - это новый вектор Y, а 3-й - новый Z. Пока это охватывает только вращение. Последний столбец используется для относительного смещения. Последний ряд и самое нижнее правое значение используются для однородных преобразований. Лучше всего оставить последний ряд 0, ..., 0, 1
В вашем случае вы пропускаете значения Z, поэтому мы просто вставляем туда преобразование идентичности, чтобы входящие значения оставались такими, как есть.
Скажите, что это ваша оригинальная матрица:
xx xy tx
yx yy ty
0 0 1
В этой матрице отсутствует Z-преобразование. Вставка идентичности означает: оставить Z как есть и не смешивать с остальными. Итак, z = z · = 0, кроме zz = 1. Это дает следующую матрицу
↓
xx xy 0 tx
yx yy 0 ty
0 0 1 0 ←
0 0 0 1
Вы можете применить это к текущему стеку матрицы OpenGL с помощью glMultMatrix , если версия OpenGL ниже 3 профилей ядра. Помните, что OpenGL нумерует матрицу в главном порядке столбцов, т.е. индексы в массиве имеют следующий вид (шестнадцатеричные цифры)
0 4 8 c
1 5 9 d
2 6 a e
3 7 b f
Это противоречит обычной записи С, которая является
0 1 2 3
4 5 6 7
8 9 a b
c d e f
С ядром OpenGL-3 и более поздними версиями вы все равно будете самостоятельно управлять матрицами и манипулировать ими.
РЕДАКТИРОВАТЬ для второй части вопроса
Если инвертировать один, значит найти матрицу M ^ -1 для данной матрицы M, так что M ^ 1 * M = M * M ^ 1 = 1 . Для матриц 3 × 3 метод детерминантной инверсии требует меньше операций, чем элиминация Гаусса-Джордана, и, таким образом, является наиболее эффективным способом сделать это. Уже для матриц 4 × 4 детерминантная инверсия медленнее, чем любой другой метод. http://www.sosmath.com/matrix/inverse/inverse.html
Если вы знаете, что ваша матрица ортонормирована, то вы можете просто переставить верхнюю левую часть, кроме нижней строки и крайнего правого столбца, и отменить знак самого правого столбца, кроме самого нижнего правого элемента. Это использует тот факт, что для ортонормированных матриц M ^ -1 = M ^ T.