Прежде всего, обратите внимание, что матричный стек OpenGL и чертеж с последовательностями glBegin
/ glEnd
устарели уже более 10 лет.Прочитайте о Конвейере фиксированных функций и посмотрите Спецификация вершины для современного способа рендеринга.
glOrtho
Установите матрицу ортогональной проекции.Матрица проекции описывает отображение от трехмерных точек вида на сцене к двухмерным точкам в области просмотра.В ортогональной проекции координаты в пространстве вида линейно отображаются на координаты пространства отсечения, а координаты пространства отсчета равны нормализованным координатам устройства, поскольку компонент w
равен 1 (для декартовой входной координаты).Значения слева, справа, снизу, сверху, близко и далеко определяют поле.Вся геометрия, которая находится внутри объема окна, «видна» в окне просмотра.
Но glOrhto
умножает текущую матрицу в стеке mtrix на новую матрицу ортографической проекции.
Это означает, что если вы делаете
glMatrixMode(GL_PROJECTION);
glOrtho(0,500,0,500,-1,1);
в каждом кадре, то матрица проекции будет непрерывно и постепенно изменяться
Чтобы установить матрицу в стек матрицы, матрицастек должен быть инициализирован сначала с помощью единичной матрицы:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0,500,0,500,-1,1);
Еще одна возможность - использовать glPushMatrix
и glPopMatrix
в начале и в конце поднятия.Нажмите матрицу, прежде чем изменить ее, и вставьте ее после рендерингаПоскольку glOrtho
меняет самую верхнюю матрицу в стеке матриц, glPopMtrix
отменяет изменения.
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glOrtho(0,500,0,500,-1,1);
// do the rendering here
glPopMatrix();