Текстуру (2D) можно рассматривать как функцию t(u, v)
, выход которой представляет собой «цветное» значение. Это чистая функция, поэтому она будет возвращать одно и то же значение для тех же значений u
и v
. Значение берется из таблицы поиска, хранящейся в памяти, индексированной по u
и v
, а не посредством каких-либо вычислений.
«Отображение текстуры» - это процесс, с помощью которого вы связываете определенное местоположение вПоверхность с определенным расположением в пространстве текстуры. То есть вы «отображаете» местоположение поверхности на местоположение в текстуре. Таким образом, входные данные для функции текстуры t
часто называют «координатами текстуры». Некоторые местоположения поверхности могут отображаться в одну и ту же позицию на текстуре, а некоторые позиции текстуры могут не иметь привязанных к ним местоположений поверхности. Все зависит от отображения
Фактическое изображение текстуры не является гладкой функцией;это дискретная функция. Он имеет значение в точках texel (0, 0) и другое значение в (1, 0), но значение текстуры в (0.5, 0) не определено. В пространстве изображения u
и v
являются целыми числами.
Ваше изображение увеличенной части текстуры является неправильным. Между текселями есть никаких значений , потому что «между текселями» невозможно. В строке целых чисел нет чисел от 0 до 1.
Однако любое полезное отображение поверхности на функцию текстуры должно происходить в непрерывном пространстве, а не в дискретном пространстве. В конце концов, маловероятно, что каждый фрагмент попадет точно в местоположение, которое соответствует точному целому числу в текстуре. В конце концов, особенно в рендеринге на основе шейдеров, шейдер может просто изобрести отображение произвольно. «Отображение» может основываться на световых направлениях (проективное текстурирование), высоте фрагмента относительно некоторой поверхности или на том, что может пожелать пользователь. Для фрагментного шейдера текстура - это просто функция t(u, v)
, которую можно вычислить для получения значения.
Поэтому мы действительно хотим, чтобы эта функция находилась в непрерывном пространстве.
ЦельФильтрация заключается в создании непрерывной функции t
на , выдвигающей значения между дискретными текселями. Это позволяет вам объявить, что u
и v
являются значениями с плавающей точкой, а не целыми числами. Мы также нормализуем координаты текстуры, чтобы они находились в диапазоне [0, 1], а не в зависимости от размера текстуры.