Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка комR_А5.doc
Скачиваний:
5
Добавлен:
09.11.2019
Размер:
419.84 Кб
Скачать

Створення спецефектів

У цьому розділі будуть розглянуті деякі можливості 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

  1. Моделі освітлення. Дифузійнета дзеркальне відбиття.

  2. Визначення нормалі до поверхні і вектора відбиття.

  3. Методи зафарбування: однотонна, Гуро та Фонга.

  4. Прозорість. Ефект переломлення променів.

  5. Побудова тіней.

  6. Фактура. Глобальна модель освітлення з трасування променів.