Под фильтрованием здесь подразумевается способ, которым для каждого пиксела будет выбираться подходящий элемент текстуры (тексел). При текстурировании возможна ситуация, когда 1 пикселу соответствует небольшой фрагмент тексела (увеличение) или же, наоборот, когда 1 пикселу соответствует целая группа тексе-лов (уменьшение). Способ выбора соответствующего тексела как для увеличения, так и для уменьшения (сжатия) текстуры необходимо задать отдельно. Для этого используется процедура
void gITexParameteri ( GL_TEXTURE_2D, GLenum p1, GLenum p2 );
где параметр pi показывает, задается ли фильтр для сжатия или для растяжения текстуры, принимая значение GL_TEXTURE_MIN_FLITER или GL_TEXTURE_MAG_FILTER.; параметр р2 задает способ фильтрования, возможные значения приведены в таблице.
Параметр pi |
Параметр p2 |
GL TEXTURE MAG FILTER | GL NEAREST, GL LINEAR |
GL_TEXTURE_MIN_FILTER | GL_NEAREST, GLLINEAR, GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST_MIPMAP_LINEAR, GL_LINEAR_MIPMAP_NEAREST, GL LINEAR MIPMAP LINEAR |
Значение GL_NEAREST соответствует выбору тексела с координатами, ближайшими к центру пиксела. Значению GL_LINEAR соответствует выбор взвешенной линейной комбинации из массива 2x2 текселов, лежащих ближе всего к рассматриваемому пикселу. При использовании пирамидального фильтрования помимо
12. Работа с библиотекой OpenGL
выбора тексела на одном слое текстуры появляется возможность либо выбрать один соответствующий слой, либо проинтерполировать результаты выбора между двумя соседними слоями.
Для правильного применения текстуры каждой вершине следует задать соответствующие ей координаты текстуры при помощи процедуры void glTexCoord{1234}{sifd}[v] (TYPE coord, … ); Этот вызов задает значения индексов текстуры для последующей команды gl Vertex * ().
Если размер грани больше, чем размер текстуры, то для циклического повторения текстуры служат команды
gITexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_S_WRAP, GL_REPEAT ); gITexParameteri ( GL_TEXTURE_2D, G L_T EXT U RE_T_W RAP, GL_REPEAT );
Координаты текстуры обычно подвергаются преобразованию при помощи матрицы текстурирования. По умолчанию она совпадает с единичной матрицей, но пользователь сам имеет возможность задать преобразования текстуры, например следующим образом: