- •Синхронизация процессов и цепочек
- •Венгерская нотация, ссылки и ресурсы
- •Стандартные кисти, иконки, курсоры
- •Пример:
- •Введение в ресурсы
- •Курсоры, пиктограммы и растровые изображения
- •Работа с текстом
- •Работа с мышью
- •Ресурс панель диалога
- •Основные понятия машинной графики
- •Рассмотрим такие примитивы, как вершина, отрезок, воксель и модели, строящиеся на их основе, а также функциональные модели. Полигональные модели
- •Воксельные модели
- •Поверхности свободных форм (функциональные модели)
- •Проекции
- •Различают следующие проекции.
- •Алгоритм Коэна - Сазерленда отсечения прямоугольной областью
- •Метод дихотомии
- •Задача удаления невидимых линий и поверхностей
- •Удаление нелицевых граней многогранника. Алгоритм Робертса
- •Алгоритм Варнока
- •Алгоритм Вейлера-Азертона
- •Метод z-буфера
- •Методы приоритетов. Алгоритм художника.
- •Алгоритм плавающего горизонта
- •Алгоритмы построчного сканирования для криволинейных поверхностей
- •Библиотека OpenGl
- •Простейшая программа
- •Создание формы
- •Формат пикселя
- •Вершины и система координат
- •Треугольники
- •Многоугольники
- •Область рисования
- •Преобразование координат. Матрицы
- •Видовое преобразование. Масштабирование, поворот и перенос
- •Параметры вида. Перспективная проекция
- •Буфер глубины
- •Надстройки над OpenGl
- •Источник света
- •Свойства материала и модель освещения
- •Отсечение
- •Анализ алгоритмов. Модель вычислений
- •Асимптотический анализ алгоритмов
- •Анализ рекурсивных алгоритмов
- •Метод заметающей прямой
- •Метод локусов. Задачи геометрического поиска
- •Задачи регионального поиска. Многомерное двоичное дерево
- •Задачи локализации точки. Метод луча
- •Локализация точки на планарном подразбиении. Метод полос
- •Некоторые основные понятия вычислительной геометрии
- •Построение звездчатого полигона
- •Предварительная разработка алгоритма построения выпуклой оболочки на плоскости
- •Метод обода Грэхема
- •Триангуляция Делоне
- •Диаграмма Вороного
- •Построение диаграммы Вороного
- •Модель osi
- •Уровни модели tcp/ip
Библиотека OpenGl
OpenGL – это стандартная библиотека для всех 32-разрядных операционных систем.
В Delphi код, написанный как обработчик события OnCreate, выполняется при получении приложением сообщения WM_CREATE и т.д.
Все окна при создании регистрируются в операционной системе и получают дескриптор типа HWND.
Ссылка на контекст устройства – это величина типа HDC. Ссылке соответствует свойство Canvas.Handel формы. В OpenGL имеется понятие - ссылка на контекст воспроизведения (тип HGLRC), аналогичное ссылке на контекст устройства.
Библиотека OpenGL является переносимой по отношению к платформам, ОС и средам программирования. Для обеспечения независимости в ней определены собственные типы с префиксом GL. Типы в OpenGL: GLint, GLfloat, GLdouble. Для массивов введены специальные типы: TGLArrayf4=array[0..3] of GLfloat;
Функции и процедуры имеют следующий синтаксис:
CommandName[1234][b s i f d ub us ui]
byte, short, int, float, double, unsigned byte, unsigned short, unsigned int
Например, glColor3i команда с тремя целыми аргументами.
Простейшая программа
Список uses необходимо самостоятельно дополнить модулем OpenGL.
private
hrc: HGLRC; // ссылка на контекст воспроизведения
end;
Необходимы обработчики следующих событий: OnCreate, OnPaint, OnResize, OnDestroy. Обработчики событий вывода и изменения размеров могут быть одинаковыми.
Создание формы
procedure TfrmGL.FormCreate(Sender: TObject);
begin
SetDCPixelFormat(Canvas.Handle); задаем формат пикселя, это обращение к соответствующей процедуре (см. ниже).
hrc := wglCreateContext(Canvas.Handle); создаем контекст воспроизведения, аргументом является ссылка на контекст устройства, на который будет осуществляться вывод. Сейчас устройством вывода служит окно формы.
end;
Вывод картинки:
procedure TfrmGL.FormPaint(Sender: TObject);
begin
wglMakeCurrent(Canvas.Handle, hrc); установить контекст
glViewPort (0, 0, ClientWidth, ClientHeight); // область вывода
glClearColor (0.9, 0.1, 0.75, 1.0); // цвет фона RGB (0-1)
glClear (GL_COLOR_BUFFER_BIT); // очистка буфера цвета
wglMakeCurrent (0, 0); освободить контекст
end;
Чтобы при изменении размеров окна картинка не изменялась, у события OnResize должен быть такой же обработчик, что и у OnPaint.
Завершение работы приложения:
procedure TfrmGL.FormDestroy(Sender: TObject);
begin
wglDeleteContext(hrc); удаление контекста
end;
Формат пикселя
Специальная структура TPixelFormatDescriptor представляет данные формата пикселей. Полям структуры присваиваются желаемые значения, затем вызовом функции ChoosePixelFormat осуществляется запрос системе, поддерживается ли данном рабочем месте выбранный формат пикселей, выбирается наиболее совпадающий формат с описанным в структуре, на которую указывает pfd, и, наконец, вызовом функции SetPixelFormat устанавливается заданный формат в контексте устройства.
procedure SetDCPixelFormat (hdc : HDC);
var
pfd : TPixelFormatDescriptor;
nPixelFormat : Integer;
begin
FillChar (pfd, SizeOf (pfd), 0);
// здесь можно добавить флаги
nPixelFormat := ChoosePixelFormat (hdc, @pfd);
SetPixelFormat (hdc, nPixelFormat, @pfd);
end;
Здесь явно не заданно ни одно из полей структуры, но можно добавить строку флагов:
pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
разрешено рисование в окне или на поверхности устройства
поддерживает рисование OpenGL.
поддерживает режим двойной буферизации. Вывод осуществляется не на экран, а в память, затем содержимое буфера выводится на экран (позволяет избежать мерцания).
