float invZ1 = 1.0 / poly.vertices [i1].z;
float invZ2 = 1.0 / poly.vertices [i2].z;
float dx1 = (poly.vertices [i1Next].x - poly.vertices [i1].x) / (poly.vertices [i1Next].y - poly.vertices [i1].y);
float dx2 =
(poly.vertices [i2Next].x - poly.vertices [i2].x) / (poly.vertices [i2Next].y - poly.vertices [i2].y);
float dlnvZI = (1.0/poly.vertices [i1Next].z -1.0/poly.vertices [i1].z) / (poly.vertices [i1Next].y - poly.vertices [i1].y);
float dlnvZ2 = (1.0/poly.vertices [i2Next].z - 1.0/poly.vertices [i2].z) / (poly.vertices [i2Next].y - poly.vertices [i2].y);
int y1 Next = (int) poly.vertices [i1 Next].y;
int y2Next = (int) poly.vertices [i2Next].y;
for (int y = yMin; y <= yMax; y++ ) {
Span * span = pool -> allocSpan ();
if ( span == NULL ) return;
span -> x1 = x1;
span -> invZ1 = invZ1;
span -> x2 = x2;
span -> invZ2 = invZ2;
span -> facet = (Polygon3D *) &poly;
addSpan ( y, span );
x1 +=dx1; x2 += dx2; invZ1 += dlnvZI; invZ2 += dlnvZ2;
if ( y + 1 == y1 Next) {
i1 - ilNext; if (-i1Next<0 ) i1 Next = poly.numVertices - 1;
yINext = (int) poly.vertices [i1Next].y;
if (poly.vertices[i1].y>=poly.vertices[i1Next].y) break;
dx1 =

Компьютерная графика. Полигональные модели

(poly.vertices [И Next].х - poly.vertices [i 1 ].x) / (poly.vertices [i1Next].y - poly.vertices [ilj.y); dlnvZI =

(1,0/poly.vertices [i1Next].z- 1.0/poly.vertices [i1].z)/ (poly.vertices [ilNext].y- poly.vertices [i1].y);
}

if ( у + 1 == y2Next)

{
i2 = i2Next;
if ( ++i2Next >= poly.numVertices ) i2Noxt = 0;
y2Next = (int) poly.vertices [i2Next].y;
if(poly.vertices[i2j.y>=poly.vertices[i2Next].y) break;
dx2 =
(poly.vertices [i2Next].x - poly.vertices [i2].x) / (poly.vertices [i2Next].y - poly.vertices |i2].y); dlnvZ2 =
(1.0/poly.vertices [i2Next].z- 1.0/poly.vertices [i2].z) / (poly.vertices [i2Next].y - poly.vertices [i2].y);
}
}
}

Здесь процедура compareSpans (s\, si) сравнивает два отрезка на загораживание (заметим, что для любых двух непересекающихся отрезков на плоскости это можно сделать) и возвращает положительное значение, если отрезок s2 не может загораживать отрезок s 1.


⇐ Предыдущая| |Следующая ⇒