float st [ ] = { 0, 0, 0, 1, 1, 0, 1, 1} ;

glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2, st) ; Для получения результирующего цвета при наложении текстуры OpenGL учитывает цвет, материал вершины и применяет ряд фильтров. Когда одному пикселю изображения после растеризации соответствует дробное число текселей, используются фильтры увеличения (magnification) или уменьшения (minification) текстуры.

Фильтры увеличения и уменьшения текстуры

Рис. 5. Фильтры увеличения и уменьшения текстуры

В OpenGL существует понятие уровня детализации текстуры. Каждый уровень задается отдельным изображением. В зависимости от расстояния до наблюдателя OpenGL выбирает нужный уровень детализации, не прибегая к лишним операциям масштабирования. Данный механизм называется мипмэпингом (mipmap-ing). Изображения, используемые в мипмэпинге, задаются непосредственно или создаются OpenGL автоматически.

Очевидно, что текстура является довольно ресурсоемким объектом. Вызовом функции glGetlntegerv(GL_MAX_TEXTURE_SlZE,…) можно определить максимально возможный размер квадратной текстуры. Но иногда этого недостаточно, так как при этом, например, не учитывается внутренний формат данных и уровень детализации. С помощью текстуры подмены (proxy texture) можно более точно определить, хватает ли памяти для указанной текстуры. Для этого функцией gITexImage нужно определить текстуру подмены (типы текстур с префиксом GL_PROXY_), а затем получить о ней информацию функцией gIGetTexLevelParameter. Если памяти недостаточно, то функция для любых запрашиваемых параметров устанавливает значение 0. Текстуру подмены нельзя использовать в качестве обычной текстуры, так как с ней не связано никакого изображения.

Иногда возникает необходимость наложить одну и ту же текстуру на многоугольник несколько раз. Тогда приходится выводить многоугольник несколько раз, изменяя текстурные координаты. В последних версиях OpenGL или через такие расширения, как ARB_multitexture и SGIS_multitexture, эта задача существенно облегчается возможностью перед выводом сразу указать несколько наборов текстурных координат функцией gIMultiTexCoord.

Список функций для наложения текстур: gIBindTexture - выбирает активную текстуру; glCopyTexImage - сохраняет изображение в цветовом буфере как текстуру;

glCopyTexSublmage - заменяет часть изображения текстуры данными из цветового буфера;

gIGenTextures - создание массива имен текстур; gITexCoord - установка текстурных координат; glTexEnv - параметры наложения текстур; glTexGen - генерация текстурных координат; gITexImage - определение изображения текстуры; glTexParameter - установка параметров текстуры; gITexSublmage - изменение части изображения текстуры.

/*

Демонстрация наложения текстур.

Для работы примера необходимы два файла texl.bmp tex2.bmp с 24-битными изображениями размера 25 6x25 6. */

GLobj cam; // камера

Models m; // объект моделей

uint tex[2]; // массив имен текстур

// коэффициенты для отображения // координат вершины в текстурные координаты float sp[4]={0,О,0.05,0}; float tp[4]={0,0.05,0,0} ;

void example_init()

{

gl.set(5);


⇐ вернуться назад | | далее ⇒