Scan Conversion
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
14
12
10
8
6
4
2
0
0
10
12
14
Filling Polygons:
Special Cases
14
12
10
ymax xmin
1
slope
Edge Table (ET) Entry
4
2
0
0
10
12
14
Scan Line Polygon Fill
Algorithm
14
12
10
11
10
7
6
0
0
10
12
14
0
13
Scan Line
AB
3
6/4
FA
12
CD
12
DE
-5/2
EF
-5/2
BC
5
6/4
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
CA
Cq
Cp
CB
Cp = ?
Cq= ?
Ck = ?
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)