Scan-Line Algorithms & Linear Interpolation

Depth Interpolation, Z-Buffering

Planar polygon with plane equation: Ax + By + Cz + D = 0
==> is LINEAR in all directions !

Solve for z: z = (-A/C)x + (-B/C)y -D --> dz/dx = const; dz/dy = const.

Keep this information with the polygon, or with the edges on the scan-line.

Allows quick updating by addition:
    -- calculate initial z-value for edges
    -- add dz*/dy along the edges, and
    -- add dz/dx along coherent spans.
Updated depth values get used in z-buffer for depth comparison.
 

Brightness/Color Interpolation, Gouraud Shading

Same general approach used again !
Assume we know brightness of a polyhedral object face at its vertices.
Now we can also linearly interpolate the brightness across the face.
However, if there are more than 3 vertices, there is no guarantee that
the brightness values globally form a linear function of x and y coordinates.
Thus do the interpolation in a bi-linear form in trapezoidal (triangular) areas.
Compute di*/dy along each edge directly from brightness at vertices.
Again, do quick updates by addition:
    -- calculate initial i-value for edges
    -- add the (di*/dy)'s along the edges.
Need to calculate a new di/dx along each span for each scan-line.
The updated brightness values get used in the i-buffer, if the z-comparison is successful.
There may be tangent discontinuities in the generated "brightness surface" !