Transcript PowerPoint

CS 551 / 645:
Introductory Computer Graphics
Clipping Lines and Polygons
Know your role...




Brian talks about assignment 1
Clipping lines to viewports
Clipping lines to arbitrary polygons
Clipping polygons
Clipping Lines To Viewport

Discard segments of lines outside viewport
– Trivially accept lines with both endpoints inside all edges of
the viewport
– Trivially reject lines with both endpoints outside the same
edge of the viewport
– Otherwise, reduce to trivial cases by splitting into two
segments
Solving Simultaneous Equations

Equation of a line
– Slope-intercept: y = mx + b
– Implicit Equation: Ax + By + C = 0
– Parametric: Line defined by two points, P0 and P1



P(t) = P0 + (P1 - P0) t
x(t) = x0 + (x1 - x0) t
y(t) = x0 + (y1 - y0) t
Parametric Line Equation



Describes a finite line
Works with vertical lines (like the viewport)
0 <=t <= 1
– Defines line between P0 and P1

t<0
– Defines line before P0

t>1
– Defines line after P1
Parametric Lines and Clipping

Define each line in parametric form:
– P0(t)…Pn-1(t)

Define each edge of viewport in parametric form:
– PL(t), PR(t), PT(t), PB(t)

For each line, compute intersection with all
viewport edges
Computing Intersections

Line 0:
– x0 = x00 + (x01 - x00) t0
– y0 = y00 + (y01 - y00) t0

Edge L:
– xL = xL0 + (xL1 - xL0) tL
– yL = yL0 + (yL1 - yL0) tL


x00 + (x01 - x00) t0 = xL0 + (xL1 - xL0) tL
y00 + (y01 - y00) t0 = yL0 + (yL1 - yL0) tL
– Solve for t0 and tL
What’s wrong with this?
Cohen-Sutherland Line Clipping


Divide viewplane into regions defined by
viewport edges
Assign each region a 4-bit outcode:
1001
1000
1010
0001
0000
0010
0101
0100
0110
Cohen-Sutherland Line Clipping

Set bits with simple tests
x > xmax

y < ymin
etc.
Assign an outcode to each vertex of line
– If both outcodes = 0, trivial accept
– bitwise AND vertex outcodes together
– If result  0, trivial reject
Cohen-Sutherland Line Clipping


If line cannot be trivially accepted or rejected,
subdivide so that one or both segments can
be discarded
Pick an edge that the line crosses
D
C
B
A
E
Cohen-Sutherland Line Clipping

Intersect line with edge (how?)
D
C
B
A
E
Cohen-Sutherland Line Clipping

Discard portion on wrong side of edge and
assign outcode to new vertex
D
C
B
A

Apply trivial accept/reject tests and repeat if
necessary
Cohen-Sutherland Line Clipping



Outcode tests and line-edge intersects are
quite fast
But some lines require multiple iterations
(see F&vD figure 3.40)
Fundamentally more efficient algorithms:
– Cyrus-Beck uses parametric lines
– Liang-Barsky optimizes this for upright volumes
– F&vD for more details
Cyrus-Beck Algorithm

Use parametric equations of lines
Optimize
We saw that this could be expensive…

Start with parametric equation of line:


– P(t) = P0 + (P1 - P0) t

And a point and normal for each edge
– PL, NL
Cyrus-Beck Algorithm

NL [P(t) - PL] = 0
PL
P(t)
Inside
P0


NL
Substitute line equation for P(t)
Solve for t
– t = NL [P0 - PL] / -NL [P1 - P0]
P1
Cyrus-Beck Algorithm



Compute t for line intersection with all four edges
Discard all (t < 0) and (t > 1)
Classify each remaining intersection as
– Potentially Entering (PE)
– Potentially Leaving (PL)


NL [P1 - P0] > 0 implies PL
NL [P1 - P0] < 0 implies PE
– Note that we computed this term in when computing t
Cyrus-Beck Algorithm



Compute PE with largest t
Compute PL with smallest t
Clip to these two points
PL
PL
PE
PE
P0
P1
Cyrus-Beck Algorithm

Because of horizontal and vertical clip lines:
– Many computations reduce



Normals: (-1, 0), (1, 0), (0, -1), (0, 1)
Pick constant points on edges
solution for t:
–
–
–
–
-(x0 - xleft) / (x1 - x0)
(x0 - xright) / -(x1 - x0)
-(y0 - ybottom) / (y1 - y0)
(y0 - ytop) / -(y1 - y0)
Comparison

Cohen-Sutherland
– Repeated clipping is expensive
– Best used when trivial acceptance and rejection is
possible for most lines

Cyrus-Beck
–
–
–
–


Computation of t-intersections is cheap
Computation of (x,y) clip points is only done once
Algorithm doesn’t consider trivial accepts/rejects
Best when many lines must be clipped
Liang-Barsky: Optimized Cyrus-Beck
Nicholl et al.: Fastest, but doesn’t do 3D
Clipping Polygons

Clipping polygons is more complex than
clipping the individual lines
– Input: polygon
– Output: polygon, or nothing

When can we trivially accept/reject a polygon
as opposed to the line segments that make
up the polygon?
Why Is Clipping Hard?


What happens to a triangle during clipping?
Possible outcomes:
triangletriangle

trianglequad
triangle5-gon
How many sides can a clipped triangle have?
Why Is Clipping Hard?

A really tough case:
Why Is Clipping Hard?

A really tough case:
concave polygonmultiple polygons
Sutherland-Hodgman Clipping

Basic idea:
– Consider each edge of the viewport individually
– Clip the polygon against the edge equation
Sutherland-Hodgman Clipping

Basic idea:
– Consider each edge of the viewport individually
– Clip the polygon against the edge equation
– After doing all planes, the polygon is fully clipped
Sutherland-Hodgman Clipping

Basic idea:
– Consider each edge of the viewport individually
– Clip the polygon against the edge equation
– After doing all planes, the polygon is fully clipped
Sutherland-Hodgman Clipping

Basic idea:
– Consider each edge of the viewport individually
– Clip the polygon against the edge equation
– After doing all planes, the polygon is fully clipped
Sutherland-Hodgman Clipping

Basic idea:
– Consider each edge of the viewport individually
– Clip the polygon against the edge equation
– After doing all planes, the polygon is fully clipped
Sutherland-Hodgman Clipping

Basic idea:
– Consider each edge of the viewport individually
– Clip the polygon against the edge equation
– After doing all planes, the polygon is fully clipped
Sutherland-Hodgman Clipping

Basic idea:
– Consider each edge of the viewport individually
– Clip the polygon against the edge equation
– After doing all planes, the polygon is fully clipped
Sutherland-Hodgman Clipping

Basic idea:
– Consider each edge of the viewport individually
– Clip the polygon against the edge equation
– After doing all planes, the polygon is fully clipped
Sutherland-Hodgman Clipping

Basic idea:
– Consider each edge of the viewport individually
– Clip the polygon against the edge equation
– After doing all planes, the polygon is fully clipped
Sutherland-Hodgman Clipping:
The Algorithm

Basic idea:
– Consider each edge of the viewport individually
– Clip the polygon against the edge equation
– After doing all planes, the polygon is fully clipped


Will this work for non-rectangular clip regions?
What would 3-D
clipping involve?
Sutherland-Hodgman Clipping

Input/output for algorithm:
– Input: list of polygon vertices in order
– Output: list of clipped poygon vertices consisting of
old vertices (maybe) and new vertices (maybe)

Note: this is exactly what we expect from the
clipping operation against each edge
Sutherland-Hodgman Clipping

Sutherland-Hodgman basic routine:
– Go around polygon one vertex at a time
– Current vertex has position p
– Previous vertex had position s, and it has been
added to the output if appropriate
Sutherland-Hodgman Clipping

Edge from s to p takes one of four cases:
(Purple line can be a line or a plane)
inside
outside
inside
outside
inside
outside
p
s
p
p output
s
i output
p
inside
p
s
no output
i output
p output
outside
s
Sutherland-Hodgman Clipping

Four cases:
– s inside plane and p inside plane


Add p to output
Note: s has already been added
– s inside plane and p outside plane


Find intersection point i
Add i to output
– s outside plane and p outside plane

Add nothing
– s outside plane and p inside plane


Find intersection point i
Add i to output, followed by p
Point-to-Plane test

A very general test to determine if a point p is
“inside” a plane P, defined by q and n:
(p - q) • n < 0:
(p - q) • n = 0:
(p - q) • n > 0:
q
p inside P
p on P
p outside P
q
q
n
p
n
n
p
p
P
P
P
Point-to-Plane Test

Dot product is relatively expensive
– 3 multiplies
– 5 additions
– 1 comparison (to 0, in this case)

Think about how you might optimize or
special-case this
Finding Line-Plane Intersections

Use parametric definition of edge:
L(t) = L0 + (L1 - L0)t
– If t = 0 then L(t) = L0
– If t = 1 then L(t) = L1
– Otherwise, L(t) is part way from L0 to L1
Finding Line-Plane Intersections

Edge intersects plane P where E(t) is on P
– q is a point on P
– n is normal to P
(L(t) - q) • n = 0
t = [(q - L0) • n] / [(L1 - L0) • n]
– The intersection point i = L(t) for this value of t
Line-Plane Intersections


Note that the length of n doesn’t affect result:
Again, lots of opportunity for optimization