- •Лекция 1 Основные понятия OpenGl
- •1.2 Однородные координаты и матрицы
- •1.3 Поворот точки вокруг прямой заданной точкой а(a,b,c) и направляющим вектором e(l,m,n), , на угол φ.
- •1.4 Система координат
- •1.5 Вершины
- •Лекция 2 Освещение объектов
- •2.1Основные понятия
- •2.2 Задание цвета объекта
- •2.3 Освещение объектов
- •2.3.1 Свойства диффузного отражения
- •2.3.2 Свойства зеркального отражения
- •Лекция 3
- •3.1 Контекст воспроизведения
- •3.2 Стандартные функции библиотеки OpenGl
- •3.3 Функции библиотеки glu
- •3.4 Рекомендации по созданию графических приложений
- •Лекция 4
- •Свойства материалов
- •Установка источников света
- •Модель освещения
- •Смешение цветов
- •4.5 Задание теста глубины
- •Лекция 5 Наложение текстуры на объект
- •Задание параметров текстуры
- •Задание параметров текстуры
- •Взаимодействие текстуры с объектом
- •Привязка координат текстуры к объекту
- •Подготовка текстуры из bmp файла, для случая, когда размеры файла известны
- •Пример инициализации двухмерной текстуры
- •Лекция 6. Буфер трафарета
- •6.1 Тест трафарета
- •6.2 Логические операции с графическими объектами
- •6.2.1 Описание метода вычитания графических объектов
- •Лекция 7. Сплайновые поверхности
- •7.1 Кривые Безье
- •7.2 Отображение кривых Безье в OpenGl
- •7.3 Отображение поверхностей Безье в OpenGl
- •Лекция 8. Выбор графических объектов на экране
- •8.1 Идея метода
- •Лекция 9. Экспорт трехмерных изображений из 3d Studio max
- •9.1 Формат файла gms
- •9.2 Импортирование изображений объектов в программу
- •9.3 Загрузка файла формата gms в Delphi
- •Лекция 10 Вспомогательные функции
- •10.1.Работа с таймером
- •10.2 Обработка нажатия клавиши
- •10.3 Вывод текста на экран
- •Литература
3.4 Рекомендации по созданию графических приложений
Отдельные объекты сцены, целесообразно, описывать в своей системе координат и оформлять отдельными процедурами
Вызов этих процедур, а возможно и взаимодействие объектов сцены, следует описывать в стандартной процедуре FormPaint. (См. Лаб0\min).
Начинаться эта процедура должна с оператора wglMakeCurrent(Canvas.Handle, hrc); - активизирующей контекст воспроизведения.
После этого оператора вызываются все объекты сцены и операторы преобразования системы координат, определяющие взаимодействие объектов. Для случая двойной буферизации, процедура FormPaint заканчивается оператором SwapBuffers(DC), переписывающем изображение из буфера на устройство вывода.
После окончания работы в процедуре FormDestroy, следует освободить контекст воспроизведения
wglMakeCurrent(0, 0);
wglDeleteContext(hrc);
ReleaseDC (Handle, DC);
DeleteDC (DC);
Если по какому либо событию, например по времени, необходимо перерисовать изображение на экране, то для этого следует вызвать команду InvalidateRect(Handle, nil, False);
Лекция 4
Свойства материалов
Различные материалы по-разному отражают свет. Металлические поверхности, это делает хорошо, а пластмассовые хуже, поэтому они выглядят более тусклыми. Некоторые поверхности сами излучают свет (например, фосфор).
В OpenGL есть команды, описывающие свойства материала.
-
Векторная версия (для ввода векторов)
Скалярная версия (для ввода коэффициентов)
glMaterialfv (face,pname, @param);
glMaterialfv (face, pname, param);
face: GL_FRONT – свойства лицевой стороны объекта
GL_ BACK – свойства тыльной стороны объекта
GL_FRONT_AND_BACK – свойства лицевой и тыльной сторон объекта
-
Pname
параметры
Значение по умолчанию
Наименование
GL_AMBIENT
(r, g, b, a)
(0.2, 0.2, 0.2,1)
Фоновое
GL_DIFFUSE
(r, g, b, a)
(0.8, 0.8, 0.8,1)
Диффузное
GL_SPECULAR
(r, g, b,a)
(0, 0, 0,1)
зеркальное
GL_EMISSION
(r, g, b, a)
(0, 0, 0,1)
самосвечение
GL_SHININESS
n
0
Коэффициент шероховатости cosn(α)
Пример.
Const
mat_Yellow: array[0..3] of GLfloat = ( 1.0, 1.0, 0.0,1.0 );
…
glMaterialfv (GL_FRONT, GL_AMBIENT, @mat_Yellow);
Кроме описанного выше, в OpenGl есть ещё один, очень удобный, способ
задания свойств материала.
Этот способ инициализируется командой glEnable( gl_Color_Material);
А настраивается glColorMaterial(face, mode);
face – принимает те же значения, что и для команд glMaterialf. А mode, по умолчанию, равно GL_AMBIENT_AND_ DIFFUSE.
После задания этого режима коэффициенты диффузного отражения задаются непосредственно командой glColor3f; В этом случае можноизменять параметры материала для каждой вершины, используя только команду glColor*, без дополнительного вызова glMaterialfv.
