- •Геометрическое моделирование и отображение двухмерных объектов средствами открытой графической библиотеки
- •Проектирование графической сцены
- •Создание геометрических форм
- •Определение состава объекта
- •Определение координат характерных вершин объекта
- •2.3 Выбор команд библиотеки для отображения объекта
- •Выбор цветовых решений
- •Расстановка графических объектов в сцене
- •Дисплейный список
- •Запись программы
- •Задание по созданию геометрических форм
- •Команды геометрических преобразований
- •Расстановка объектов в сцене с применением
- •3.4 Использование стековой памяти
- •3.5 Расстановка объектов по глубине
- •3.6 Задание по расстановке объектов для самостоятельного выполнения (углубленное задание)
- •Наложение текстуры на двухмерные объекты
- •Процесс наложения текстуры
- •Разработка закона текстурирования
- •Программирование наложения текстуры
- •Дополнительные возможности текстурирования
- •Задание по текстурированию для самостоятельного
- •Отображение динамических сцен
- •5.1 Описание динамики объектов
- •Изменение местоположения объекта
- •Изменение формы объекта
- •5.2 Программирование динамики графических объектов
- •«Заготовка» графической программы, написанной в среде Delphi
Определение координат характерных вершин объекта
Если графический объект является образом реального объекта, найти координаты его характерных точек в ОСК несложно. Нужно просто спроецировать его в масштабе в СКО. В другом случае координаты вершин понятны из их расстановки в ОСК. В любом случае проектировщик выполняет эту работу, исходя из каких-то своих соображений. Пусть в рассматриваемом примере координаты семи вершин стрелки (вершины помечены на рисунке 3 номерами) имеют значения, приведенные в таблице 2.
Таблица 2 – Координаты вершин объекта-стрелки в ОСК
Номер вершины i |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
Координата xi |
-0,4 |
0 |
0 |
-0,4 |
0 |
-0,4 |
0 |
Координата yi |
0,2 |
0,2 |
-0,2 |
-0,4 |
0,4 |
0 |
-0,4 |
2.3 Выбор команд библиотеки для отображения объекта
Для отображения геометрического примитива необходимо задать его характерные вершины и указать, как их нужно соединять (задать тип примитива). Вершина в пространстве задается командой
glVertex2f(х,у); или glVertex3f(х,у,z);
Число 2 или 3 указывает, в каком пространстве – двухмерном или трехмерном – представляется вершина. Буква fозначает тип параметра, в данном случае с плавающей точкой (float), но может использоваться и другой тип:i – целый,d – двойной точности и др. В скобках помещаются параметры команды, это две или три координаты вершины. Они могут задаваться константами, например, glVertex3f(0.5,-0.4,0.0); или переменными. Во втором случае переменные до использования их в команде glVertex должны получить численные значения.
Тип геометрического примитива задается в качестве параметра команды, которая представляет собой пару операторных скобок:
glBegin(<параметр>);
. . .
glEnd();
В качестве параметра используется идентификатор примитива из таблицы 1. Между операторными скобками помещаются команды glVertex, задающие координаты характерных вершин. Например, команды
glBegin(GL_TRIANGLES);glVertex2f(0.0,0.4);
glVertex2f(0.4,0.0);
glVertex2f(0.0,-0.4);glEnd();
описывают треугольник, представляющий собой часть стрелки на рисунке 3.
Пара скобок glBegin – glEnd заносит описываемое в ней изображение (в виде кодов цветояркости) в буфер кадра видеосистемы компьютера. При опросе буфера по закону растра это изображение выводится на экран. Следовательно, можно считать, что скобки glBegin – glEnd рисуют изображение, только не на экране, а пока в памяти компьютера.
В одной паре скобок glBegin – glEnd можно описать несколько однотипных примитивов. Так, наборкоманд
glBegin(GL_LINES);
glVertex2f(0.0,0.0);
glVertex2f(0.1,0.1);
glVertex2f(0.4,0.1);
glVertex2f(0.3,0.0);
glVertex2f(0.5,0.5);
glEnd();
рисует два прямолинейных отрезка, заданных первой–второй и третьей–четвертой командами glVertex, а пятая команда glVertex игнорируется, так как описываемой ей вершине нет «пары».
