165 void (*func)(
void *,
int,
int,
float,
float))
167 float x0, y0, x1, y1, x2, y2, z0, z1, z2;
168 float u,
v, uxd, uyd, vxd, vyd, uy0, vy0, xx1;
169 const float *span1, *span2;
170 int i, j,
x,
y, sn1, sn2, rectx = zspan->
rectx, my0, my2;
181 if (zspan->
minp2 ==
nullptr || zspan->
maxp2 ==
nullptr) {
202 x0 = y1 * z2 - z1 * y2;
203 y0 = z1 * x2 - x1 * z2;
204 z0 = x1 * y2 - y1 * x2;
210 xx1 = (x0 * v1[0] + y0 * v1[1]) / z0 + 1.0f;
218 x0 = y1 * z2 - z1 * y2;
219 y0 = z1 * x2 - x1 * z2;
221 xx1 = (x0 * v1[0] + y0 * v1[1]) / z0;
227 span1 = zspan->
span1 + my2;
228 span2 = zspan->
span2 + my2;
230 for (i = 0, y = my2; y >= my0; i++, y--, span1--, span2--) {
243 u = ((
double(sn1) * uxd) + uy0) - (i * uyd);
244 v = ((
double(sn1) * vxd) + vy0) - (i * vyd);
246 for (j = 0, x = sn1; x <= sn2; j++, x++) {
247 func(handle, x, y, u + (j * uxd),
v + (j * vxd));
void zspan_scanconvert(ZSpan *zspan, void *handle, float *v1, float *v2, float *v3, void(*func)(void *, int, int, float, float))