0% found this document useful (0 votes)
62 views7 pages

Polygon Clipping and Filling

This document discusses algorithms for polygon clipping and filling. It begins with an overview of polygon clipping algorithms including Sutherland-Hodgman and Weiler-Atherton. It then covers algorithms for scan filling polygons including determining which pixels are inside, handling vertices and horizontal edges. The document concludes with descriptions of boundary filling algorithms.

Uploaded by

Abhay Singh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
62 views7 pages

Polygon Clipping and Filling

This document discusses algorithms for polygon clipping and filling. It begins with an overview of polygon clipping algorithms including Sutherland-Hodgman and Weiler-Atherton. It then covers algorithms for scan filling polygons including determining which pixels are inside, handling vertices and horizontal edges. The document concludes with descriptions of boundary filling algorithms.

Uploaded by

Abhay Singh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 7

1

1
CS 430/536
Computer Graphics I
Polygon Clipping and Filling
Week 3, Lecture 5
David Breen, William Regli and Maxim Peysakhov
Geometric and Intelligent Computing Laboratory
Department of Computer Science
Drexel University
http://gicl.cs.drexel.edu
2
Outline
Polygon clipping
Sutherland-Hodgman,
Weiler-Atherton
Polygon filling
Scan filling polygons
Flood filling polygons
Introduction and discussion of homework #2
3
Polygon
Ordered set of vertices (points)
Usually counter-clockwise
Two consecutive vertices define an edge
Left side of edge is inside
Right side is outside
Last vertex implicitly connected to first
In 3D vertices are co-planar
4
Polygon Clipping
Lots of different cases
Issues
Edges of polygon need
to be tested against
clipping rectangle
May need to add new edges
Edges discarded or divided
Multiple polygons can result
from a single polygon
1994 Foley/VanDam/Finer/Huges/Phillips ICG
5
The Sutherland-Hodgman
Polygon-Clipping Algorithm
Divide and Conquer
Idea:
Clip single polygon using
single infinite clip edge
Repeat 4 times
Note the generality:
2D convex n-gons can clip
arbitrary n-gons
3D convex polyhedra can
clip arbitrary polyhedra
1994 Foley/VanDam/Finer/Huges/Phillips ICG
6
Sutherland-Hodgman Algorithm
Input:
v
1
, v
2
, v
n
the vertices defining the polygon
Single infinite clip edge w/ inside/outside info
Output:
v
1
, v
2
, v
m
, vertices of the clipped polygon
Do this 4 (or n
e
) times
Traverse vertices (edges)
Add vertices one-at-a-time to output polygon
Use inside/outside info
Edge intersections
2
7
Can be done incrementally
If first point inside add. If outside, dont add
Move around polygon from v
1
to v
n
and back to v
1

Check v
i
,v
i+1
wrt the clip edge
Need v
i
,v
i+1
s inside/outside status
Add vertex one at a time. There are 4 cases:
1994 Foley/VanDam/Finer/Huges/Phillips ICG
Sutherland-Hodgman Algorithm
8
foreach polygon P P = P
foreach clipping edge (there are 4) {
Clip polygon P to clipping edge
foreach edge in polygon P
Check clipping cases (there are 4)
Case 1 : Output v
i+1
Case 2 : Output intersection point
Case 3 : No output
Case 4 : Output intersection point
& v
i+1
}

Sutherland-Hodgman Algorithm
9
Sutherland-Hodgman Algorithm
Animated by Max Peysakhov @Drexel University
10
Sutherland-Hodgman Algorithm
Animated by Max Peysakhov @Drexel University
11
Final Result
Note: Edges
XY and ZW!
12
Clipping a concave polygon
Can produce two CONNECTED areas
1994 Foley/VanDam/Finer/Huges/Phillips ICG
Issues with Sutherland-
Hodgman Algorithm
3
13
General clipping algorithm for concave
polygons with holes
Produces multiple polygons (with holes)
Make linked list data structure
Traverse to make new polygon(s)
1994 Foley/VanDam/Finer/Huges/Phillips ICG
Weiler-Atherton Algorithm
14
Weiler-Atherton Algorithm
Given polygons A and B as linked list of
vertices (counter-clockwise order)
Find all edge intersections & place in list
Insert as intersection nodes
Nodes point to A & B
Determine in/out
status of vertices
15
Intersection Special Cases
If intersecting edges are parallel, ignore
Intersection point is a vertex
Vertex of A lies on a vertex or edge of B
Edge of A runs through a vertex of B
Replace vertex with an intersection node
16
Weiler-Atherton Algorithm:
Union
Find a vertex of A outside of B
Traverse linked list
At each intersection point switch to
other polygon
Do until return to starting vertex
All visited vertices and nodes define
unioned polygon
17
Weiler-Atherton Algorithm:
Intersection
Start at intersection point
If connected to an inside vertex, go there
Else step to an intersection point
If neither, stop
Traverse linked list
At each intersection point switch to other
polygon and remove intersection point from list
Do until return to starting intersection point
If intersection list not empty, pick another one
All visited vertices and nodes define anded
polygon
18
Boolean Special Cases
If polygons dont intersect
Union
If one inside the other, return polygon that
surrounds the other
Else, return both polygons
Intersection
If one inside the other, return polygon inside
the other
Else, return no polygons
4
19
Point P Inside a Polygon?
Connect P with another point P` that you know is
outside polygon
Intersect segment PP` with polygon edges
Watch out for vertices!
If # intersections is even (or 0) ! Outside
If odd ! Inside
20
Edge clipping
Re-use line clipping from HW1
Similar triangles method
Cyrus-Beck line clipping
Yet another technique
24
Intersecting Two Edges (1)
Edge 0 : (P
0
,P
1
)
Edge 2 : (P
2
,P
3
)
E
0
= P
0
+ t
0
*(P
1
-P
0
) D
0
! (P
1
-P
0
)
E
2
= P
2
+ t
2
*(P
3
-P
2
) D
2
! (P
3
-P
2
)
P
0
+ t
0
*D
0
= P
2
+ t
2
*D
2

x
0
+dx
0
* t
0
= x
2
+dx
2
* t
2
y
0
+dy
0
* t
0
= y
2
+dy
2
* t
2
25
Intersecting Two Edges (2)
Solve for ts
t
0
= ((x
0
- x
2
) * dy
2
+ (y
2
- y
0
) * dx
2
) /
(dy
0
* dx
2
- dx
0
* dy
2
)
t
2
= ((x
2
- x
0
) * dy
0
+ (y
0
- y
2
) * dx
0
) /
(dy
2
* dx
0
- dx
2
* dy
0
)
See http://www.vb-helper.com/howto_intersect_lines.html
for derivation
Edges intersect if 0 " t
0
,t
2
" 1
Edges are parallel if denominator = 0
26
Filling Primitives: Rectangles,
Polygons & Circles
Two part process
Which pixels to fill?
What values to fill them with?
Idea: Coherence
Spatial: pixels are the
same from pixel-to-pixel
and scan-line to scan line;
Span: all pixels on a span get the same value
Scan-line: consecutive scan lines are the same
Edge: pixels are the same along edges
27
Scan Filling Primitives:
Rectangles
Easy algorithm
Fill from x
min
to x
max

Fill from y
min
to y
max

Issues
What if two adjacent
rectangles share an edge?
Color the boundary pixels twice?
Rules:
Color only interior pixels
Color left and bottom edges
5
28
Scan Filling Primitives:
Polygons
Observe:
FA, DC intersections
are integer
FE, ED intersections
are not integer
For each scan line,
how to figure out
which pixels are
inside the polygon?
1994 Foley/VanDam/Finer/Huges/Phillips ICG
29
Scan Filling Polygons
Idea #1: use midpoint
algo on each edge, fill
in between extrema
points
Note: many extrema
pixels lie outside the
polygon
Why: midpoint algo
has no sense of in/out
1994 Foley/VanDam/Finer/Huges/Phillips ICG
30
Scan Filling Polygons
Idea #2: draw pixels only strictly inside
Find intersections of
scan line with edges
Sort intersections by
increasing x coordinate
Fill pixels on inside
based on a parity bit
B
p
initially even (off)
Invert at each intersect
Draw with odd,
do not draw when even
1994 Foley/VanDam/Finer/Huges/Phillips ICG
31
Scan Filling Polygons
Issues with Idea #2:
If at a fractional x value, how to pick which
pixels are in interior?
Intersections at integer vertex coordinates?
Shared vertices?
Vertices that define a horizontal edge?
32
How to handle vertices?
Problem:
vertices are counted twice
Solution:
If both neighboring vertices are
on the same side of the scan
line, dont count it
If both neighboring vertices are
on different sides of a scan
line, count it once
Compare current y value with y
value of neighboring vertices
Y1
Y2
1
2
1
1 2 1
1
Y1
Y2
1
2
1
1 1 1
1
33
How to handle horizontal edges?
Idea: dont count their vertices
Apply open and closed status
to vertices to other edges
y
min
vertex closed
y
max
vertex is open
On AB, A is at y
min
for JA; AB
does not contribute, B
p
is odd
and draw AB
Edge BC has y
min
at B, but AB
does not contribute, B
p

becomes even and drawing
stops
1994 Foley/VanDam/Finer/Huges/Phillips ICG
6
34
How to handle horizontal edges?
Start drawing at IJ
(B
p
becomes odd).
C is y
max
(open) for BC.
B
p
doesnt change.
Ignore CD. D is y
min
(closed)
for DE. B
p
becomes even.
Stop drawing.
I is y
max
(open) for IJ.
No drawing.
Ignore IH. H is y
min
(closed)
for GH. B
p
becomes odd.
Draw to FE.
Ignore GF. No drawing
1994 Foley/VanDam/Finer/Huges/Phillips ICG
36
Polygon Filling Algorithm
For each polygon
For each edge, mark each scan-line that the edge
crosses by examining its y
min
and y
max
If edge is horizontal, ignore it
If y
max
on scan-line, ignore it
If y
min
<= y < y
max
add edge to scan-line ys edge list
For each scan-line between polygons y
min
and y
max

Calculate intersections with edges on list
Sort intersections in x
Perform parity-bit scan-line filling
Check for double intersection special case
Clear scan-lines edge list
37
How to handle slivers?
When the scan area does
not have an interior
Solution: use anti-aliasing
But, to do so will require
softening the rules about
drawing only interior
pixels
1994 Foley/VanDam/Finer/Huges/Phillips ICG
38
Scan-Filling a Polygon
Animated by Max Peysakhov @Drexel University
39
Scan Filling Curved Objects
Hard in general case
Easier for circles and
ellipses.
Use midpoint Alg to
generate boundary points.
Fill in horizontal pixel spans
Use symmetry
1994 Foley/VanDam/Finer/Huges/Phillips ICG
40
Boundary-Fill Algorithm
Start with some
internal point (x,y)
Color it
Check neighbors for
filled or border color
Color neighbors if OK
Continue recursively
7
41
4 Connected Boundary-Fill Alg
Void BoundaryFill4( int x, int y, int fill,
int bnd)
{
If Color(x,y) != fill and Color(x,y) != bnd
{
SetColor(x,y) = fill;
BoundaryFill4(x+1, y, fill, bnd);
BoundaryFill4(x, y +1, fill, bnd);
BoundaryFill4(x-1, y, fill, bnd);
BoundaryFill4(x, y -1, fill, bnd);
}
} 42
Boundary-Fill Algorithm
Issues with recursive boundary-fill algorithm:
May make mistakes if parts of the space already filled
with the Fill color
Requires very big stack size
More efficient algorithms
First color contiguous span along one scan line
Only stack beginning positions of neighboring scan
lines
1994 Foley/VanDam/Finer/Huges/Phillips ICG
44
Course Status
So far everything straight lines!
How to model 2D curved objects?
Representation
Circles
Types of 2D Curves
Parametric Cubic Curves
Bzier Curves, (non)uniform, (non)rational
NURBS
Drawing of 2D Curves
Line drawing algorithms for complex curves
DeCasteljeau, Subdivision, De Boor
45
Homework #2
Modify homework #1
Add moveto and lineto commands
They define closed polygons
Clip polygons against window with
Sutherland-Hodgman algorithm
Display edges with HW1 line-drawing
code

You might also like