С помощью функций примитивов, существующих в основной библиотеке 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. График данных, состоящий из ломаной линии и полимаркера, полученный с помощью процедуры ИпевгарЬ