Билинейная фильтрация текстур.

Параболическое текстурирование.

Перспективно-корректное текстурирование.

Аффинное текстурирование.

Точное текстурирование.

 

Пусть вершины грани есть точки A(Ax,Ay,Az), B(Bx,By,Bz) и C(Cx,Cy,Cz), а соответствующие им точки текстуры – (Au,Av), (Bu,Bv) и (Cu,Cv). XSize и YSize – размеры экрана, dist – расстояние от него до центра координат. Тогда для точек (x,y,z), проекцией которых является точка (sx, sy), имеем:

sx = XSize/2 + x*dist/(z+dist)

sy = YSize/2 + y*dist/(z+dist)

Для упрощения формул будем использовать следующие обозначения:

i = sx-XSize/2

j = YSize/2 –sy

Z=z+dist

 

Рассмотрим точку D, принадлежащую грани. Она однозначно задается парой чисел (a,b): D=A+a*(B-A)+b*(C-A)

 

Для нее координаты текстуры будут такие:

Du=Au+a*(Bu-Au)+b*(Cu-Au)

Dv=Av+a*(Bv-Av)+b*(Cv-Av)

 

Пусть проекция D на экран как раз и имеет координаты (sx, sy), тогда для нее выполнены написанные выше соотношения:

i*DZ=Dx*dist

j*DZ=Dy*dist

 

Опустим некоторые математические выкладки, из которых видно, что:

 

u=(C1*sx+C2*sy+C3)/( C4*sx+C5*sy+C6)

v=(C7*sx+C8*sy+C9)/( C4*sx+C5*sy+C6)

 

Где С1, …,С9 – просто какие-то коэффициенты, зависящие от грани. То есть, можно посчитать эти коэффициенты один раз для каждой грани, а потом считать u и v. Однако получается как минимум одно деление на точку. Это слишком трудоемко. Поэтому все методы текстурирования используют приближенные вычисления. При этом грань не обязательно должна быть треугольной; можно взять любые три вершины многоугольной грани (это справедливо и для остальных методов наложения текстур).

 

 

Этот метод основан на приближении u и v линейными функциями. Итак, пусть u – линейная функция, u=k1*sx+k2*sy+k3. можно посчитать k1, k2, k3, исходя из того, что хотя бы в вершинах грани u должно совпадать с точным значением – это дает три уравнения, из которых находятся коэффициенты. Но этот способ вычисления все равно медленный – два умножения на пиксель. Общепринято рисовать грань по строкам, это просто и не доводит до умопомешательства кэш-память процессора.

.

Этот способ основан на приближении u и v кусочно-линейными функциями. Каждая строка разбивается на куски (обычно несколько кусков длиной 8/16/32 пикселей плюс остаток), в начале и конце каждого куска u и v считаются точно, а внутри куска интерполируются линейно.

Этот метод основан на приближении u и v квадратичными функциями, то есть параболами. Для каждой строки строятся приближающие u и v квадратичные функции, дальше с их помощью они интерполируются по строке. Здесь понадобятся точные значения u и v в трех точках – начале, конце и середине строки.

 

Это метод при помощи которого смазывают текстуры устройства 3Dfx. Пусть имеется какая либо текстура. Текстура – это 2D картинка, а 2D картинка, в свою очередь – набор замеров цвета через какие-то промежутки. В реальной жизни цвет меняется не скачкообразно, а довольно плавно. При обычном текстурировании мы получаем координаты в текстуре, округляем их до ближайшего целого числа и выбираем нужный цвет из текстуры – поэтому цвет меняется резко, оставаясь непрерывным между узлами сетки; возникает эффект больших квадратов.