glMatrixMode не «активирует» матрицы. Фиксированный конвейер OpenGL использует 3 матрицы (иногда 4): две отвечают за преобразование геометрии, одну за преобразование текстурного пространства (и некоторые реализации, одну за корректировку цвета). Эти матрицы используются постоянно.
Матрица modelview используется для перемещения геоемтрии. Поскольку в OpenGL нет «камеры», зритель позиционируется путем перемещения всей геометрии в направлении, противоположном (= обратному) движениям «камеры».
Матрица projection используется для преобразования геометрии из пространства просмотра модели в пространство клипа, т.е. проецирует преобразованную геометрию в область просмотра.
Матрица текстура преобразует координаты текстуры. В случае, если (s, t, r, q) даны напрямую, преимущество этой матрицы на первый взгляд не ясно. Но OpenGL также позволяет генерировать текстурные координаты из позиций вершин. Это вместе с текстурной матрицей позволяет реализовать проекционные текстуры .
Матрица color используется редко и даже не доступна во всех реализациях (она является частью расширения). Если доступно, он преобразует цвета входящих вершин. Так как не существует неявных генераторов цвета, что тогда использовать? Ну, это может быть использовано для преобразования между линейными цветовыми пространствами, например, RGB-> XYZ или любое другое преобразование цветового пространства, которое может быть выражено в виде матрицы скаляров. В наши дни никто не использовал цветовую матрицу, шейдеры делают работу намного лучше.
glMatrixMode есть, чтобы не было переполнения функций. В противном случае вам понадобится:
glModelviewLoadIdentity
glModelviewLoadMatrix
glModelviewMultMatrix
glModelviewRotate
glModelviewTranslate
glModelviewScale
glModelviewPushMatrix
glModelviewPopMatrix
glProjectionLoadIdentity
glProjectionLoadMatrix
glProjectonMultMatrix
glProjectionRotate
glProjectionTranslate
glProjectionScale
glProjectionPushMatrix
glProjectionPopMatrix
и так далее. Также вы не можете использовать такие функции, как glFrutum как в матрицах проекций, так и в матрицах текстур. Вам тоже понадобятся два из них.
И последний, но не менее важный совет. Настройка области просмотра и матрицы проекции принадлежит функции рендеринга. Большинство уроков, которые вы увидите, помещают их в обработчик изменения размера окна, что совершенно не подходит для этого. Не подражайте этой дурной привычке.