Тождественная матрица в терминах матриц проекции и просмотра модели по существу сбрасывает матрицу обратно в ее состояние по умолчанию.
Как вы, наверное, знаете, glTranslate
и glRotate
всегда относятся к текущему состоянию матрицы. Например, если вы звоните glTranslate
, вы переводите из текущей «позиции» матрицы, а не из источника. Но если вы хотите начать все заново с начала координат, тогда вы звоните glLoadIdentity()
, а затем вы можете glTranslate
из матрицы, которая сейчас находится в начале координат, или glRotate
из матрицы, которая теперь ориентирована в направление по умолчанию.
Я думаю, что ответ Буна, что это эквивалент 1, не совсем правильный. Матрица на самом деле выглядит так:
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Это матрица тождеств. Бун прав, математически, что любая матрица, умноженная на эту матрицу (или матрицу, которая выглядит так: диагональные, все остальные 0), приведет к исходной матрице, но я не верю, что он объяснил, почему это важно.
Причина, по которой это важно, заключается в том, что OpenGL умножает все позиции и повороты в каждой матрице; например, когда вы рисуете многоугольник (glBegin(GL_FACE)
, некоторые точки, glEnd()
), он переводит его в «мировое пространство», умножая его на MODELVIEW, а затем переводит его из 3D в 2D, умножая его на PROJECT. матрица, и это дает ему 2D точки на экране, а также глубину (от экрана «камера»), которую он использует для рисования пикселей. Но когда одна из этих матриц является единичной матрицей, точки умножаются на единичную матрицу и, следовательно, не изменяются, поэтому матрица не действует; он не переводит точки, он не вращает их, он оставляет их как есть.
Надеюсь, это прояснит немного больше!