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

У каждой текстурной единицы есть функция текстурной среды. Текстурные единицы соединяются последовательно. Значение фрагмента вычисляется из первой текстурной единицы, при этом используется значение, прочитанное из текстурной памяти, и ее функции текстурной среды, результат передается в качестве входного значения для следующей текстурной единицы. Это значение совмещается с функцией текстурной среды для второго текстурного модуля и со значением, прочитанным из текстурной памяти, и используется для вычисления третьего текстурного модуля. То же повторяется для всех включенных текстурных модулей.

После того как текстурные объекты определены и один или больше текстурных модулей правильно установлены и включены, текстурирование применяется ко всем графическим примитивам последовательно. Текстурные координаты для каждой вершины задаются функциями glTexCoord или glMultiTexCoord (при методе «вершина за раз») или как массив, переданный в функцию glTexCoordPointer (при методе массивов вершин). Функция glHul tiTexCoord определяет текстурные координаты, которые будут применяться для заданного текстурного модуля. Команда glTexCoord почти аналогична glMultiTexCoord, с тем лишь отличием, что параметр текстуры всегда установлен в GL_TEXTUREO. Для массивов вершин необходимо вызывать командой gl Cl i ent Acti veTexture между вызовами gl TexCoordPoi nter, чтобы задавать различные массивы текстурных координат для разных текстурных модулей.

Координаты текстур также могут быть автоматически сгенерированы OpenGL. Параметры настройки такой автоматической генерации устанавливаются для каждого текстурного модуля отдельно командой glTexGen. Эта функция дает приложению возможность выбрать функцию генерирования текстуры и указать коэффициенты для текущего текстурного модуля. Поддерживаемые функции автоматической генерации бывают линейные для объекта (они используются при создании моделей местности), линейные для взгляда (используются при создании динамических контурных линий движущегося объекта) и сферические (используются только при наложении карты среды с одной текстурой).

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

И генерирование, и преобразование текстуры определены OpenGL как часть обработки вершин (то есть выполняются перед растеризацией для каждой вершины отдельно).

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


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