Мультитекстурирование. Текстурный объект
Мультитекстурирование. Современные видеокарты и OpenGL поддерживают мультитекстурирование – то есть наложение на один объект сразу нескольких текстур. При этом процесс наложения нескольких текстур, так же как и одной текстуры, контролируется тремя основными структурами данных: Текстурный объект – определяет саму текстуру, которая может быть наложена на полигон. Текстурный объект хранит в себе изображение текстуры (включая все мипмапы), режим фильтрации, режим адресации текселей и некоторые дополнительные параметры (цвет границы). В случае мультитекстурирования необходимо создать и использовать несколько текстурных объектов! Текстурный модуль – определяет какая текстура из ранее загруженных и как будет накладываться на полигон. Текстурный модуль хранит идентификатор накладываемого текстурного объекта, признак разрешения или запрета наложения текстур, способ наложения текстуры, матрицу текстурных координат и некоторые другие параметры (цвет текстурного модуля). В случае мультитекстурирования так же необходимо задействовать несколько текстурных модулей. Текстурные координаты – задаются для каждой вершины и указывают соответствие между трехмерным полигоном и изображением текстуры, то есть какой участок текстуры соответствует определенному полигону. В случае использования мультитекстурирования необходимо передавать в OpenGL текстурные координаты для каждого задействованного текстурного модуля. Мультитекстурирование. При этом процесс наложения нескольких текстур происходит поэтапно: Вначале вычисляется цвет фрагмента. Если режим расчета освещения не используется, то цвет фрагмента определяется по цветам, заданным в вершинах полигона, с помощью линейной интерполяции. Если режим расчета освещения используется, то для каждой вершины вычисляется цвет по формуле Фонга с учетом параметров источника света, материала и взаимного расположения источника света, вершины и наблюдателя. Затем полученные значения интерполируются для каждого фрагмента полигона. Цвет полигона всегда представлен вектором (R, G, B, A). Затем происходит наложения текстуры в нулевом текстурном блоке. Если текстурирование в данном текстурном блоке запрещено (по умолчанию), то данный блок пропускается, итоговый цвет на данном этапе не меняется. Если текстурирование разрешено, то: Извлекаются текстурные координаты соответствующие данному текстурному блоку и умножаются на матрицу текстурных координат данного текстурного блока. Матрица текстурных координат задается индивидуально для каждого текстурного блока и может использоваться для преобразования текстурных координат. По полученным текстурным координатам идет обращение к текстурному объекту, привязанному к данному текстурному блоку. Текстурный объект с учетом своего режима адресации текселей и режима фильтрации возвращает некоторое усредненное значение из текстуры. Возвращаемое значение всегда представлено вектором (Rt, Gt, Bt, At). В соответствии с режимом наложения текстуры установленном в этом текстурном блоке вычисляется итоговый цвет как комбинация ранее вычисленного цвета (R, G, B, A) с цветом полученным из текстуры (Rt, Gt, Bt, At). Вычисленный цвет передается следующим текстурным блокам. Далее происходит наложения текстуры в первом текстурном блоке. Наложение происходит аналогичным образом, но с использованием параметров данного текстурного блока.