С помощью функций примитивов, существующих в основной библиотеке OpenGL, можно строить точки, прямолинейные отрезки, закрашенные выпуклые многоугольники, а также пиксельные или растровые матричные структуры. В библиотеке GLUT можно найти стандартные процедуры для изображения строк символов. Другие виды примитивов, такие как окружности, эллипсы или закрашенные вогнутые многоугольные области, также можно строить с помощью этих функций, или с помощью стандартных процедур из библиотек GLU и GLUT. Все координатные значения выражаются в абсолютных координатах в правосторонней декартовой системе координат. Координаты точек, с помощью которых описывается сцена, могут задаваться как в двух-, так и в трехмерной системе координат, Для задания значений координат могут использоваться целые числа или значения с плавающей запятой, кроме того, можно задавать положение с помощью указателя на массив координатных значений. Затем описание сцены с помощью функций визуализации преобразуется в двухмерное изображение на таком устройстве вывода, как монитор. За исключением функции glRect, координаты каждой точки из набора точек, прямых или многоугольников задаются с помощью функции glVertex. А набор функций glVertex, определяющих каждый примитив, помещается между парой операторов glBegin/glEnd, где тип примитива определяется символьной константой, которая выступает аргументом функции glBegin. Если описание сцены состоит из множества закращенных многоугольных поверхностей, можно рационально создать изображение с помощью массива вершин OpenGL, в которых содержится вся геометрическая и другая необходимая информация.
В табл. 3.1 перечислены основные функции для создания результирующих примитивов в OpenGL. Кроме того, в этой же таблице приводятся некоторые связанные с ними стандартные процедуры.
ТАБЛИЦА 3.1. Таблица функций результирующих примитивов OpenGL и связанных с ними процедур
| 
 Функция  | 
 Описание  | 
| 
 gluOrtho2D  | 
 Задается двухмерная внешняя система координат  | 
| 
 glVertex*  | 
 Выбор координат. Эта функция должна помещаться между парой glBegin/glEnd  | 
| 
 glBegin (GL_POINTS) ;  | 
 Строится одна или несколько точек, каждая из которых задается с помощью функции glVertex. Затем список координат закрывается с помощью оператора glEnd  | 
| 
 Функция  | 
 Описание  | 
| 
 glBegin (GL_LINES);  | 
 Изображается набор прямолинейных отрезков, координаты концов которых задаются с помощью функции glVertex. Затем список конечных точек закрывается с помощью оператора glEnd  | 
| 
 glBegin (GL_LINE_STRIP);  | 
 Строится ломаная линия, которая задается с помощью такой же структуры, что и GL_LINES  | 
| 
 glBegin (GL_LINE_LOOP);  | 
 Изображается замкнутая ломаная линия, которая задается с помощью такой же структуры, что и GL_LINES  | 
| 
 glRect*  | 
 Строится закрашенный прямоугольник, лежащий в плоскости ху  | 
| 
 glBegin (GL_POLYGON);  | 
 Изображается закрашенный многоугольник, вершины которого задаются с помощью функции glVertex и завершаются оператором glEnd  | 
| 
 glBegin (GL_TRIANGLES);  | 
 Образуется набор закрашенных треугольников, которые задаются с помощью такой же структуры, что и GL_POLYGON  | 
| 
 glBegin  | 
 Изображается сеть закрашенных треугольников,  | 
| 
 (GL_TRIANGLE_STRIP);  | 
 которая задается с помощью такой же структуры, что и GL_POLYGON  | 
| 
 glBegin  | 
 Строится сеть закрашенных треугольников в ви  | 
| 
 (GL_TRIANGLE_FAN);  | 
 де веера, где все треугольники соединяются в первой вершине, которая задается с помощью такой же структуры, что и GL_POLYGON  | 
| 
 glBegin (GL_QUADS);  | 
 Изображается набор четырехугольников, которые задаются с помощью такой же структуры, что и GL_POLYGON  | 
| 
 glBegin (GL_QUAD_STRIP);  | 
 Изображается сеть закрашенных четырехугольников, которая задается с помощью такой же структуры, что и GL_POLYGON  | 
| 
 glEnableClientState  | 
 Активизируется возможность создания массива  | 
| 
 (GL_VERTEX_ARRAY);  | 
 вершин в OpenGL  | 
| 
 glVertexPointer (size,  | 
 Задается массив координатных значений  | 
| 
 type, stride, array);  | |
| 
 glDrawElements (prim,  | 
 Изображается заданный тип примитива из мас  | 
| 
 num, type, array)  | 
 сива данных  | 
| 
 Функция  | 
 Описание  | 
| 
 glNewList (listlD,  | 
 Набор команд объединяется в таблицу отображения, ко  | 
| 
 listMode)  | 
 торая завершается оператором glEndList  | 
| 
 glGenLists  | 
 Создается один или несколько идентификаторов таблиц отображений  | 
| 
 glIsList  | 
 Функция, которая служит для запроса, использовался уже такой идентификатор таблицы отображения или нет  | 
| 
 glCallList  | 
 Реализуется одна таблица отображения  | 
| 
 glListBase  | 
 Задается значение смещения для массива идентификаторов таблиц отображений  | 
| 
 glCallLists  | 
 Реализуется несколько таблиц отображений  | 
| 
 glDeleteLists  | 
 Удаляется заданная последовательность таблиц отображений  | 
| 
 glRasterPos*  | 
 Задается двух- или трехмерное текущее положение буфера кадра. Это положение используется как опорная точка для битового и пиксельного отображений  | 
| 
 glBitmap (w, h, xO,  | 
 Задается бинарный узор, который должен переноситься  | 
| 
 yO, xShift, yShift,  | 
 на пиксели, координаты которых определяются относи  | 
| 
 pattern)  | 
 тельно текущего положения  | 
| 
 glDrawPixels (w,  | 
 Задается цветовой узор, который должен переноситься  | 
| 
 h, type, format,  | 
 на пиксели, координаты которых определяются относи  | 
| 
 pattern)  | 
 тельно текущего положения  | 
| 
 glDrawBuffer  | 
 Выбирается один или несколько буферов для записи пиксельного отображения  | 
| 
 glReadPixels  | 
 Блок пикселей записывается в выбранный массив  | 
| 
 glCopyPixels  | 
 Блок пикселей копируется из одной части буфера в другую  | 
| 
 glLogicOp  | 
 Выбирается логическая операция для объединения двух  | 
| 
 пиксельных массивов, после того, как такую возможность дает константа СЬ_СОЬ(Ж_ЬСЮ1С_ОР  | |
| 
 glutBitmapCharacter  | 
 Задается шрифт и изображается растровый символ  | 
| 
 (font, symbol);  | |
| 
 glutStrokeCharacter  | 
 Задается шрифт и изображается эскизный символ  | 
| 
 (font, symbol);  | |
| 
 glutReshapeFunc  | 
 Задаются действия, которые должны выполняться при изменении размеров окна изображения  | 
Рис. 3.67. График данных, состоящий из ломаной линии и полимаркера, полученный с помощью процедуры ИпевгарЬ
