La matrice identità, in termini di matrici di proiezione e modelview, ripristina sostanzialmente la matrice al suo stato predefinito.
Come si spera tu sappia, glTranslate
e glRotate
sei sempre relativo allo stato attuale della matrice. Ad esempio, se chiami glTranslate
, stai traducendo dalla "posizione" corrente della matrice, non dall'origine. Ma se vuoi ricominciare dall'origine, è quando chiami glLoadIdentity()
, e quindi puoi glTranslate
dalla matrice che ora si trova nell'origine, o glRotate
dalla matrice che ora è orientata nella direzione predefinita.
Penso che la risposta di Boon, che è l'equivalente di 1, non sia esattamente corretta. La matrice in realtà si presenta così:
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Questa è la matrice dell'identità. Boon ha ragione, matematicamente, che qualsiasi matrice moltiplicata con quella matrice (o una matrice che assomiglia a quella; quelle diagonali, tutti gli altri 0) produrrà la matrice originale, ma non credo che abbia spiegato perché questo è importante.
Il motivo per cui questo è importante è perché OpenGL moltiplica tutte le posizioni e le rotazioni attraverso ciascuna matrice; quindi quando ad esempio si disegna un poligono ( glBegin(GL_FACE)
, alcuni punti glEnd()
), lo traduce in "spazio mondiale" moltiplicandolo con MODELVIEW, quindi lo si traduce da 3D a 2D moltiplicandolo con la matrice PROJECT, e questo gli dà i punti 2D sullo schermo, insieme alla profondità (dalla "telecamera" dello schermo), che utilizza per disegnare i pixel. Ma quando una di queste matrici è la matrice identità, i punti vengono moltiplicati per la matrice identità e quindi non vengono modificati, quindi la matrice non ha alcun effetto; non traduce i punti, non li ruota, li lascia così come sono.
Spero che questo chiarisca un po 'di più!