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