Этот метод предполагает, что известны текстурные координаты в вершинах грани. При построчной растеризации грани их линейно интерполируют вдоль ребер, а затем, при отрисовке спана – вдоль спана. При интерполяции вдоль ребер с ними поступают тем же образом, что и с 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 пикселов), рассчитывают точные координаты на концах этих отрезков, а между ними интерполируют линейно.