
- •11. Наложение текстуры
- •11.1. Общие положения
- •11.2. Наложение текстуры на грань
- •11.3. Визуализация текстуры
- •11.4. Взаимодействие текстуры с объектом
- •11.5. Генерация текстурных координат
- •11.6. Функции OpenGl для задания текстурного изображения
- •11.7. Функции OpenGl для установки параметров текстуры
- •Значения параметра param
- •11.8. Пример программы с применением текстурирования
11.6. Функции OpenGl для задания текстурного изображения
В OpenGL для загрузки текущего текстурного изображения в видео память используются следующие функции: одна для одномерного изображения и другая для двумерного.
void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels),
void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels),
где target – для первой формы функции параметр должен быть установлен в GL_TEXTURE_1D; для второй в GL_TEXTURE_2D;
level – номер уровня детализации. Уровень 0 является уровнем базового изображения. Уровень n – это n-й mipmap уровень уменьшенного изображения;
internalformat – число компонентов цвета в текстуре. Должно быть 1, 2, 3, или 4, или одной из символических констант: GL_RGB, GL_RGBA и т.п. При значении 1 используется только красный компонент; при значении 2 – красный и альфа, при значении 3 – красный, зеленый и синий и при значении 4 – все четыре компонента цвета;
width – ширина текстурного
изображения, должна быть
для некоторого целого n;
height – высота текстурного
изображения, должна быть
для некоторого целого m;
border – ширина рамки текстуры, которая устанавливается в 0 или 1;
format – формат пиксельных данных pixels может принимать значения: GL_RGB, GL_RGBA и т.п.;
type – тип пиксельных данных массива pixels может принимать следующие значения: GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT и GL_FLOAT;
pixels – указатель на данные изображения в оперативной памяти.
Функция glEnable с параметром GL_TEXTURE_1D (GL_TEXTURE_2D) включает наложение одномерной (двумерной) текстуры. Функция glDisable с теми же параметрами – отключает.
Примечание. Размеры изображения должны быть кратны степени двойки.
11.7. Функции OpenGl для установки параметров текстуры
В OpenGL предусмотрена установка параметров текстуры. Для этого используется функция, прототип которой:
void glTexParameter{if}(GLenum target, GLenum pname, TYPE param),
void glTexParameter{if}v(GLenum target, GLenum pname, TYPE *param),
где target – определяет, с какой текстурой предполагается работать; pname – имя параметра; param – значения параметра pname (невекторная или векторная форма).
Параметр target может принимать следующие значения:
GL_TEXTURE_1D – все остальные параметры и их значения задаются для одномерной текстуры;
GL_TEXTURE_2D – все остальные параметры и их значения задаются для двумерной текстуры.
Имя параметра может принимать следующие значения:
GL_TEXTURE_MIN_FILTER – определяет функцию уменьшения текстуры, используется, когда площадь пикселя, на который она накладывается, больше, чем элемент текстуры. Здесь param может принимать значения приведенные в табл. 14;
GL_TEXTURE_MAG_FILTER – функция увеличения текстуры используется, когда площадь пикселя, на который она накладывается, меньше или равна элементу текстуры. Здесь param может принимать следующие значения:
- GL_NEAREST – аналогично GL_NEAREST для GL_TEXTURE_MIN_FILTER;
- GL_LINEAR – аналогично GL_LINEAR для GL_TEXTURE_MIN_FILTER;
GL_TEXTURE_WRAP_S – устанавливает параметр координаты текстуры s. Здесь param может принимать значения:
- GL_REPEAT – игнорирует целую
часть координаты текстуры s,
используя только дробную часть. Для
числа s
дробная часть составляет
,
не обращая внимания на знак s.
Значение установлено по умолчанию.
- GL_CLAMP – фиксирует координаты текстуры s в диапазоне [0,1];
GL_TEXTURE_WRAP_T. Аналогично GL_TEXTURE_WRAP_S, но только для координаты t;
GL_TEXTURE_BORDER_COLOR – устанавливает цвет рамки текстуры. Параметр params содержит четыре значения, которые определяют цвет RGBA рамки. Целочисленное значение линейно отображается в диапазон [0,1]. Исходно цвет рамки установлен в (0, 0, 0, 0).
Таблица 11.1