texLine [4*к+1] = 255; texLine [4*к+2] = 0; texLine [4*к+3] = 255;

}

/* Определяется два красных элемента текстурного узора. */

for (k = 1; к <= 3; к += 2) { texLine [4*к] = 255;

texLine [4*к+1] = 0; texLine [4*к+2] = 0; texLine [4*к+3] = 255;

}

glTexParameteri (GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

glTexParameteri (GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

glTexImagelD (GL_TEXTURE_1D, 0, GL_RGBA, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, texLine);

glEnable (GL_TEXTURE_1D) ;

/* Весь диапазон цветов текстуры присваивается отрезку. */

glBegin (GL_LINES);

glTexCoordlf (0.0); glVertex3fv (endPtl); glTexCoordlf (1.0); glVertex3fv (endPt2);

glEnd ( );

glDisable (GL_TEXTURE_1D);

Примеры отображения текстурного узора OpenGL на белый отрезок

Рис. 10.114. Примеры отображения текстурного узора OpenGL на белый отрезок

s принудительно устанавливаются на 0 или 1. На рис. 10.114 показаны некоторые возможные линейные узоры, которые можно отобразить с помощью массива, содержащего RGB-значения двух зеленых и двух красных цветов.

При формировании текстурных узоров OpenGL можно использовать огромное число параметров и опций. Однако, перед тем, как перейти к рассмотрению процедур работы с текстурой, изучим базовые функции, необходимые для генерации двух- и трехмерных текстурных узоров.

ФУНКЦИИ OpenGL ДЛЯ ПОВЕРХНОСТНЫХ ТЕКСТУР

Параметры двухмерного пространства текстур RGBA можно задать, используя функции, подобные использованным в приведенном выше примере одномерного текстурного узора:

glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, texWidth,

texHeight, 0, dataFormat, dataType, surfTexArray); glEnable (GL_TEXTURE_2D) ; Единственное отличие - нужно задать и ширину (число столбцов), и высоту (число строк) массива текстуры с тремя индексами. Ширина и высота должны быть степенями 2 (если граница не используется) или 2 плюс степень 2 (если есть граница). Снова используем цветовые компоненты RGBA и примем, что узор не имеет границ и не является сокращенным вариантом большего текстурного узора. Таким образом, размер массива, записанный в surfTexArray, равен 4 х texWidth х texHeight. Для двухмерного текстурного узора присвоим элементам массива текстуры коды цветов в восходящем (от низа массива к верху) порядке. Начиная с левого нижнего угла цветного узора зададим элементы первой строки массива RGBA-значений, соответствующие верхней строке пространства текстур, а элементам нижней строки массива будут присвоены RGBA-значения, соответствующие верху прямоугольного пространства текстур (рис. 10.103).

Как и для линейных текстурных узоров, пикселям поверхности на сцене могут присваиваться цвета ближайших элементов текстуры или интерполированный цвет текстур. Одна из этих опций задается теми же двумя функциями glTexParameter, что использовались для одномерных текстур. Одна функция задает используемую опцию при увеличении узора, чтобы он заполнял соответствующую область, а другая задает опцию, используемую при сокращении узоров. Кроме того, двухмерный текстурный узор можно растягивать в одном направлении и сжимать в другом. Например, следующие команды указывают, что спроектированные точки поверхности отображаются с использованием ближайшего цвета текстуры.


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