
- •11. Наложение текстуры
- •11.1. Общие положения
- •11.2. Наложение текстуры на грань
- •11.3. Визуализация текстуры
- •11.4. Взаимодействие текстуры с объектом
- •11.5. Генерация текстурных координат
- •11.6. Функции OpenGl для задания текстурного изображения
- •11.7. Функции OpenGl для установки параметров текстуры
- •Значения параметра param
- •11.8. Пример программы с применением текстурирования
11.4. Взаимодействие текстуры с объектом
Рассмотрим два типичных способа использования величин текстурного отображения, применяемых при вычислении визуализации для достижения различных визуальных эффектов. Проделаем это для простого случая вычисления яркости серого цвета. Если же изображение цветное, то такие вычисления выполняются раздельно для красного, зеленого и синего компонентов.
1. Создание эффекта светящегося объекта. Метод прост с вычислительной точки зрения. Видимая интенсивность I устанавливается равной значению текстуры в каждой точке:
В этом случае кажется, что объект испускает свет (или светится). Меньшие значения текстуры испускают меньше света, а большие – больше. Никаких дополнительных вычислений освещения не требуется. Для цветного света компоненты красного, зеленого и синего цветов вычисляются отдельно.
2. Модуляция коэффициента отражения. Как уже отмечалось, цвет объекта – это цвет его компонента диффузионного освещения (когда этот объект освещается белым светом). Тогда, варьируя коэффициент диффузионного отражения (и, возможно, коэффициент фонового отражения), можно сделать так, чтобы текстура казалась нарисованной на поверхности объекта. В таком случае говорят, что текстурная функция «модулирует» значение коэффициента отражения от точки к точке. Тогда предыдущее равенство заменяется равенством
для соответствующих значений s и t. Поскольку по Фонгу зеркальные отражения имеют скорее цвет источника, а не объекта, то блики не зависят от текстуры.
Для управления взаимодействием накладываемой текстуры на объект в OpenGL реализована команда:
void glTexEnv{if}(GLenum target, GLenum pname, TYPE param),
void glTexEnv{if}v(GLenum target, GLenum pname, TYPE *param),
где target – должно быть установлено в GL_TEXTURE_ENV; pname – имя параметра; param – значения параметра pname (невекторная или векторная форма).
GL_TEXTURE_ENV_MODE. параметр param может принимать следующие значения:
- GL_REPLACE – параметр задает такой вид текстурирования, как в методе (1);
- GL_DECAL – аналогично режиму GL_REPLACE с компонентами цвета RGB;
- GL_MODULATE – здесь параметр задает вид текстурирования по методу (2);
- GL_BLEND.
GL_TEXTURE_ENV_COLOR – параметр применяется для векторной формы команды, где param содержит компоненты цвета RGBA.
11.5. Генерация текстурных координат
Текстурные координаты, ассоциированные с вершиной, могут быть получены из текущих текстурных координат или быть сгенерированными согласно функции, зависящей от координат вершины. Генерацией текстурных координат управляет команда:
void glTexGen{ifd}(GLenum coord, GLenum pname, TYPE param),
void glTexGen{ifd}v(GLenum coord, GLenum pname, TYPE *param),
где coord – текстурная координата; pname – имя параметра; param – значения параметра pname (невекторная или векторная форма).
Аргумент coord должен быть одним из констант GL_S, GL_T, GL_R или GL_Q, указывающих соответствие принадлежащим координатам s, t, r и q соответственно. В первой форме команды param является константой, определяющей одно значение параметра текстурной генерации; во второй форме param, указатель на массив значений параметров.
Имя параметра может принимать следующие значения: GL_TEXTURE_GEN_MODE, GL_OBJECT_PLANE и GL_EYE_PLANE (два последних параметра только для векторной формы команды).
Для GL_TEXTURE_GEN_MODE параметр param может принимать следующие значения:
- GL_OBJECT_LINEAR – параметр устанавливает функцию генерации текстурных координат
,
где x0, y0, z0 и w0 – мировые координаты вершины; p1, p2, p3 и p4 – коэффициенты уравнения плоскости, которые указываются в param с помощью pname, равного GL_OBJECT_PLANE;
- GL_EYE_LINEAR – параметр устанавливает функцию генерации
,
где
;
xe,
ye,
ze
и we – видовые
координаты вершины; M
– матрица видового преобразования.
Коэффициенты уравнения плоскости
указываются в param с
помощью pname, равного
GL_EYE_PLANE;
- GL_SPHERE_MAP. Здесь текстурные координаты s или t генерируются следующим образом:
,
где u
– вектор от начала видовых координат
к вершине; nf
– текущая нормаль после преобразования
в видовые координаты;
–
результирующий вектор отражения, исходя
из которого, определяется соответствующая
координата:
,
,
где
.
Функция glEnable с параметром GL_TEXTURE_GEN_S, GL_TEXTURE_GEN_T, GL_TEXTURE_GEN_R или GL_TEXTURE_GEN_Q включает генерацию соответствующей текстурной координаты, функция glDisable с теми же параметрами – отключает.
По умолчанию значения коэффициентов уравнения плоскости устанавливаются следующим образом: все pi для координат s, t, r и q равны нулю, кроме p1 для координаты s и p2 для t, которые равны единице. Текстурная генерация координат по умолчанию выключена для всех координат.