Где находится матрица проекции?
Если вы не установите матрицу проекции, то координаты должны быть установлены в нормализованном пространстве устройства.В НДЦ все координаты находятся в диапазоне [-1,0, 1,0]:
например,
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.5, 0.5, 0);
glRotatef(90, 1, 0, 0);
glutSolidCone(1.0, 1.0, 20, 20);
glTranslatef(-0.5, -0.5, 0);
glRotatef(-90, 1, 0, 0);
В качестве альтернативы вы можете настроить ортографическую проекцию, которая проецирует мировые координаты 1: 1к координатам окна.Матрица проекции может быть установлена с помощью glOrtho
:
например
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 500.0, 500.0, 0.0, -100.0, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(250, 250, 0);
glRotatef(90, 1, 0, 0);
glutSolidCone(20, 20, 20, 20);
glTranslatef(-250, -250, 0);
glRotatef(-90, 1, 0, 0);
glFlush();
glutSwapBuffers();
}
Матрица проекции описывает отображение из трехмерных точек вида на сцене, чтобы2D точки в окне просмотра.В ортогональной проекции координаты пространства просмотра линейно отображаются на координаты пространства клипа.Координаты пространства клипа равны нормализованным координатам устройства.
Нормализованные координаты устройства линейно отображаются в прямоугольник области просмотра.Прямоугольник области просмотра может быть определен как glViewport
.Первоначально он определяется размером окна.
Обратите внимание, что рисование с помощью glBegin
/ glEnd
последовательностей и набора матриц с фиксированными функциями устарело с десятилетий.См. конвейер с фиксированными функциями и Legacy OpenGL .Прочитайте о Vertex Specification и Shader , чтобы узнать о современном способе рендеринга.