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

Координати текстури

Перед нанесенням текстури на об'єкт залишилося встановити відповідність між точками на поверхні об'єкту і на самій текстурі. Задавати цю відповідність можна двома методами: окремо для кожної вершини або відразу для усіх вершин, задавши параметри спеціальної функції відображення.

Перший метод реалізується за допомогою команд

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 = xxp + yyp+zzp + wwp,

де 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 з відповідними змінами.