
- •Синхронизация процессов и цепочек
- •Венгерская нотация, ссылки и ресурсы
- •Стандартные кисти, иконки, курсоры
- •Пример:
- •Введение в ресурсы
- •Курсоры, пиктограммы и растровые изображения
- •Работа с текстом
- •Работа с мышью
- •Ресурс панель диалога
- •Основные понятия машинной графики
- •Рассмотрим такие примитивы, как вершина, отрезок, воксель и модели, строящиеся на их основе, а также функциональные модели. Полигональные модели
- •Воксельные модели
- •Поверхности свободных форм (функциональные модели)
- •Проекции
- •Различают следующие проекции.
- •Алгоритм Коэна - Сазерленда отсечения прямоугольной областью
- •Метод дихотомии
- •Задача удаления невидимых линий и поверхностей
- •Удаление нелицевых граней многогранника. Алгоритм Робертса
- •Алгоритм Варнока
- •Алгоритм Вейлера-Азертона
- •Метод z-буфера
- •Методы приоритетов. Алгоритм художника.
- •Алгоритм плавающего горизонта
- •Алгоритмы построчного сканирования для криволинейных поверхностей
- •Библиотека OpenGl
- •Простейшая программа
- •Создание формы
- •Формат пикселя
- •Вершины и система координат
- •Треугольники
- •Многоугольники
- •Область рисования
- •Преобразование координат. Матрицы
- •Видовое преобразование. Масштабирование, поворот и перенос
- •Параметры вида. Перспективная проекция
- •Буфер глубины
- •Надстройки над OpenGl
- •Источник света
- •Свойства материала и модель освещения
- •Отсечение
- •Анализ алгоритмов. Модель вычислений
- •Асимптотический анализ алгоритмов
- •Анализ рекурсивных алгоритмов
- •Метод заметающей прямой
- •Метод локусов. Задачи геометрического поиска
- •Задачи регионального поиска. Многомерное двоичное дерево
- •Задачи локализации точки. Метод луча
- •Локализация точки на планарном подразбиении. Метод полос
- •Некоторые основные понятия вычислительной геометрии
- •Построение звездчатого полигона
- •Предварительная разработка алгоритма построения выпуклой оболочки на плоскости
- •Метод обода Грэхема
- •Триангуляция Делоне
- •Диаграмма Вороного
- •Построение диаграммы Вороного
- •Модель osi
- •Уровни модели tcp/ip
Свойства материала и модель освещения
Свойства материала задаются с помощью команды glMaterialfv. Характеристики следующие:
GL_AMBIENT Рассеянный или фоновый свет;
GL_DIFFUSE Диффузный свет;
GL_SPECULAR Зеркальный свет;
GL_EMISSION Излучаемый свет;
GL_SHININESS Степень зеркального отражения.
Чтобы цветовой фильтр не перебивал задаваемые свойства, не включать режим GL_COLOR_MATERIAL.
Параметры команды glMaterialfv:
лицевая поверхность (GL_FRONT), обратная (GL_BACK), и та и другая (GL_FRONT_AND_BACK).
Характеристика материала
Массив цветовой гаммы
Модель освещения задается командой glLightModelfv. Кроме того, в примере ниже источник света смещен с помощью массива position и команды glLight.
procedure TfrmGL.FormPaint(Sender: TObject);
const MaterialCyan: Array[0..3] of GLfloat=(0.0,1.0,1.0,0.0);
position : array[0..3] of GLfloat = ( 0.0, 3.0, 2.0, 0.0 );
begin
glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); glPushMatrix;
glLightfv(GL_LIGHT0, GL_POSITION, @position);
//или задание свойств материала glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MaterialCyan);
// или установка модели освещения
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,@MaterialCyan);
//здесь первый пар-р – задание полной фоновой интенсивности света
glutSolidSphere (1.5, 20, 20);
glPopMatrix;
SwapBuffers(DC);
end;
Команда glLight может задавать диффузную и фоновую составляющие света:
glLightfv(GL_LIGHT0, GL_diffuse, @light_diffuse);
Следующая команда удаляет гладкость форм:
glShadeModel(gl_flat);
Хороший пример блика на сфере:
procedure TfrmGL.FormPaint(Sender: TObject);
const MaterialCyan: Array[0..3] of GLfloat=(0.0,1.0,1.0,1.0);
position : array[0..3] of GLfloat = ( 0.0, 3.0, 2.0, 0.0 );
dif : array[0..3] of GLfloat = ( 0.0, 0.8, 1.0, 1.0 );
begin
glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); glPushMatrix;
glLightfv(GL_LIGHT0, GL_position, @position);
glMaterialfv(GL_FRONT, GL_DIFFUSE, @dif);
glMaterialfv(GL_FRONT, GL_SPECULAR, @MaterialCyan);
glMaterialf(GL_FRONT, GL_SHININESS, 25.0);
glutSolidSphere (1.5, 20, 20);
glPopMatrix;
SwapBuffers(DC);
end;
Отсечение
Для отсечения части объекта необходимо задать координаты плоскости отсечения:
Const eqn : Array [0..3] of GLdouble = (1.0, 0.0, -1.0, 1.0);
И затем использовать:
glClipplane(gl_clip_plane0,@eqn);
glEnable(gl_clip_plane0);
Тогда можно задавать различные материалы для внешней и внутренней поверхностей:
glLightModelf(GL_LIGHT_MODEL_TWO_SIDE,1); режим расчета освещенности для обеих сторон поверхности
glMaterialfv(GL_front, GL_DIFFUSE, @dif);
glMaterialfv(GL_back, GL_DIFFUSE, @back_dif);
Туман
Цвет дыма задается серым:
Const fogColor : array[0..3] of GLfloat = ( 0.5, 0.5, 0.5, 1.0 );
begin
glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glPushMatrix;
glEnable(GL_FOG); // включаем режим тумана
fogMode := GL_EXP; // переменная, хранящая режим тумана (типа glint)
glFogi(GL_FOG_MODE, fogMode); // задаем закон смешения тумана
glFogfv(GL_FOG_COLOR, @fogColor); // цвет дымки
glFogf(GL_FOG_DENSITY, 0.35); // плотность тумана
glHint(GL_FOG_HINT, GL_DONT_CARE); //предпочтений к работе тумана нет
Вместо использования переменной fogMode можно указывать конкретные законы: GL_LINEAR, GL_EXP2, GL_EXP.