Polygon Scan Conversion – 11b. 2 Rasterization Rasterization takes shapes like triangles and...
-
Upload
isabel-todd -
Category
Documents
-
view
218 -
download
1
Transcript of Polygon Scan Conversion – 11b. 2 Rasterization Rasterization takes shapes like triangles and...
Polygon Scan Conversion – 11b
2
Rasterization
• Rasterization takes shapes like triangles and determines which pixels to fill.
3
Filling Polygons
First approach:
1. Polygon Scan-Conversion• Rasterize a polygon scan line by scan line,
determining which pixels to fill on each line.
4
Filling Polygons
Second Approach:
2. Polygon Fill• Select a pixel inside the polygon. Grow outward
until the whole polygon is filled.
5
Polygon TypesConvex
Not Convex
For every pair of points within a convex polygon, the line segment connecting them is also completely enclosed within the polygon.
6
Why Polygons?
• You can approximate practically any surface if you have enough polygons.
• Graphics hardware is optimized for polygons (and especially triangles)
7
Which Pixels to Fill?
• Pixels entirely inside polygon Yes
• Pixels partially inside ?
• Convention: only fill pixels whose centers are within the polygon
• This is an imperfect solution.
InsideOutside
Polygon edge
YesNo?
8
Spatial Coherence
• Spatial Coherence:• If one pixel is filled, its neighbors likely are also.
• Use spatial coherence to construct an efficient algorithm.
• Process each scan line in order from left to right.
9
Coherence
Scan-line
Edge
Span
10
Polygon Scan Conversion
Intersection Points
Other points in the span
11
Polygon Scan Conversion
• Process each scan line1. Find the intersections of the scan line with all
polygon edges.
2. Sort the intersections by x coordinate.
3. Fill in pixels between pairs of intersections using an odd-parity rule.- Set parity even initially.
- Each intersection flips the
parity.
- Draw when parity is odd.
12
Special Cases: Vertices• How do we count the intersecting vertex in the parity computation?
• Count it zero or two times.
Scan line
vertex
13
Special Cases: Vertices• What about:
• Here it counts once.
Scan line
vertex
14
Special Cases: Vertices
• Each edge has two vertices.• The ymin vertex is the vertex with the lower y
coordinate.
• Vertices only count when they are the lower ymin vertex for an edge.
15
Special Cases: Vertices
• Both cases now work correctly
16
Horizontal Edges• What if neither vertex is lower? Which is ymin?
Don’t count either vertex in the parity calculation!
ScanLine
17
Top Spans of Polygons
• Effect of only counting ymin :• Top spans of polygons are not drawn
• If two polygons share this edge, it is not a problem.
18
Shared Polygon Edges
• What if two polygons share an edge?
• Solution:• Span is closed on left and
open on right (xmin x < xmax)
• Scan lines closed on bottom and
open on top (ymin y < ymax)
Draw Last polygon wins
Orange last Blue last
19
Polygon Scan-Conversion
• Process for scan converting polygons• Process one polygon at a time.
• Store information about every polygon edge.
• Compute spans for each scan line.
• Draw the pixels between the spans.
• This can be optimized using an edge table.
• One entry in the edge table per polygon edge.
• Perform scan conversion one scan line at a time.
• For each new scan line, consult the edge table to determine if it intersects any new edges.
This is the beginning of your code for project 1
20
Computing Intersections
• For each scan line, we need to know if it intersects the polygon edges.
• It is expensive to compute a complete line-line intersection computation for each scan line.
• After computing the intersection between a scan line and an edge, we can use that information in the next scan line.
21
Scan Line Intersection
Currentscan line
yi+1
Polygon Edges
Intersection points from
previous scan line
Intersection pointsneeded
Previousscan line
yi
22
Scan Line IntersectionUse edge coherence to incrementally update the
x intersections.
We know
Each new scan line is 1 greater in y
We need to compute x for a given scan line,
min@max@
minmax ,yy xx
yymbmxy
11 ii yy
m
byx
(x@ymax,ymax)
(x@ymin,ymin)
23
Scan Line Intersection
So,
and
then
This is a more efficient way to compute xi+1.
m
byx
m
byx i
ii
i
11 ,
11 ii yy
mx
mm
by
m
byx i
iii
1111
24
Edge Tables
• We will use two different edge tables:• Active Edge Table (AET)
• Stores all edges that intersect the current scan line.
• Global Edge Table (GET)• Stores all polygon edges.
• Used to update the AET.
25
Active Edge Table
• Table contains one entry per edge intersected by the current scan line.
• At each new scan line:• Compute new intersections for all edges using the
formula.
• Add any new edges intersected.
• Remove any edges no longer intersected.
• To efficiently update the AET, we will maintain a global edge table (GET)
mxx ii
11
26
Global Edge Table
• Table contains information about all polygon edges.
• It has one bucket for each scan line.• Each bucket stores a list of edges whose ymin value
is the scan line y value.
• Each edge is found in only one bucket.
• Each entry in the GET contains• The edge’s ymax value.
• The x@ymin value (the x value at the ymin point)
• The x increment value (1/m)
27
Global Edge Table Example
GET Entries (ymax, x@ymin, 1/m)
(5, 2, ¼)
(6, 3, 3)
(8, 6, -3/2)
(8, 0, 3/4)
AB
BC
CD
DE
EA (4, 2, -2/3)
Why don’t we store ymin?
0 1 2 3 4 5 6 7 8
0
1
2
3
4
5
6
7
8
A
B
C
D
E
AB = (2, 1), (3, 5)BC = (3, 5), (6, 6)CD = (6, 6), (3, 8)DE = (3, 8), (0, 4)EA = (0, 4), (2, 1)
28
Global Edge Table Example
GET
0
1
2
3
4
5
6
7
8
Indexed by
scan line
AB EA
(ymax, x@ymin, 1/m)
0 1 2 3 4 5 6 7 8
0
1
2
3
4
5
6
7
8
A
B
C
D
E
Place entries into the GET
based on the ymin values.
8, 6, -3/2
6, 3, 3
8, 0, ¾
5, 2, ¼ 4, 2, -2/3
AB = (2, 1), (3, 5)BC = (3, 5), (6, 6)CD = (6, 6), (3, 8)DE = (3, 8), (0, 4)EA = (0, 4), (2, 1)
DE
CD
BC
29
Active Edge Table Example
• The active edge table stores information about the edges that intersect the current scan line.
• Entries are• The ymax value of the edge
• The x value where the edge intersects the current scan line.
• The x increment value (1/m)
• Entries are sorted by x values.
30
Active Edge Table Example
AETScan Line 3
1. The ymax value for that edge2. The x value where the scan line intersects
the edge.3. The x increment value (1/m)
0 1 2 3 4 5 6 7 8
0
1
2
3
4
5
6
7
8
A
B
C
D
E
AB = (2, 1), (3, 5)BC = (3, 5), (6, 6)CD = (6, 6), (3, 8)DE = (3, 8), (0, 4)EA = (0, 4), (2, 1)
AB
4, 2/3, -2/3 5, 5/2, 1/4
EA
(ymax, x, 1/m)
31
Active Edge Table Example
AETScan Line 4
1. The ymax value for that edge2. The x value where the scan line intersects
the edge.3. The x increment value (1/m)
Scan Line 4
ymax = 4 for EA, so it gets removed from the AET.
New x value for AB is 5/2 + 1/4 = 11/4
In the GET, edge DE is stored in bucket 4,
so it gets added to the AET.
0 1 2 3 4 5 6 7 8
0
1
2
3
4
5
6
7
8
A
B
C
D
E
AB = (2, 1), (3, 5)BC = (3, 5), (6, 6)CD = (6, 6), (3, 8)DE = (3, 8), (0, 4)EA = (0, 4), (2, 1)
AB
4, 2/3, -2/3 5, 5/2, 1/4
EA
(ymax, x, 1/m)
8, 0, 3/4
DE
5, 11/4, 1/4
32
Active Edge Table Example
AETScan Line 5
1. The ymax value for that edge2. The x value where the scan line intersects
the edge.3. The x increment value (1/m)
0 1 2 3 4 5 6 7 8
0
1
2
3
4
5
6
7
8
A
B
C
D
E
AB = (2, 1), (3, 5)BC = (3, 5), (6, 6)CD = (6, 6), (3, 8)DE = (3, 8), (0, 4)EA = (0, 4), (2, 1)
ABDE
(ymax, x, 1/m)
8, 0, 3/4 5, 11/4, 1/48, 3/4, 3/4
Increment x = 0 + 3/4
Remove AB,since ymax = 5.
Add BC since it is in the GET at ymin = 5.
6, 3, 3
BC
33
Active Edge Table Example
Scan Line 6 – Your Turn
AB = (2, 1), (3, 5)BC = (3, 5), (6, 6)CD = (6, 6), (3, 8)DE = (3, 8), (0, 4)EA = (0, 4), (2, 1)
AET
DE
8, 3/4, 3/4 6, 3, 3
BC
D
0 1 2 3 4 5 6 7 8
0
1
2
3
4
5
6
7
8
A
B
C
E
34
One More Example
• What is the global edge table for this polygon?• 1. Find Edges
0 1 2 3 4 5 6 7 8
0
1
2
3
4
5
6
7
8
A
B
C
AB = ?BC = ?CA = ?
35
One More Example
• What is the global edge table for this polygon?• 2. Compute GET Entries
0 1 2 3 4 5 6 7 8
0
1
2
3
4
5
6
7
8
A
B
C
AB = (3, 3), (7, 8)BC = (7, 8), (1, 6)CA = (1, 6), (3, 3)
(ymax, x@ymin, 1/m)
(8, 3, 4/5) (8, 1, 3) (6, 3, -2/3)
36
One More Example• What is the global edge table for this polygon?
• 3. Place entries into GET
0 1 2 3 4 5 6 7 8
0
1
2
3
4
5
6
7
8
A
B
C
AB = (3, 3), (7, 8)BC = (7, 8), (1, 6)CA = (1, 6), (3, 3)
(8, 3, 4/5) (8, 1, 3) (6, 3, -2/3)
GET
0
1
2
3
4
5
6
7
8
37
One More Example• What is the global edge table for this polygon?
• 3. Place entries into GET
0 1 2 3 4 5 6 7 8
0
1
2
3
4
5
6
7
8
A
B
C
AB = (3, 3), (7, 8)BC = (7, 8), (1, 6)CA = (1, 6), (3, 3)
(8, 3, 4/5) (8, 1, 3) (6, 3, -2/3)
GET
0
1
2
3
4
5
6
7
8
CA
6, 3, -2/3 8, 3, 4/5
AB
8, 1, 3
BC
38
Scan Line Algorithm
1. Add polygon edges to the Global Edge Table (GET)
2. Set y to the smallest y coordinate in the GET.
3. Initially, set the Active Edge Table (AET) to be empty.
4. Repeat until the AET and GET are empty:a. Add edges from the GET to the AET in which ymin = y.
b. Remove edges from the AET in which ymax = y.
c. Sort AET on x.
d. Fill pixels between pairs of intersections in the AET
e. For each edge in the AET, replace x with x + 1/m
f. Set y = y + 1 to move to the next scan line
39
Filling Techniques
• A second approach to drawing polygons is to use a filling technique, rather than scan conversion.
• Pick a point inside the polygon, then fill neighboring pixels until the polygon boundary is reached.
• Boundary Fill Approach:• Draw polygon boundary.
• Determine an interior point.
• Starting at the interior point, do• If the point is not the boundary color or the fill color
• Set this pixel to the fill color.• Propagate to the pixel’s neighbors and continue.
40
Propagating to Neighbors
• Most frequently used approaches:• 4-connected area
• 8-connected area
4-connected 8-connected
41
Fill Problems
• Fill algorithms have potential problems
• E.g., 4-connected area fill:
Starting point Fill complete
42
Fill Problems• Similarly, 8-connected can “leak” over to another
polygon
• Another problem: the algorithm is highly recursive• Can use a stack of spans to reduce amount of recursion
Starting point Fill Complete
43
Pattern Filling
• Often we want to fill a region with a pattern, not just a color
• Define an n by m pixmap (or bitmap) that we wish to replicate across the region
5x4 pixmap
Object to be patterned
Final patterned object
44
Pattern Filling
• How do we determine which color to color a point in the object?
• Use the MOD function to tile the pattern across the polygon
• For point (x, y)• Use the pattern color located at (x MOD m, y MOD
n)
45
Triangles
• Always convex: No matter how you rotate a triangle, it only has one span per scan line.
• Any polygon can be decomposed into triangles. Convex Concave
46
Triangles (cont.)
• Rasterization algorithms can take advantage of triangle properties.
• Graphics hardware is optimized for triangles.
• Because triangle drawing is so fast, many systems will subdivide polygons into triangles prior to scan conversion.