Матриця ідентичності з точки зору матриць проекції та модельного перегляду по суті скидає матрицю до її стану за замовчуванням.
Як ви сподіваєтеся, ви знаєте, 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 точки на екрані, разом з глибиною (від екрану "камера"), яку він використовує для малювання пікселів. Але коли одна з цих матриць є матрицею ідентичності, точки множуються з матрицею ідентичності і тому не змінюються, тому матриця не має ефекту; вона не переводить точки, не обертає їх, залишає їх такими, як є.
Я сподіваюся, що це прояснить трохи більше!