Базовые примитивы OpenGL специфицируются набором точек в пространстве (вершин). Формат определения объектов представлен ниже.
glBegin(<Tjm>) ; glVertex*(…);
glVertex*(…); glEnd();
Значение <тий> определяет вид объекта и несет OpenGL информацию о том, каким образом нужно интерпретировать следующий далее список вершин. Между вызовами функций glBegin( ) и glEnd( ) могут быть включены операторы вызовов других функций OpenGL. Например, здесь могут стоять операторы вызова функций задания атрибутов или вычисления значений координат вершин. Основное концептуальное отличие примитивов разного типа состоит в том, имеют ли они внутреннюю область. Все примитивы, кроме точек, определяются либо в терминах набора вершин, либо в терминах отрезков прямых линий (не следует путать отрезок прямой линии, который имеет ограниченные размеры, и прямую, которая представляет собой геометрический объект бесконечной протяженности). Естественно, что отдельный
Графическое программирование
отрезок4 задается парой вершин, но отрезок играет настолько большую роль в описании прочих объектов, что его можно рассматривать как базовый примитив. Отрезки можно использовать для аппроксимации кривых линий или с помощью отрезков соединять соседние точки на графике функции. Отрезками отображаются и ребра замкнутых геометрических объектов, которые имеют внутреннюю область, например многоугольников.
В OpenGL есть несколько способов формирования отрезков (рис. 2.8).
Отрезки (GL_LINES)
Тип GL LINES задает формирование отрезка по двум вершинам, которые рассматриваются как его начальная и конечная точки. Обратите внимание на то, что построенные таким образом отрезки, как правило, не стыкуются друг с другом в крайних точках.
Ломаные линии (GLLINESTRIP)
Если необходимо сформировать ломаную линию (polyline) - последовательность стыкующихся отрезков5, - то используется тип GL LINE_STRIP. Чаще всего ломаные линии используются для аппроксимации кривых. Если желательно получить замкнутый контур, то можно либо указать в качестве конечной и начальной в списке одну и ту же вершину, либо использовать специальный тип, определяющий именно замкнутую ломаную, - GL_LINE_L00P. В этом случае OpenGL самостоятельно свяжет отрезком последнюю вершину в списке с первой.