- •Синхронизация процессов и цепочек
- •Венгерская нотация, ссылки и ресурсы
- •Стандартные кисти, иконки, курсоры
- •Пример:
- •Введение в ресурсы
- •Курсоры, пиктограммы и растровые изображения
- •Работа с текстом
- •Работа с мышью
- •Ресурс панель диалога
- •Основные понятия машинной графики
- •Рассмотрим такие примитивы, как вершина, отрезок, воксель и модели, строящиеся на их основе, а также функциональные модели. Полигональные модели
- •Воксельные модели
- •Поверхности свободных форм (функциональные модели)
- •Проекции
- •Различают следующие проекции.
- •Алгоритм Коэна - Сазерленда отсечения прямоугольной областью
- •Метод дихотомии
- •Задача удаления невидимых линий и поверхностей
- •Удаление нелицевых граней многогранника. Алгоритм Робертса
- •Алгоритм Варнока
- •Алгоритм Вейлера-Азертона
- •Метод z-буфера
- •Методы приоритетов. Алгоритм художника.
- •Алгоритм плавающего горизонта
- •Алгоритмы построчного сканирования для криволинейных поверхностей
- •Библиотека OpenGl
- •Простейшая программа
- •Создание формы
- •Формат пикселя
- •Вершины и система координат
- •Треугольники
- •Многоугольники
- •Область рисования
- •Преобразование координат. Матрицы
- •Видовое преобразование. Масштабирование, поворот и перенос
- •Параметры вида. Перспективная проекция
- •Буфер глубины
- •Надстройки над OpenGl
- •Источник света
- •Свойства материала и модель освещения
- •Отсечение
- •Анализ алгоритмов. Модель вычислений
- •Асимптотический анализ алгоритмов
- •Анализ рекурсивных алгоритмов
- •Метод заметающей прямой
- •Метод локусов. Задачи геометрического поиска
- •Задачи регионального поиска. Многомерное двоичное дерево
- •Задачи локализации точки. Метод луча
- •Локализация точки на планарном подразбиении. Метод полос
- •Некоторые основные понятия вычислительной геометрии
- •Построение звездчатого полигона
- •Предварительная разработка алгоритма построения выпуклой оболочки на плоскости
- •Метод обода Грэхема
- •Триангуляция Делоне
- •Диаграмма Вороного
- •Построение диаграммы Вороного
- •Модель osi
- •Уровни модели tcp/ip
Вершины и система координат
Вершина – это точка в трехмерном пространстве. Для ее определения в библиотеке реализована специальная команда:
glVertex [2 3 4] [s i f d];
glVertex2 – определяет x и y, z=0, w=1
glVertex3 – определяет x, y, z, w=1
glVertex4 – определяет x, y, z, w.
Примитив или группа однотипных примитивов, к которым относятся точки, линии, ломанные, треугольники и т.д. определяются внутри командных скобок glBegin / glEnd.
glBegin (mode);
...
glEnd;
Параметр mode определяет примитивы, которые создаются из вершин, заданных между этими командами.
Точки
glBegin (GL_POINTS); // открываем командную скобку
glVertex2f (-1, -1); // вывод вершины
glVertex2f (-0.5, 1);
glVertex2f (0, 0);
glVertex2f (1, -1);
glVertex2f (1, 1);
glEnd; //закрываем командную скобку
– вывод отдельных точек
––––––––––––––––––––
glPointSize (20); // размер точек, устанавливается до командных скобок!
// По умолчанию 1.0
glColor3f (1.0, 0.0, 0.5); // текущий цвет примитивов
Цветовая гамма RGB, значения от 0.0 до 1.0. Если задан четвертый параметр () – он определяет степень прозрачности.
glEnable(GL_POINT_SMOOTH); точки будут в виде кругов, а не квадратов (по умолчанию), устанавливается режим до командных скобок!
Например, вывод 100 разноцветных точек:
glBegin (GL_POINTS);
For i := 1 to 100 do begin
glColor3f (random, random, random); если нет заданного значения, ex: random(20), то диапазон от 0 до 1.
glVertex2f (random * 2 - 1, random * 2 - 1);
end;
glEnd;
Линии
glBegin(GL_LINES); выводит отрезки, задаваемые парами начало-конец.
glLineWidth(2.5); задание ширины, за командными скобками! По умолчанию 1.0.
Устранить ступенчатость можно функцией
glEnable(GL_LINE_SMOOTH);
Константа GL_LINE_STRIP (glBegin) определяет ломанную, вершины которой соединяются одна за другой. GL_LINE_LOOP – замкнутая ломанная. Для рисования пунктирной ломанной перед командными скобками следует задать:
glLineStipple(1,$F0F0); Задает масштабный множитель (счетчик повторов бит) и шаблон штриховки – 16-разрядный шаблон, биты которого определяют рисуемые фрагменты.
glEnable(GL_LINE_STIPLE);
Треугольники
glBegin(GL_TRIANGLES); задаются тройки вершин.
glBegin(GL_TRIANGLE_STRIP); связанные треугольники: 1-2-3, 2-3-4, 3-4-5 и т.д. по номерам вершин.
Если перед рисование вершины в цикле поставить установку случайного цвета, и добавить процедуру обработки события OnKeyPress содержащую только Refresh, то по нажатию любой клавиши картинка будет обновляться, а переходы цвета будут плавными.
Многоугольники
Прямоугольник задается функцией glRectf(-0.5, -0.5, 0.5, 0.5);
Произвольные многоугольники с вершинами по четыре:
glBegin(GL_QUADS);
Многоугольник из связанных треугольников с общей вершиной, в качестве которой берется первая, строится: glBegin(GL_POLYGON); - выпуклый многоугольник.
Обработка курсора мышки
В секции private следует определить две переменных, задающих позицию курсора:
xpos : GLfloat; ypos : GLfloat;
Вывод точек можно осуществлять на основе этих переменных. Кроме того, необходим обработчик события OnMouseMove. Например:
procedure TfrmGL.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); Х и Y текущие координаты курсора.
begin
xpos := 2 * X / ClientWidth - 1;
ypos := 2 * (ClientHeight - Y) / ClientHeight - 1;
Refresh; // перерисовка окна при каждом движении курсора
end;
Тогда точки будут рисоваться в позиции курсора мышки.
Обработка нажатия клавиш
Необходим обработчик события KeyDown , например:
procedure TfrmGL.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
Begin
If Key = VK_ESCAPE then Close //выход по Esc
end;
