Bilinear Filtering (Билинейная фильтрация)
Билинейная фильтрация — это процесс выборки нескольких пикселей из исходной текстуры в процессе отображения с последующим усреднением для получения окончательного значения пикселя.
Описание
При обычном текстурировании мы получаем координаты в текстуре, округляем их до ближайшего целого числа и выбираем нужный цвет из текстуры. Псевдокод такой:
Ниже в примере color означает RGB вектор. Поэтому данный псевдокод выполняется для трех каналов RGB одноверменно.
color texture[w][h]; int ui = (int)u; int vi = ( int)v; color point = texture[ui][vi];
То есть мы как бы берем значение цвета в самой близкой к рисуемой точке, и из-за этого цвет резко меняется и возникает эффект блочности. Кроме того, при анимации округление будет делаться то в одну, то в другую сторону, из-за чего текстурированный объект будет сильно мерцать.
В случае билинейной фильтрации, мы, наоборот, получаем дробные части координат текстуры u и v и с помощью их определяем, какие тексели будут интерполироваться. Тем самым будут учитываться цвета четырёх ближайших текселей, и цвет будет плавно изменяться между ними, что придаст плавность анимации:
color texture[w][h]; float u,v; int ui = (int)u; int vi = ( int)v; float du = u – ui; float dv = v – vi; color point = ( 1 – du)*( 1 - dv)*texture[u][v] + ( du)*( 1 - dv)*texture[u+1][v] + ( du)*( dv)*texture[u+1][v+1] + ( 1 – du)*( dv)*texture[u][v+1];
Заметим, что понятие "билинейная фильтрация", точно так же, как и сопутствующее ему понятие "трилинейная фильтрация", относится к фильтрации двумерных текстур. К трехмерным текстурам, например, понятие билинейной фильтрации неприменимо, а понятие трилинейной фильтрации означает совсем другое.
Ссылки
http://ru.wikipedia.org/wiki/Билинейная_интерполяция
http://www.nullterminator.net/gltexture.html
Что такое Bilinear Filtering (Билинейная фильтрация)?
31 июля 2005 (Обновление: 13 июня 2009)