Macierz tożsamości, pod względem macierzy projekcji i widoku modelu, zasadniczo resetuje macierz z powrotem do stanu domyślnego.
Jak masz nadzieję, wiesz, glTranslate
i glRotate
zawsze są one zależne od aktualnego stanu matrycy. Na przykład, jeśli dzwonisz glTranslate
, wykonujesz tłumaczenie z bieżącej pozycji macierzy, a nie z początku. Ale jeśli chcesz zacząć od początku od początku, wtedy wywołujesz glLoadIdentity()
, a następnie możesz glTranslate
z macierzy, która jest teraz zlokalizowana w początku, lub glRotate
z macierzy, która jest teraz zorientowana w domyślnym kierunku.
Myślę, że odpowiedź Boon, że jest to odpowiednik 1, nie jest do końca poprawna. Macierz faktycznie wygląda tak:
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
To jest macierz tożsamości. Boon ma rację matematyczną, że każda macierz pomnożona przez tę macierz (lub macierz, która wygląda tak; diagonalne, wszystkie inne 0s) da w wyniku oryginalną macierz, ale nie sądzę, aby wyjaśnił, dlaczego jest to ważne.
Powodem, dla którego jest to ważne, jest fakt, że OpenGL mnoży wszystkie pozycje i obroty w każdej macierzy; więc kiedy na przykład rysujesz wielokąt ( glBegin(GL_FACE)
kilka punktów glEnd()
), przekształca go on w „przestrzeń świata” mnożąc go przez WIDOK MODELU, a następnie przekłada z 3D na 2D, mnożąc go przez macierz PROJEKTU, co daje punkty 2D na ekranie wraz z głębią (z „kamery” ekranu), której używa do rysowania pikseli. Ale kiedy jedna z tych macierzy jest macierzą tożsamości, punkty są mnożone przez macierz tożsamości i dlatego nie są zmieniane, więc macierz nie ma wpływu; nie dokonuje translacji punktów, nie obraca ich, pozostawia je bez zmian.
Mam nadzieję, że to wyjaśnia trochę więcej!