Wenn an den reshape Beispielen im redbook suchen, finde ich in der Regel so etwas wie:Warum enden Umformungscodes in glMatrixMode (GL_MODELVIEW)?
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
glMatrixMode(GL_MODELVIEW);
}
Ich verstehe, dass die Projektionsmatrix durch glLoadIdentity();
glMatrixMode(GL_PROJECTION);
gefolgt Aufruf zurücksetzt, aber ich verstehe nicht, warum glMatrixMode(GL_MODELVIEW)
in der Regel bei der genannt wird Ende der Umgestaltung.
In diesem speziellen Beispiel betrifft glFrustum
die Projektionsmatrix, richtig? Warum wird GL_MODELVIEW
später aufgerufen? Würde es einen Unterschied machen, wenn der letzte Aufruf an glMatrixMode(GL_MODELVIEW)
entfällt?
Würde es einen Unterschied machen, wenn der letzte Aufruf von glMatrixMode (GL_MODELVIEW) weggelassen wird? – andandandand
Ja - außer du würdest es woanders hinlegen. Grundsätzlich werden die meisten Matrixoperationen in der Modelview-Matrix durchgeführt (die Projektionsmatrix wird nur einmal pro Fenstergröße oder sogar nur einmal pro Lauf erstellt), so dass der Matrixstapel der Modellansicht der aktive Matrixstapel sein soll (dh von allen betroffen) die Matrix ruft). Deshalb lautet der Trend: "Wenn Sie einen anderen Matrix-Stack modifizieren möchten, dann schalten Sie ihn ein, machen Sie Ihre Arbeit und kehren Sie zu Modelview zurück". – Kos