Главная » Free Pascal » Графические примитивы языка OpenGL Free Pascal

0

Графические примитивы — это простейшие геометрические фигуры, из кото- рых конструируются более сложные плоские и пространственные объекты. В со- став языка OpenGL включены 10 примитивов, полный перечень которых приведен в табл. 16.1.

Структура любого примитива представляет собой набор точек (вершин), задан- ных своими координатами на плоскости или в пространстве и соединенных между собой тем или иным способом. Для объявления любой вершины используется опе- ратор Vertex, к имени которого добавляется два или три символа — Vertex2f, Vertex3i, Vertex4ub, … Первая цифра, добавляемая к имени оператора, указывает, сколько координат содержится в описании вершины: две (x, y), три (x, y, z) или че- тыре (x, y, z, 1). Следующие за ней одна или две буквы определяют машинный формат, в который должны быть преобразованы числовые значения координат:

± b — однобайтовое целое со знаком (b — от byte);

± ub — однобайтовое целое без знака (ub — от unsigned byte);

± s — двухбайтовое целое со знаком (s — от short);

± us — двухбайтовое целое без знака (us — от unsigned short);

± i — четырехбайтовое целое со знаком (i — от int);

± ui — четырехбайтовое целое без знака (ui — от unsigned int);

± f — четырехбайтовое вещественное (f — от float);

± d — восьмибайтовое вещественное (d — от double).

Аббревиатура суффиксов, приведенная выше, заимствована из обозначений чи- словых типов данных, характерных для языка программирования C.

Описание вершин любого примитива заключается в операторные скобки языка OpenGL — glBegin и glEnd. Открывающая операторная скобка в качестве аргу- мента использует тип примитива (табл. 16.1).

Таблица 16.1

Тип

Пояснение

GL_POINTS

Точки. Каждая вершина представляет отдельную точку

GL_LINES

Отрезки прямых. Последовательная пара точек определяет начало и конец очередного отрезка. Если задано нечетное количество точек, то последняя вершина игнорируется

GL_LINE_STRIP

Ломаная линия. Смежные точки последовательно соединяются друг с другом

GL_LINE_LOOP

Замкнутая ломаная. В дополнение к предыдущему последнее звено образуется соединением последней и первой точек

GL_TRIANGLES

Треугольники. Каждая тройка точек представляет собой вершины отдельного треугольника. Лишние точки в конце (одна или две) игнорируются

GL_TRIANGLE_STRIP

Треугольники, связанные общей стороной. Точки 1, 2 и 3 образуют первый треугольник, точки 2, 3 и 4 — второй треугольник и т. д.

GL_TRIANGLE_FAN

Треугольники, связанные общей вершиной. Точки 1, 2 и 3 образуют первый треугольник, точки 1, 3 и 4 — второй треугольник, точки 1, 4 и 5 — третий треугольник и т. д.

GL_QUADS

Четырехугольники. Каждые четыре точки представляют вершины очередного автономного четырехугольника. Лишние точки в конце (одна, две или три) игнорируются

GL_QUAD_STRIP

Четырехугольники, связанные общей стороной. Точки 1, 2, 3 и

4 образуют первый четырехугольник, точки 3, 4, 5 и 6 — второй, 5,

6, 7 и 8 — третий и т. д.

GL_POLYGON

Выпуклый многоугольник. Вершины соединяются друг с другом последовательно: первая со второй, вторая с третьей, …, последняя с первой. Для неправильно заданных вершин (вогнутый многоугольник, имеет место пересечение ребер и т. п.) результат построения не предсказуем

Пример простейшего описания треугольника:

glBegin(GL_TRIANGLES); glVertex3f(0,0,1); glVertex3f(0,1,0); glVertex3f(1,0,0);

glEnd;

Вершины, участвующие в описании очередного примитива, могут иметь инди- видуальные атрибуты — цвет, размер точки, признак сглаживания острых углов и др. Некоторые из этих характеристик должны предшествовать скобке glBegin, и это означает, что их влияние распространяется на все вершины примитива. Дру- гие атрибуты можно употреблять внутри операторных скобок:

glPointSize(15);             // задание размера точки glEnable(GL_POINT_SMOOTH);    // режим сглаживания углов точек glBegin(GL_TRIANGLES);

glColor3f(1,0,0);           // цвет первой вершины (красный)

glVertex3f(0,0,1);

glColor3f(0,1,0);           // цвет второй вершины (зеленый)

glVertex3f(0,1,0);

glColor3f(0,0,1);           // цвет третьей вершины (синий)

glVertex3f(1,0,0); glEnd;

glDisable(GL_POINT_SMOOTH);   // отмена режима сглаживания

Вы, наверное, уже обратили внимание на то, что операторы языка OpenGL на- чинаются с префикса gl. Аналогичное правило имеет место и для обозначения всех функций библиотек GLU (префикс glu) и GLUT (префикс glut).

Источник: Кетков, Ю. Л., Свободное программное обеспечение. FREE PASCAL для студентов и школьников, Ю. Л. Кетков, А. Ю. Кетков. — СПб.: БХВ-Петербург, 2011. — 384 с.: ил. + CD-ROM — (ИиИКТ)

По теме:

  • Комментарии