- •Комп’ютерна графіка
- •Лабораторна робота №1 Тема: «Вступ в програмування з використанням opengl»
- •Лабораторна робота №2 Тема: «Перетворення координат»
- •Робота з матрицями
- •Видові перетворення
- •Проекції
- •Область виводу
- •Лабораторна робота №3 Тема: «Створення реалістичних зображень з використанням властивостей геометричного об'єкту»
- •Властивості матеріалу
- •Джерела світла
- •Модель освітлення
- •Текстури
- •Підготовка текстури
- •Параметри текстури
- •Координати текстури
- •Створення спецефектів
- •Прозорість
- •Глосарій
- •Список рекомендованої літератури
- •Додаток а
- •Параметри моделі освітлення (glLightModel)
- •Параметри матеріалу (glMaterial)
- •Параметри джерела світла (glLight)
- •Додаток б Програма курсу «Комп’ютерна графіка»
- •Комп’ютерна графіка
Координати текстури
Перед нанесенням текстури на об'єкт залишилося встановити відповідність між точками на поверхні об'єкту і на самій текстурі. Задавати цю відповідність можна двома методами: окремо для кожної вершини або відразу для усіх вершин, задавши параметри спеціальної функції відображення.
Перший метод реалізується за допомогою команд
void glTexCoord[1 2 3 4][s i f d] (type coord)
void glTexCoord[1 2 3 4][s i f d]v (type *coord)
Найчастіше використовується команди виду glTexCoord2..(type s, type t), що задають поточні координати текстури. Взагалі, поняття поточних координат текстури аналогічно поняттям поточного кольору і поточної нормалі, і є атрибутом вершини. Проте навіть для куба знаходження відповідних координат текстури є досить трудомістким заняттям, тому в бібліотеці GLU окрім команд, що проводять побудову таких примітивів, як сфера, циліндр і диск, передбачено також накладення на них текстур. Для цього досить викликати команду
void gluQuadricTexture (GLUquadricObj *quadObject, GLboolean textureCoords)
з параметром textureCoords рівним GL_TRUE, і тоді поточна текстура автоматично накладатиметься на примітив.
Другий метод реалізується за допомогою команд
void glTexGen[i f d] (GLenum coord, GLenum pname, GLtype param)
void glTexGen[i f d]v (GLenum coord, GLenum pname, const GLtype *params)
Параметр coord визначає для якої координати задається формула і може набувати значення GL_S,GL_T; pname може дорівнювати одному з наступних значень :
GL_TEXTURE_GEN_MODE визначає функцію для накладення текстури.
В цьому випадку аргумент param набуває значень:
GL_OBJECT_LINEAR значення відповідної координати текстури визначається відстанню до площини, що задається за допомогою значення pname GL_OBJECT_PLANE (см. ниже). Формула виглядає таким чином:
g = x xp + y yp+z zp + w wp,
де g – відповідна координата (s або p) текстури;
x, y, z, w - координати відповідної точки;
xp, yp, zp, wp – коефіцієнти рівняння площини.
У формулі використовуються координати об'єкту.
GL_EYE_LINEAR аналогічно попередньому значенню, тільки у формулі використовуються видові координати. Тобто координати текстури об'єкту в цьому випадку залежать від положення цього об'єкту.
GL_SPHERE_MAP дозволяє емулювати віддзеркалення від поверхні об'єкту. Текстура як би "обертається" навколо об'єкту. Для цього методу використовуються видові координати і потрібне завдання нормалей.
GL_OBJECT_PLANE дозволяє задати площина, відстань до якої використовуватиметься при генерації координат, якщо встановлений режим GL_OBJECT_LINEAR. В цьому випадку параметр params є покажчиком на масив з чотирьох коефіцієнтів рівняння площини.
GL_EYE_PLANE аналогічно попередньому значенню. Дозволяє задати площину для режиму GL_EYE_LINEAR.
Для установки автоматичного режиму завдання координат текстур необхідно викликати команду glEnable з параметром GL_TEXTURE_GEN_S или GL_TEXTURE_GEN_P.
Приклад:
Розглянемо, як можна задати дзеркальну текстуру. При такому накладенні текстури зображення як би відбиватиметься від поверхні об'єкту, викликаючи цікавий оптичний ефект. Для цього спочатку потрібно створити два цілочисельні масиви коефіцієнтів s_coeffs і t_coeffs зі значеннями (1,0,0,1) і (0,1,0,1) відповідно, а потім викликати команди:
glEnable (GL_TEXTURE_GEN_S);
glTexGeni (GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
glTexGendv (GL_S, GL_EYE_PLANE, s_coeffs);
і такі ж команди для координати t з відповідними змінами.