Параметры наложения текстуры
Из параметров визуализации рассмотрим установку параметров окружения и фильтрации пикселов. Параметры окружения устанавливаются функцией glTexEnv[if]. Действие ее состоит в формировании функции преобразования цветов источника света, цвета образа текстуры, цвета вершин примитивов и цвета конфигурации текстуры для получения результирующего цвета поверхности с наложенной на нее текстурой. Функция существует в двух вариантах в зависимости от входных параметров. Рассмотрим описание для вещественных входов:
void glTexEnvfv(
GLenum target,
GLenum pname,
const GLfloat *params
);
Параметр target всегда принимает значение GL_TEXTURE_ENV. Параметр pname задает один из двух вариантов GL_TEXTURE_ENV_MODE или GL_TEXTURE_ENV_COLOR.
В случае когда pname= GL_TEXTURE_ENV_MODE доступны три варианта вызова функции:
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL),
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND),
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE).
Когда pname=GL_TEXTURE_ENV_COLOR, то третий параметр представляет собой указатель на четырехкомпонентный массив цвета:
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, @CColor),
где переменная описана как
var
CColor: array[1..4]of Glfloat;
По умолчанию для этих команд установлены значения: GL_MODULATE для режима GL_TEXTURE_ENV_MODE и цвет (0,0,0,0) для режима GL_TEXTURE_ENV_COLOR.
Далее в таблице, в соответствии с [15], приводятся варианты формирования результирующей функции преобразования с помощью команды glTexEnv.
Количество цветовых компонент | GL_MODULATE | GL_DECAL | GL_BLEND |
Cv=LtCf | нет | Cv=(1-Lt)Cf+LtCc Av=Af | |
Cv=LtCf Av=AfAt | Нет | Cv=(1-Lt)Cf+LtCc Av=AfAt | |
Cv=CtCf A=A | Cv=Ct Av=Af | нет | |
Сv=СtСf Av=AfAt | Cv=(1-At)Cf+AtCt Av=Af | нет |
Здесь A – значение альфа канала; L – яркость. Для двухкомпонентных изображений цвет состоит из компонент яркости L и альфа составляющей A. Трехкомпонентный цвет в качестве яркости использует три цветовые компоненты C, а четырехкомпонентный цвет использует C и A.
Индексы в формулах: f – фрагмент, на который накладывается текстура, t – образ текстуры, c – цвет конфигурации текстуры, v – результирующее значение.
Из практических экспериментов можно заметить, что для обычных матовых поверхностей хороший визуальный эффект получается использованием режима GL_MODULATE. Простой режим отображения текстуры с эффектом полупрозрачности можно получить в режиме GL_DECAL. В режиме GL_BLEND можно получить эффект негатива изображения.
Параметры масштабирования текстуры задаются функцией glTexParameter[if].
Самый простой и быстрый но не самый реалистичный способ отображения при масштабировании задается комбинацией параметров в режиме GL_NEAREST:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST) –
для масштабирования в сторону увеличения текстуры, и
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST) -
для масштабирования в сторону уменьшения. Более приемлемые результаты с точки зрения сглаживания цветов соседних пикселов при масштабировании текстуры дает вариант линейного сглаживания:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
и
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
В режиме GL_LINEAR цвет пиксела текстуры получается как среднее арифметическое четырех соседних пикселов. Также возможны режимы с использованием битовых карт уровней детализации текстуры, которые задаются функцией gluBuild2DMipmaps.
Список литературы
1. Аммерал Л. Машинная графика на языке С. В 4-х томах – М: Сол. Систем, 1992.
2. Боресков А.Б., Шикина Е.В., Шикина Г.Е., Компьютерная графика: первое знакомство. – М.: Финансы и статистика, 1996.
3. Вэн-Дэм А., Фоли Дж. Основы интерактивной машинной графики.Т.1-2 – М.: Мир, 1985.
4. Гилой, Интерактивная машинная графика. - М.: Мир, 1981.
5. Грайс Графические средства персональных компьютеров. – М.: Мир, 1980.
6. Жикин Е.В., Боресков А.В. Компьютерная графика. Динамика, реалистические изображения. – М.: Диалог-МИФИ, 1995, 1997.
7. Компьютер обретает разум. Пер. с англ. Под ред. В.Л.Стефанюка – М.: Мир, 1990.
8. Ласло М. Вычислительная геометрия и компьютерная графика на С++. М.: Бином, 1997.
9. М.Маров, 3D Studio MAX 2.5: справочник – СПб: «Питер», 1999. – 672 с.
10. А.Ла Мот, Д.Ратклифф и др. Секреты программирования игр/ Перев с англ. – СПб: Питер, 1995. – 720 с.
11. Ньюмен, Спрулл, Основы интерактивной машинной графики. - М.: Мир, 1976.
12. Ф. Препарата, М. Шеймос, Вычислительная геометрия: Введение. - М. Мир, 1989.
13. Роджерс Алгоритмические основы машинной графики. – М.: Мир, 1989.
14. Роджерс, Адамс, Математические основы машинной графики. - М. Машиностроение, 1985.
15. Ю.Тихомиров, Программирование трехмерной графики - С.-Пб.: БХВ‑Санкт-Петербург,1999.
16. Н. Томпсон, Секреты программирования трехмерной графики для Windows 95. Перев с англ. – СПб: Питер, 1997. – 352 с.
17. А.Фокс, М. Пратт, Вычислительная геометрия - М., Мир, 1982.
18. А.В.Фролов, Г.В.Фролов, Графический интерфейс GDI в MS WINDOWS – М.: Диалог-МИФИ, 1994.
19. Хонич А. Как самому создать трехмерную игру. – М.: МИКРОАРТ, 1996.
20. Энджел Й. Практическое введение в машинную графику. – М.: Радио и Связь, 1984.
21. А.Б.Боресков, Е.В.Шикина, Г.Е.Шикина, Компьютерная графика: первое знакомство, Под ред. Е.В.Шикина - М.: Финансы и статистика, 1996.
22. Краснов М, OpenGL. Программирование трехмерной графики на Delphi. – СПб.: БХВ – Петербург, 2000.
23. Краснов М., DirectX. Графика в проектах Delphi. – СПб.: БХВ – Петербург, 2001.
24. А.Ла Мот, Д.Ратклифф и др. Секреты программирования игр/ Перев с англ. – СПб: Питер, 1995. – 720 с.
25. М.Маров, 3D Studio MAX 2.5: справочник – СПб: «Питер», 1999. – 672 с.
26. Ю.Тихомиров, Программирование трехмерной графики. - С.-Пб.: БХВ‑Санкт-Петербург,1999.
27. Н. Томпсон, Секреты программирования трехмерной графики для Windows 95. Перев с англ. – СПб: Питер, 1997. – 352 с.
28. Стен Трухильо, Графика для Windows средствами Direct Draw. - С.-Пб: Питер Ком, 1998 – 320 с.
29. А.В.Фролов, Г.В.Фролов, Графический интерфейс GDI в MS WINDOWS, Москва, Изд-во Диалог-МИФИ, 1994Майкл Ласло, Вычислительная геометрия и компьютерная графика на С++, - М.: Бином, 1997.
30. А.Хонич, Как самому создать трехмерную игру. - М.: МИКРОАРТ, 1996.
31. Джим Адамс, DirectX: продвинутая анимация. – М.: КУДИЦ-ОБРАЗ, 2004.
32. Пол Стид, Анимация персонажей для игр в реальном времени. – М.: ДМК Пресс, М, 2004.
* В этом определении при замене, скажем, оси Oz на ось Ox остальные оси заменяются по правилу циклической перестановки, то есть Oy заменится на Oz, а Ox заменится на Oy. Всего здесь циклических перестановок может быть три: (x,y,z)®(y,z,x)®(z,x,y).
* Более строгое определение однородных координат дается в разделе линейной алгебры «Проективные пространства».