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