- •Комп’ютерна графіка
- •Лабораторна робота №1 Тема: «Вступ в програмування з використанням opengl»
- •Лабораторна робота №2 Тема: «Перетворення координат»
- •Робота з матрицями
- •Видові перетворення
- •Проекції
- •Область виводу
- •Лабораторна робота №3 Тема: «Створення реалістичних зображень з використанням властивостей геометричного об'єкту»
- •Властивості матеріалу
- •Джерела світла
- •Модель освітлення
- •Текстури
- •Підготовка текстури
- •Параметри текстури
- •Координати текстури
- •Створення спецефектів
- •Прозорість
- •Глосарій
- •Список рекомендованої літератури
- •Додаток а
- •Параметри моделі освітлення (glLightModel)
- •Параметри матеріалу (glMaterial)
- •Параметри джерела світла (glLight)
- •Додаток б Програма курсу «Комп’ютерна графіка»
- •Комп’ютерна графіка
Створення спецефектів
У цьому розділі будуть розглянуті деякі можливості OpenGL, застосовані до створення вражаючих спецефектів, які можуть значно підвищити реалістичність тривимірної сцени.
Туман
Додавання туману в сцену може підвищити реалізм, а іноді і приховати деякі артефакти, які з'являються, коли в сцені присутні віддалені об'єкти.
Туман в OpenGL реалізується шляхом зміни кольору об'єктів в сцені залежно від їх глибини (відстані від точки спостереження).
Для включення туману необхідно викликати команду glEnable(GL_FOG).
Спосіб обчислення інтенсивності туману можна визначити за допомогою команд
void glFog[if] (enum pname, T param) ;
void glFog[if]v (enum pname, T params) ;
Аргумент pname може набувати наступних значень:
GL_FOG_MODE в цьому випадку аргумент param визначає формулу, за якою обчислюватиметься інтенсивність туману в точці.
param може набувати значень
GL_EXP Інтенсивність обчислюється за формулою
f=exp(-d*z)
GL_EXP2 Інтенсивність обчислюється за формулою
f=exp(-(d*z)2)
GL_LINEAR Інтенсивність обчислюється за формулою
f=e-z/e-s
У цих формулах z означає відстань від точки, в якій обчислюється інтенсивність туману, до точки спостереження.
Коефіцієнти d, e, s задаються за допомогою наступних значень аргументу pname
GL_FOG_DENSITY param визначає коефіцієнт d
GL_FOG_START param визначає коефіцієнт s
GL_FOG_END param визначає коефіцієнт e
Колір туману задається за допомогою аргументу pname, рівного GL_FOG_COLOR в цьому випадку params – покажчик на масив з 4-х компонент кольору.
Приклад:
Glfloat FogColor[4]={0.5,0.5,0.5,1};
glEnable(GL_FOG);
glFogi(GL_FOG_MODE,GL_LINEAR);
glFogf(GL_FOG_START,20.0);
glFogf(GL_FOG_END,100.0);
glFogfv(GL_FOG_COLOR,FogColor);
Прозорість
Прозорість дозволяє використовувати напівпрозорі об'єкти в сцені, що може значно підвищити реалістичність зображення.
В OpenGL прозорість реалізується за допомогою спеціального режиму змішення кольорів (blending). Алгоритм змішення комбінує кольори пікселів, що входять (RGBA) з кольорами відповідних пікселів, що вже зберігаються в буфері кадру.
Режим включається за допомогою команди glEnable(GL_BLEND).
Визначити параметри змішення можна за допомогою команди:
void glBlendFunc(enum src,enum dst)
Параметр src визначає, як отримати коефіцієнт k1 початкового кольору пікселя, a dst визначає спосіб отримання коефіцієнта k2 для кольору в буфері кадру. Для отримання результуючого кольору використовується наступна формула:
res = сsrc k1 + cdst k2,
де сsrc - колір початкового пікселя,
cdst - колір пікселя в буфері кадру.
(res, k1, k2, сsrc, cdst - векторы!).
Приведемо найбільш часто використовувані значення аргументів src і dst.
GL_SRC_ALPHA k=(As,As,As,As)
GL_SRC_ONE_MINUS_ALPHA k=(1,1,1,1)-(As,As,As,As)
GL_DST_COLOR k=(Rd,Gd,Bd)
GL_ONE_MINUS_DST_COLOR k=(1,1,1,1)- (Rd,Gd,Bd)
GL_DST_ALPHA k=(Ad,Ad,Ad,Ad)
GL_DST_ONE_MINUS_ALPHA k=(1,1,1,1)-(Ad,Ad,Ad,Ad)
GL_SRC_COLOR k=(Rs,Gs,Bs)
GL_ONE_MINUS_SRC_COLOR k=(1,1,1,1)- (Rs,Gs,Bs)
Приклад:
Припустимо, ми хочемо реалізувати виведення прозорих об'єктів. Коефіцієнт прозорості задається alpha-компонентою кольору. alpha, рівне 1, - непрозорий об'єкт; рівне 0 - невидимий. Для реалізації служить наступний код:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_SRC_ONE_MINUS_ALPHA);
Завдання.
Реалізувати просту сцену, що складається з тора, конуса. Об'єктам призначаються різні матеріали. У сцені є присутнім точкове джерело світла.
Контрольні питання до лабораторної роботи №3
Моделі освітлення. Дифузійнета дзеркальне відбиття.
Визначення нормалі до поверхні і вектора відбиття.
Методи зафарбування: однотонна, Гуро та Фонга.
Прозорість. Ефект переломлення променів.
Побудова тіней.
Фактура. Глобальна модель освітлення з трасування променів.