
- •Лекция 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 Вывод текста на экран
- •Литература
Смешение цветов
Альфа компонент, задаваемый четвертым аргументом в командах задания цвета примитивов, glColor4f(red, green, blue, alpha); используется для получения смешения цветов.
Режим смешения включается командами:
glEnable (GL_BLEND); - инициализация режима смешения цветов
glDisable (GL_BLEND); - закрытие режима смешения цветов
Режим смешения цветов задается командой
glBlendFunc(sfactor, dfactor);
где sfactor и dfactor символьные константы, задающие методы обработки информации хранящейся в буфере кадра и вновь поступающей в буфер информации соответственно. Результаты обработки выполненной методом sfactor по компонентно (r,g,b) складываются с результатами обработки выполненными методом dfactor .
Методы обработки приведены в таблице, где использованы следующие обозначения:
индекс s относится к sfactor, а d относятся к dfactor .
Параметры |
Метод |
GL_ZERO GL_ONE GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_DST_COLOR GL_ONE_MINUS_DST_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ ALPHA GL_ DST_ALPHA GL_ONE_MINUS_ DST _ ALPHA GL_SRC_ALPHA_SATURATE |
(0,0,0,0) (1,1,1,1) (Rs,Gs,Bs,As) (1,1,1,1)- (Rs,Gs,Bs,As) (Rd,Gd,Bd,Ad) (1,1,1,1)- (Rd,Gd,Bd,Ad) (As, As, As, As) (1-As), (1-As), (1-As) (Ad, Ad, Ad, Ad) (1-Ad), (1-Ad), (1-Ad) (i,i,i,i), где i=min(As,1-Ad) |
Результирующий цвет пикселя
Rd=min(1,Rs*sr+Rd*dr);
Gd=min(1,Gs*sg+Gd*dg);
Rd=min(1,Bs*sb+Bd*db);
Rd=min(1,As*sa+Ad*da);
Где sr, sg, bg- цвет sfactor, а dr, dg, dg- цвет dfactor .
Для реализации прозрачности следует использовать команду glBlendFunc со следующими параметрами:
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Чем меньше As тем прозрачнее объект.
4.5 Задание теста глубины
Тест глубины включается: glEnable(GL_DEPTH_TEST);
выключается: glDisable(GL_DEPTH_TEST);
Разрешить работу с буфером глубины: glDepthMask(true);
Запретить работу с буфером глубины glDepthMask(false);
Режим сравнения глубины задается командой glDepthFunc(Glenum func);
Где func может принимать значения:
GL_NEVER никогда
GL_LESS Zтек<Zбуф. по умолчанию.
GL_EQUAL Zтек=Zбуф
GL_LEQUAL Zтек<=Zбуф
GL_GREATER Zтек>Zбуф
GL_NOTEQUAL ZтекZбуф
GL_GEQUAL ZтекZбуф
GL_ALWAYS. всегда
Лекция 5 Наложение текстуры на объект
Текстурой называется детализация структуры поверхности. Текстура это одномерное или двухмерное изображение, имеющее ассоциированные с ним параметры, определяющие, каким образом производится наложение изображения на поверхность. Имеется два вида детализации. Первый вид – наложение заранее заданного узора на гладкую поверхность (детализация цветом). Второй вид – создание изображений неровностей поверхности (детализация фактуры). Рассмотрим только первый способ. Для наложения текстуры необходимо выполнить следующие действия:
получить заготовку, которую можно использовать в качестве текстуры (файл рисунка);
определить собственную текстуру - создать ее образ в памяти;
задать необходимые параметры, как самой текстуры, так и её взаимодействие с объектом, на который она накладывается.
Получение заготовки
Получение заготовки - это поиск файла изображения, которое мы хотим нанести на поверхность.
Создание образа текстуры в памяти
Для создания образа текстуры в памяти можно или самим создать текстуру в массиве (одномерном или двухмерном) размером кратным 2 (например, 64 x 32) или использовать специальные команды:
gluScaleImeage() – масштабирование образа;
gluTexImeage1D() – создает одномерную текстуру в памяти;
gluTexImeage2D()– создает двухмерную текстуру в памяти.
При Масштабировании, когда результирующий образа сжимается, используется прямоугольный фильтр, а когда растягивается используется линейная интерполяция. Команда gluScaleImeage имеет следующий формат
void gluScaleImeage (
format, - формат данных пикселя; *)
Glint widthin, - ширина исходного образа;
GLint heightin, - высота исходного образа;
GLenum typein, - тип данных; *)
const void *datain, - указатель на источник;
Glint widthout, - ширина масштабируемого образа;
GLint heightout, - высота масштабируемого образа;
GLenum typeout, - тип данных; *)
void *dataout); - указатель на массив масштабируемого образа;
*)
Формат данных пикселя: GL_COLOR_INDEX, GL_STENCIL,
GL_DEPTH_COMPONENT,
GL_RGBA, …
Тип данных для data*: GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP,
GL_ UNSIGNED_SHORT, GL_ SHORT,
GL_ UNSIGNED_INT, GL_ INT, GL_ FLOAT
После того как образ подготовлен, создаем текстуру в памяти
void glTexImage1D(
GLenum target, - тип создаваемой текстуры GL_TEXTURE_1D;
GLint level, - число уровней детализации; **)
GLint components, -задает число цветовых компонентов текстуры 3 или 4;
GLsizei width, - ширина образа должна быть 2n+2*bordеr (бордюр);
GLint border, - определяет ширину границы [0.1];
GLenum format, - формат данных *)
GLenum type, - тип данных; *)
const GLvoid *pixels - указатель на образ данных в памяти, каждый байт данных рассматривается
как 8 одноразрядных элементов, расположение которых задается в
команде glPixelStore с помощью аргумента GL_UNPACK_LSB_FIRST
);
**) Число уровней детализации: 0- базовый уровень, k- уменьшенный в k раз.
void glTexImage2D(
GLenum target, - тип создаваемой текстуры GL_TEXTURE_2D;
GLint level, - число уровней детализации; **)
GLint components, -задает число цветовых компонентов текстуры 3 или 4;
GLsizei width, - ширина образа должна быть 2n+2*bordеr (бордюр);
GLsizei height, - высота образа должна быть 2n+2*bordеr;
GLint border, - определяет ширину границы =0 или 1;
GLenum format, - формат данных *)
GLenum type, - тип данных; *)
const GLvoid *pixels - указатель на образ данных в памяти, каждый байт данных рассматривается
как 8 одноразрядных элементов, расположение которых задается в команде
glPixelStore с помощью аргумента GL_UNPACK_LSB_FIRST
);