Почему glLoadIdentity должен вызываться после каждого вызова glMatrixMode? - PullRequest
8 голосов
/ 05 августа 2011

Я читаю книгу по OpenGL, SDL и прочитал некоторые документы OpenGL.Я также прочитал этот пост: Что делает glLoadIdentity () в OpenGL?

Я понимаю, что делает glLoadIdentity (), и почему он используется в общем смысле (чтобы вернутьтекущая матрица возвращается в исходное состояние).Чего я не знаю, так это того, почему я возвращаю его в исходное состояние.Например:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

glOrtho(0.0f, 640, 480, 0.0f, -1.0f, 1.0f);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

Я не совсем уверен, почему glLoadIdentity () должен вызываться после каждого вызова glMatrixMode.

1 Ответ

14 голосов
/ 05 августа 2011

Когда вызывать glMatrixMode () - 1-й ответ пытается объяснить:

glLoadIdentity () обычно вызывается сразу после смены режима матрицы, поэтому вы начинаете «заново», если хотите. Матричные преобразования, такие как gluPerspective (), glOrtho (), glFrustum (), glRotate (), glMultMatrix (), glTranslate (), являются кумулятивными операциями, поскольку они агрегируют, чтобы позволить вам описывать сложные преобразования трехмерного пространства мира или описывать просмотр OpenGL объем. Пример: если я хочу, чтобы куб переводился в направлении + X, а затем вращался вокруг оси Z, я запускаю glRotate (), за которым следует glTranslate ().

glLoadIdentity () стирает матрицу (текущего режима матрицы) с единичной матрицей, поэтому следование за gluPerspective () с помощью glLoadIdentity () эквивалентно единственному вызову glLoadIdentity (). Другими словами, эта последовательность бессмысленна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...