Scan Conversion
Last step in the graphics pipeline Efficiency is a central issue Common primitives – Lines (done last class) – Polygons (fill polygons, today) – Circles Hardware implementations preferable
Filling Polygons: Scan Line Algorithm
Filling Polygons: Special Cases Edge Table (ET) Entry
Scan Line Polygon Fill Algorithm A B C D E F / / /4 -5/2 Scan Line ABBC FA CD EFDE
AET AET at scanline y=8 AET at Scanline y =9 ET Record format : (Ymax, Xmin, 1/m) AET Records format: (Ymax, Xcurrent, 1/m)
Scan Line Polygon Fill: The Algorithm Set y to smallest y coordinate that has an entry in ET Initialize the active edge table (AET) to empty Repeat until the ET and AET are both empty: – Move from ET bucket at y to AET those edges whose ymin = y. (entering edges) – Remove from AET those edges for which y = ymax. – Sort AET on x – Fill in desired pixels on scan line using even-odd parity from AET – Increment y by one (next scan line) – For each edge in the AET, update x by adding x/ y
What color to fill? Recall Shading in OpenGL: Smooth Shading Requested by: glShadeModel(GL_SMOOTH); Lighting calculations will be done at each vertex using the material properties, and the vectors v and l calculated for that vertex. Bilinear interpolation is used to determine color values in the interior of the polygon.
Bilinear Interpolation Cp = ? Cq= ? C k = ? Xa Ya, Xb, Yb, Xk, Yk Need to calculate Xp, Xq. Cp, Cq, Xp, Xq can all use incremental methods Rate of color change!!
Using Incremental Methods Cx Cx+1 = Cx + (Cp –Cq)/(Xq-Xp)