Einführung in Visual Computing
186.822
Polygon Filling Werner Purgathofer Linked Lists flexible data - - PowerPoint PPT Presentation
Einfhrung in Visual Computing 186.822 Polygon Filling Werner Purgathofer Linked Lists flexible data structure x 1 x 2 pointer data (link to next element) list^ list^.next^ list x 1 x 2 x 1 x 2 x 1 x 2 list^.next
186.822
Werner Purgathofer / Einf. in Visual Computing 2
flexible data structure
data pointer (link to next element)
x1 x2
x1 x2
x1 x2
list list^.next list^.next^.next list^ list^.next^
Werner Purgathofer / Einf. in Visual Computing 3
1 2 3 4 5 list
Werner Purgathofer / Einf. in Visual Computing 4
1 2 3 4 5 new
list
Werner Purgathofer / Einf. in Visual Computing 5
1 2 3 4 5 new new^.next = list list = new list
Werner Purgathofer / Einf. in Visual Computing 6
1 2 3 4 5 last1 last2 list
help
Werner Purgathofer / Einf. in Visual Computing 7
1 2 3 4 5 last1 last2 list
help
Werner Purgathofer / Einf. in Visual Computing 8
1 2 3 4 5 last1 last2 list
help
Werner Purgathofer / Einf. in Visual Computing 9
1 2 3 4 5 last1 last2 list
help
Werner Purgathofer / Einf. in Visual Computing 10
1 2 3 4 5 last1 last2 list
help
Werner Purgathofer / Einf. in Visual Computing 11
1 2 3 4 5 last1 last2 list
help
Werner Purgathofer / Einf. in Visual Computing 12
nonzero-winding- number rule
???
Werner Purgathofer / Einf. in Visual Computing 13
area-filling algorithms
“interior”, “exterior” for self-intersecting polygons?
nonzero-winding-number rule same result for simple polygons
Werner Purgathofer / Einf. in Visual Computing 14
inside/outside switches at every edge straight line to the outside:
even # edge intersections = outside
1 2 3 4 1 2 3 4 1 2 3 1 2 1
Werner Purgathofer / Einf. in Visual Computing 15
point is inside if polygon surrounds it straight line to the outside:
same # edges up and down = outside different # edges up and down = inside
Werner Purgathofer / Einf. in Visual Computing 16
for polygon area (solid-color, patterned)
scan-line polygon fill algorithm intersection points located and sorted consecutive pairs define interior span attention with vertex intersections exploit coherence (incremental calculations) flood fill algorithm
Werner Purgathofer / Einf. in Visual Computing 17
The sorted edge table contains all polygon edges sorted by lowest y-value
A B C D E F yF xA 1/mAF yB xA 1/mAB yE xF 1/mFE yB xC 1/mCB yD xC 1/mCD yE xD 1/mDE ymax xstart 1/m
Werner Purgathofer / Einf. in Visual Computing 18
sort all edges by smallest y-value edge entry: [max. y-value, x-intercept, inverse slope] active-edge list
for each scan line contains all edges crossed by that scan line incremental update
consecutive intersection pairs (spans) filled
yB xC 1/mCB yD xC 1/mCD
Werner Purgathofer / Einf. in Visual Computing 19
The sorted edge table contains all polygon edges sorted by lowest y-value
A B C D E F yF xA 1/mAF yB xA 1/mAB yE xF 1/mFE yB xC 1/mCB yD xC 1/mCD yE xD 1/mDE ymax xstart 1/m
Werner Purgathofer / Einf. in Visual Computing 20
Active Edge List When processing from bottom to top, keep a list of all active edges
A B C D E F yF xA 1/mAF yB xA 1/mAB yE xF 1/mFE yB xC 1/mCB yD xC 1/mCD yE xD 1/mDE
Werner Purgathofer / Einf. in Visual Computing 21
Active Edge List
incremental update!
yF xA 1/mAF yB xA 1/mAB A B C D E F yF xA 1/mAF yB xA 1/mAB yE xF 1/mFE yB xC 1/mCB yD xC 1/mCD yE xD 1/mDE
Werner Purgathofer / Einf. in Visual Computing 22
Active Edge List
yF xA 1/mAF yB xA 1/mAB A B C D E F yF xA 1/mAF yB xA 1/mAB yE xF 1/mFE yB xC 1/mCB yD xC 1/mCD yE xD 1/mDE
Werner Purgathofer / Einf. in Visual Computing 23
Active Edge List
yE xF 1/mFE yB xA 1/mAB A B C D E F yF xA 1/mAF yB xA 1/mAB yE xF 1/mFE yB xC 1/mCB yD xC 1/mCD yE xD 1/mDE
Werner Purgathofer / Einf. in Visual Computing 24
Active Edge List
yE xF 1/mFE yB xA 1/mAB A B C D E F yF xA 1/mAF yB xA 1/mAB yE xF 1/mFE yB xC 1/mCB yD xC 1/mCD yE xD 1/mDE
Werner Purgathofer / Einf. in Visual Computing 25
Active Edge List
yE xF 1/mFE yB xA 1/mAB A B C D E F yF xA 1/mAF yB xA 1/mAB yE xF 1/mFE yB xC 1/mCB yD xC 1/mCD yE xD 1/mDE
Werner Purgathofer / Einf. in Visual Computing 26
Active Edge List
A B C D E F yF xA 1/mAF yB xA 1/mAB yE xF 1/mFE yB xC 1/mCB yD xC 1/mCD yE xD 1/mDE yE xF 1/mFE yB xA 1/mAB yB xC 1/mCB yD xC 1/mCD
Werner Purgathofer / Einf. in Visual Computing 27
Active Edge List
yE xF 1/mFE yB xA 1/mAB yB xC 1/mCB yD xC 1/mCD A B C D E F yF xA 1/mAF yB xA 1/mAB yE xF 1/mFE yB xC 1/mCB yD xC 1/mCD yE xD 1/mDE
Werner Purgathofer / Einf. in Visual Computing 28
Active Edge List
yE xF 1/mFE yD xC 1/mCD A B C D E F yF xA 1/mAF yB xA 1/mAB yE xF 1/mFE yB xC 1/mCB yD xC 1/mCD yE xD 1/mDE
Werner Purgathofer / Einf. in Visual Computing 29
Active Edge List
yE xF 1/mFE yD xC 1/mCD A B C D E F yF xA 1/mAF yB xA 1/mAB yE xF 1/mFE yB xC 1/mCB yD xC 1/mCD yE xD 1/mDE
Werner Purgathofer / Einf. in Visual Computing 30
Active Edge List
yE xF 1/mFE yE xD 1/mDE A B C D E F yF xA 1/mAF yB xA 1/mAB yE xF 1/mFE yB xC 1/mCB yD xC 1/mCD yE xD 1/mDE
Werner Purgathofer / Einf. in Visual Computing 31
Active Edge List
yE xF 1/mFE yE xD 1/mDE A B C D E F yF xA 1/mAF yB xA 1/mAB yE xF 1/mFE yB xC 1/mCB yD xC 1/mCD yE xD 1/mDE
Werner Purgathofer / Einf. in Visual Computing 32
Active Edge List
A B C D E F yF xA 1/mAF yB xA 1/mAB yE xF 1/mFE yB xC 1/mCB yD xC 1/mCD yE xD 1/mDE
Werner Purgathofer / Einf. in Visual Computing 33
incremental update of intersection point 1 + =
k k+1
y y m x x
k k+1
1 + = slope of polygon boundary line: m (for 2 successive scanlines)
yk + 1 yk (xk , yk) (xk+1, yk+1)
Werner Purgathofer / Einf. in Visual Computing 34
intersection points along scan lines that intersect polygon vertices → either special handling (1 or 2 intersections?) → or move vertices up or down by ε
1 1 2 2 2
Werner Purgathofer / Einf. in Visual Computing 35
pixel filling of area
areas with no single color boundary start from interior point “flood” internal region 4-connected, 8-connected areas reduce stack size by eliminating several recursive calls
Werner Purgathofer / Einf. in Visual Computing 36
area must be distinguishable from boundaries example: area defined within multiple color boundaries
seed point
Werner Purgathofer / Einf. in Visual Computing 37
Definition: 4-connected means, that a connection is only valid in these 4 directions Definition: 8-connected means, that a connection is valid in these 8 directions
Werner Purgathofer / Einf. in Visual Computing 38
has an 8-connected border an 8-connected area has a 4-connected border a 4-connected area
Werner Purgathofer / Einf. in Visual Computing 39
void floodFill4 (int x, int y, int new, int old) { int color; /* set current color to new */ getPixel (x, y, color); if (color = old) { setPixel (x, y); floodFill4 (x–1, y, new, old); /* left */ floodFill4 (x, y+1, new, old); /* up */ floodFill4 (x+1, y, new, old); /* right */ floodFill4 (x, y–1, new, old) /* down */ }} 1 2 4 3 recursion sequence
Werner Purgathofer / Einf. in Visual Computing 40
1 2 4 3 recursion sequence
Werner Purgathofer / Einf. in Visual Computing 41
floodFill4 produces too high stacks (recursion!) solution:
incremental horizontal fill (left to right) recursive vertical fill (first up then down)
Werner Purgathofer / Einf. in Visual Computing 42
1 2 recursion sequence
Werner Purgathofer / Einf. in Visual Computing 43
Stack: x
Werner Purgathofer / Einf. in Visual Computing 44
B A 1 2 3 Stack: x A B
Werner Purgathofer / Einf. in Visual Computing 45
A 1 2 3 Stack: A B C D E F F E C D 4 5 6 7 8 9 10 11
Werner Purgathofer / Einf. in Visual Computing 46
A 1 2 3 Stack: A C D E F G G E C D 4 5 6 7 8 9 10 11 12 13 14
Werner Purgathofer / Einf. in Visual Computing 47
A 1 2 3 Stack: A C D E G H E=H C D 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Werner Purgathofer / Einf. in Visual Computing 48
A 1 2 3 Stack: A C D E H C D 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 (E)
Werner Purgathofer / Einf. in Visual Computing 49
A 1 2 3 Stack: A C D I J C I 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 J 20 21 22
Werner Purgathofer / Einf. in Visual Computing 50
A 1 2 3 Stack: A C I J C I 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Werner Purgathofer / Einf. in Visual Computing 51
A 1 2 3 Stack: A C I K C
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Werner Purgathofer / Einf. in Visual Computing 52
A=N 1 2 3 Stack: A C K L M N C M 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 L
Werner Purgathofer / Einf. in Visual Computing 53
(A) 1 2 3 Stack: A C L M N C M 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 L 31 32 33
Werner Purgathofer / Einf. in Visual Computing 54
1 2 3 Stack: C L M C 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 L 31 32 33 34 35
Werner Purgathofer / Einf. in Visual Computing 55
1 2 3 Stack: C L C 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
Werner Purgathofer / Einf. in Visual Computing 56
1 2 3 Stack: C 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 finished!
normally surface elements of 3D objects attributes are surface attributes
color, material, transparency, texture, geometric microstructure, reflection properties, …
attributes and normal vectors often at the vertices triangles: linear interpolation with barycentric coordinates
Werner Purgathofer / Einf. in Visual Computing 57