Текстурные координаты задаются не только с помощью информации о цвете, векторов нормали к поверхности и меток краев многоугольников, но и в виде списков, которые можно объединять или соотносить с массивами вершин (разделы 3.17 и 4.3).

glEnableClientState (GL_TEXTURE_COORD_ARRAY);

glTexCoordPointer (nCoords, dataType, offset, texCoordArray); Параметру nCoords присваивается значение 1, 2, 3 или 4, обозначающее размер текстурного узора. Значение по умолчанию 4 используется для формирования пространства текстур в форме однородных координат, когда координаты точки в пространстве текстур рассчитываются делением значений первых трех координат на четвертую. Данная форма полезна, например, когда текстурный узор - это перспективная фотография. Параметру dataType присваивается постоянное значение GL_SHORT, GL_INT, GL_FLOAT (по умолчанию) или GL_DOUBLE. Смещение в байтах между координатами в массиве texCoordArray задается в параметре offset, значение которого по умолчанию - 0.

ПРИСВОЕНИЕ ИМЕН ТЕКСТУРНЫМ УЗОРАМ OpenGL

Часто в приложении бывает полезно использовать несколько текстурных шаблонов, так что OpenGL позволяет создавать несколько именованных текстурных узоров. В таких случаях просто задается, какие именованные текстуры применяются в любой момент времени. Это более эффективный метод, включающий многократные вызовы функции glTexImage, поскольку каждое обращение к glTexImage требует создания узоров заново, возможно, по кодам цвета в файле данных. Чтобы присвоить имя текстурному узору, перед определением шаблона выбирается положительное (без знака) целое число. Например, в следующем выражении зелено-красный линейный узор, использованный в предыдущем примере, называется текстурой 3, а затем активизируется.

glBindTexture (GL_TEXTURE__1 D, 3);

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

glBindTexture (GL_TEXTURE_1D, 3); Первый оператор glBindTexture присваивает имя узору, а второй вызывает glBindTexture, выделяя данный шаблон как текущее состояние текстуры. Если создано несколько текстурных узоров, можно снова вызвать процедуру glBindTexture с другим именем узора, чтобы наложить эту текстуру на некоторый объект на сцене. Для двух- или трехмерного узора меняется первый аргумент функции glBindTexture на GL__TEXTURE_2D либо GL_TEXTURE_3D. При первом употреблении имени текстуры создается текстурный узор с использованием в качестве параметров узора значений по умолчанию.

Чтобы удалить один или несколько существующих текстурных узоров, используется команда

glDeleteTextures (nTextures, texNamesArray) ; Параметр nTextures задает число имен узоров, перечисленных в массиве texNamesArray.

Можно также указать OpenGL выбрать такое имя узора, чтобы нам не требовалось следить за уже использованными именами. Например, так.

static GLuint texName;

glGenTextures (1, texName);

glBindTexture (GL_TEXTURE_2D, texName); В качестве иллюстрации ниже приведен фрагмент кода, в котором получается список из шести неиспользованных имен текстур, одно из которых затем применяется для создания узора.


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