Линейная интерполяция

Этот метод предполагает, что известны текстурные координаты в вершинах грани. При построчной растеризации грани их линейно интерполируют вдоль ребер, а затем, при отрисовке спана – вдоль спана. При интерполяции вдоль ребер с ними поступают тем же образом, что и с x-координатой:

- рассчитывается приращение вдоль оси Y du/dy kul=(Bu-Au)/(By-Ay);

- затем, текстурные координаты для границы первого спана ul=Au+kul*(Ys-Ay), где Ys=floor(Ay+0.5)+0.5;

- наконец, при переходе на очередную линию, к ним прибавляется приращение ul+=kul;

Интерполяция вдоль спана происходит подобным образом:

- рассчитывается приращение вдоль оси X du/dx kus=(ur-ul)/(xr-xl);

- затем, текстурные координаты для первого пиксела us=ul+kus*(Xs-xl), где Xs=floor(xl+0.5)+0.5;

- наконец, для каждого следующего пиксела в спане, к ним прибавляется приращение us+=kus;

kul=1/4, kvl=0, kur=0, kvr=1/2

ul=1/4*1/4=1/16, vl=0

ur=0, vr=1/2*1/4=1/8

kus=(0-1/16)/(1/2)=-1/8

kvs=(1/8-0)/(1/2)=-1/4

(1/16,0)

ul=ul+kul=5/16, vl=0

ur=0, vr=vr+kvr=5/8

kus=(0-5/16)/2=-5/32

kvs=(5/8-0)/(2)=5/16

(5/16,0),(5/32,5/16),(0,5/8)

Правильные текстурные координаты получатся только, если используется параллельное проектирование, только в этом случае текстурные координаты зависят от экранных координат линейно. При перспективной проекции появятся искажения.

Можно линейно интерполировать u’,v’ и w, но тогда придется все равно делить на w для каждой точки.

Можно получать точные (u,v) для спана (два деления на строку), а внутри линейно интерполировать, для коротких спанов это приемлемо, но для длинных заметны искажения, поэтому их разбивают на участки (например по 8 пикселов), рассчитывают точные координаты на концах этих отрезков, а между ними интерполируют линейно.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: