SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers,...

31
SCAN-LINE FILL ALGORITHMS

Transcript of SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers,...

Page 1: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

SCAN-LINE FILL ALGORITHMS

Page 2: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Acknowledgements

• Some of the material for the slides were adapted from College of Computer Information Science , Northeastern University

• Some of the images were taken from Hearn, Baker, and Carithers, “Computer Graphics with OpenGL”

Page 3: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Fill Algorithms

• Given the edges defining a polygon, and a color for the polygon, we need to fill all the pixels inside the polygon.

• Three different algorithms:– 1. Scan-line fill

– 2. Boundary fill

– 3. Flood fill

Page 4: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Filled Area Primitives

• Two basic approaches to area filling on raster systems:– Determine the overlap intervals for scan lines that

cross the area (scan-line)

– Start from an interior position and point outward from this point until the boundary condition reached (fill method)

• Scan-line: simple objects, polygons, circles,..

• Fill-method: complex objects, interactive fill.

Page 5: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Scan-line Polygon Fill

• For each scan-line:

– Locate the intersection of the scan-line with the edges (y=ys)

– Sort the intersection points from left to right.

– Draw the interiors intersection points pairwise. (a-b), (c-d)

• Problem with corners. Same point counted twice or not?

a b c d

Page 6: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

● a,b,c and d are intersected by 2 line segments each.

● Count b,c twice but a and donce. Why?

a

b

c

d

a

b

c

d

2

1

2

2

2

2

1

● Solution:Make a clockwise or counter-clockwise traversal on edges.Check if y is monotonically increasing or decreasing.If direction changes, double intersection, otherwise single intersection.

Page 7: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Scan Line Fill Algorithm• Basic algorithm:

– Assume scan line start from the left and is outside the polygon.– When intersect an edge of polygon, start to color each pixel (because now

we’re inside the polygon), when intersect another edge, stop coloring …– Odd number of edges: inside– Even number of edges: outside

• Advantage of scan-line fill: It does fill in the same order as rendering, and so can be pipelined.

out

out

in

in

Page 8: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Scan-Line Polygon Fill Algorithm• Odd-parity rule

Calculate span extrema (intersections) on each scan line

Using parity rule to determine whether or not a point is inside a region

Parity is initially even each intersection encountered thus inverts the parity bit

parity is odd interior point (draw)parity is even exterior point (do not draw)

o oe e

o e/o e

Page 9: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Scan Line Fill: What happens at edge end-point?

• Edge endpoint is duplicated.• In other words, when a scan line intersects an edge endpoint, it intersects

two edges.• Two cases:

– Case A: edges are monotonically increasing or decreasing– Case B: edges reverse direction at endpoint

• In Case A, we should consider this as only ONE edge intersection• In Case B, we should consider this as TWO edge intersections

Scan-line Scan-line

Case A Case B

Page 10: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Speeding up Scan-Line Algorithm

• 1. Parallel algorithm: process each scan line in one processor. Each scan line is independent

• 2. From edge intersection with one scan line, derive edge intersection with next scan line

• 3. Active edge list

Page 11: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Scan-Line Polygon Fill Algorithm

• Finding intersection pairs:

Scan-line conversion method (for non-horizontal edges):

Taking advantage of the edge coherence property: Incremental calculation between successive scan lines

Or using Bresenham’s or mid-point scan line conversion algorithm on each edgeand keep a table of span extrema for each scan line

Page 12: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Scan-Line Polygon Fill Algorithm

• Incremental scan line method:

m = (y[k+1] – y[k]) / (x[k+1] – x[k])

y[k+1] – y[k] = 1

x[k+1] = x[k] + 1/m x[k] = x[0] + k/m

Scan line y[k] + 1

Scan line y[k]

(x[k+1], y[k+1])

(x[k], y[k])

Page 13: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Derive next intersection

• Suppose that slope of the edge is m = Dy/Dx

• Let xk be the x intercept of the current scan line, and xk+1 be the x intercept of the next scan line, then

xk+1 = xk + Dx/Dy

• Algorithm: – Suppose m = 7/3– Initially, set counter to 0, and increment to 3 (which is Dx).– When move to next scan line, increment counter by increment– When counter is equal or greater than 7 (which is Dy), increment the

x-intercept (in other words, the x-intercept for this scan line is one more than the previous scan line), and decrement counter by 7.

Page 14: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

yk

xk

Line with slope 7/3

Page 15: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

y0

x0

2630

decrement

decrement

0415

decrement

Page 16: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Scan-Line Polygon Fill Algorithm

• Incremental scan line method:

Bucket sorted edge table: containing all edges sorted by their smaller y coordinate.

Each bucket: edges are recorded in order of increasing x coordinate of the endpoint.

Each entry of a bucket: y[max] of the edge, x[min] of lower endpoint and 1/m (x increment)

Active-edge table (or list): keep track of the set of edges that the scan line intersects and the intersection points in a data structure

Page 17: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Scan-Line Polygon Fill Algorithm

• Example:

5

1

4

3

2

y5 x1 1/m[1,5] y2 x1 1/m[1,2]

y5 x4 1/m[4,5] y3 x4 1/m[4,3]

y3 x2 1/m[2,3]

y4::

y1

y2::

::0

Sorted edge table (ET)

Page 18: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Scan-Line Polygon Fill Algorithm

• Example:

5

1

4

3

2

y5 xa 1/m[1,5] y2 xb 1/m[1,2]

y5 x5 1/m[1,5] y5 x5 1/m[4,5]y[5]::

y[a]

:::

::0

Active edge table (AET)

ba

y3 xc 1/m[3,4] y2 xd 1/m[1,2]

c d

Page 19: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Active Edge List• Start with the sorted edge table.

– In this table, there is an entry for each scan-line.– Add only the non-horizontal edges into the table.

• For each edge, we add it to the scan-line that it begins with (that is, the scan-line equal to its lowest y-value).

• For each edge entry, store (1) the x-intercept with the scan-line, (2) the largest y-value of the edge, and (3) the inverse of the slope.

– Each scan-line entry thus contains a sorted list of edges. The edges are sorted left to right. (To maintain sorted order, just use insertion based on their x value.)

• Next, we process the scan lines from bottom to top.– We maintain an active edge list for the current scan-line.– The active edge list contains all the edges crossed by that scan line. As we

move up, update the active edge list by the sorted edge table if necessary.– Use iterative coherence calculations to obtain edge intersections quickly.

Page 20: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Polygon Data Structure

after preprocessingEdge Table (ET) has a list of edges for each scan line.

e1

e2

e3e4

e5

e6

e7e8

e9

e10

e11

0

5

10

13

13

12

11

10 → e6

9

8

7 → e4 → e5

6 → e3 → e7 → e8

5

4

3

2

1 → e2 → e1 → e11

0 → e10 → e9

e11

7 → e3 → e4 → e5

6 → e7 → e8

11 → e6

10

Page 21: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

The Algorithm

1. Start with smallest nonempty y value in ET.

2. Initialize SLB (Scan Line Bucket) to nil.

3. While current y ≤ top y value:a. Merge y bucket from ET into SLB; sort on xmin.

b. Fill pixels between rounded pairs of x values in SLB.

c. Remove edges from SLB whose ytop = current y.

d. Increment xmin by 1/m for edges in SLB.

e. Increment y by 1.

Page 22: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Running the Algorithm

e2

e3e4

e5

e6

e7e8

e9

e10

e11

0

5

10

13

ET1312

11 → e61098

7 → e3 → e4 → e56 → e7 → e85432

1 → e2 → e110 → e10 → e9

xmin ymax 1/me2 2 6 -2/5e3 1/3 12 1/3e4 4 12 -2/5e5 4 13 0e6 6 2/3 13 -4/3e7 10 10 -1/2e8 10 8 2e9 11 8 3/8e10 11 4 -3/4e11 6 4 2/3

50 10 15

Page 23: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Running the Algorithm

e2

e3e4

e5

e6

e7e8

e9

e10

e11

0

5

10

13

50 10 15

y=0

SCB→ 11 4 -3/4 •

11 8 3/8 •e9

e1010 1/4

11 3/8

Page 24: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Running the Algorithm

e2

e3e4

e5

e6

e7e8

e9

e10

e11

0

5

10

13

50 10 15

y=1

SLB→ 2 6 -2/5 •

6 4 2/3 •e11

e21 3/5

10 1/4 4 -3/4 •

11 3/8 8 3/8 •e9

e10

6 2/3

9 1/2

11 6/8

Page 25: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Running the Algorithm

e2

e3e4

e5

e6

e7e8

e9

e10

e11

0

5

10

13

50 10 15

y=2

SLB→ 1 3/5 6 -2/5 •

6 2/3 4 2/3 •e11

e2

9 1/2 4 -3/4 •

11 6/8 8 3/8 •e9

e10

12 1/8

8 3/4

7 1/3

1 1/5

Page 26: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Running the Algorithm

e3e4

e5

e6

e7e8

e9

e100

5

10

13

50 10 15

y=3

SLB→ 1 1/5 6 -2/5 •

7 1/3 4 2/3 •e11

e2

8 3/4 4 -3/4 •

12 1/8 8 3/8 •e9

e10

12 4/8

8

8

4/5

e11e2

Page 27: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Running the Algorithm

e3e4

e5

e6

e7e8

e100

5

10

13

50 10 15

y=4

SLB→ 4/5 6 -2/5 •

8 4 2/3 •e11

e2

8 4 -3/4 •

12 4/8 8 3/8 •e9

e10 e11e2e9

Remove these edges.

Page 28: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Running the Algorithm

e3e4

e5

e6

e7e8

0

5

10

13

50 10 15

y=4

SLB→ 4/5 6 -2/5 •e2

12 4/8 8 3/8 •e9

12 7/8

2/5

e2 e11

e10

e9e11 and e10 are removed.

Page 29: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Running the Algorithm

e3e4

e5

e6

e7e8

0

5

10

13

50 10 15

y=5

SLB→ 2/5 6 -2/5 •e2

12 7/8 8 3/8 •e9

13 2/8

0

e2 e11

e10

e9

Page 30: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Running the Algorithm

e3e4

e5

e6

e7e8

0

5

10

13

50 10 15

y=6

SLB→ 0 6 -2/5 •e2

10 10 -1/2 •e7

e2 e11

e10

e9

Remove this edge.

10 8 2 •e8

13 2/8 8 3/8 •e9

9 1/2

12

13 5/8

Page 31: SCAN-LINE FILL ALGORITHMS - Zhejiang Universityfillalgorithm.pdf · Baker, and Carithers, “Computer Graphics with ... • Basic algorithm: – Assume scan line start from the left

Running the Algorithm

e3e4

e5

e6

e7e8

0

5

10

13

50 10 15

y=7

SLB→

4 13 0 •e5

9 1/2 10 -1/2 •e7

e2 e11

e10

e9

12 8 2 •e8

13 5/8 8 3/8 •e9

Add these edges.

4 12 -2/5 •e4

1/3 12 1/3 •e3