Почему коды перекодировки заканчиваются на glMatrixMode (GL_MODELVIEW)? - PullRequest
2 голосов
/ 22 ноября 2010

При просмотре примеров изменения формы в Красной книге я обычно нахожу что-то вроде:

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);

}

Я понимаю, что вызов glMatrixMode(GL_PROJECTION); с последующим glLoadIdentity(); сбрасывает матрицу проекции, но я не понимаюпочему glMatrixMode(GL_MODELVIEW) обычно вызывается в конце изменения формы.

В этом конкретном примере glFrustum влияет на матрицу проекции, верно?Почему GL_MODELVIEW вызывается позже?Будет ли иметь значение, если последний вызов glMatrixMode(GL_MODELVIEW) опущен?

1 Ответ

3 голосов
/ 22 ноября 2010

Большая часть кода рендеринга повлияет на GL_MODELVIEW, потому что это то, что влияет на трансляцию объекта и положение камеры.Однако код изменения размера работает на GL_PROJECTION.Программист, вероятно, предполагает, что текущая матрица является представлением модели в большей части своего кода, и, когда необходимо повлиять на другую матрицу, он или она изменит матрицу, обновит ее, а затем изменит цель на GL_MODELVIEW такостальная часть кода не нацелена на неправильную матрицу.

Как правило, функции OpenGL влияют на любую матрицу, на которую на данный момент нацелены, поэтому вы меняете матрицу.

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