Clipping Concepts, Algorithms for line clipping CS123 | INTRODUCTION TO COMPUTER GRAPHICS

advertisement
CS123 | INTRODUCTION TO COMPUTER GRAPHICS
Clipping
Concepts, Algorithms for line
clipping
Andries van Dam©
Clipping - 10/15/15
1 of 16
CS123 | INTRODUCTION TO COMPUTER GRAPHICS
Line Clipping in 2D

Clipping endpoints


Endpoint analysis for lines:




If and , the point is inside the clip rectangle.
if both endpoints in , do “trivial acceptance”
if one endpoint inside, one outside, must clip
if both endpoints out, don’t know
Brute force clip: solve simultaneous
equations using for line and four clip edges


slope-intercept formula handles infinite lines
only
doesn’t handle vertical lines
Andries van Dam©
Clipping - 10/15/15
2 of 16
CS123 | INTRODUCTION TO COMPUTER GRAPHICS
Parametric Line Formulation For Clipping

Parametric form for line segment

Line is in clip rectangle if parametric variables
tline and sedge both in [0,1] at intersection point
between line and edge of clip rectangle

Slow, must intersect lines with all edges
Andries van Dam©
Clipping - 10/15/15
3 of 16
CS123 | INTRODUCTION TO COMPUTER GRAPHICS
Cohen-Sutherland Line Clipping in 2D
Clip Rectangle

Andries van Dam©
Clipping - 10/15/15
4 of 16
CS123 | INTRODUCTION TO COMPUTER GRAPHICS
Cohen-Sutherland Line Clipping in 3D



Very similar to 2D
Divide volume into 27 regions
6-bit outcode records results of 6 bounds
tests








First bit: behind back plane: Z - Zmin
Second bit: in front of front plane: Zmax -Z
Third bit: above top plane: Ymax - Y
Fourth bit: below bottom plane: Y - Ymin
Fifth bit: to the right of right plane: Xmax -X
Sixth bit: to the left of left plane: X - Xmin
Again, lines with OC0 = 0 and OC1 = 0 can
be trivially accepted
Lines lying entirely in a volume outside of
a plane can be trivially rejected: OC0 AND
OC1  0 (i.e., they share an “outside” bit)
Andries van Dam©
Clipping - 10/15/15
Back plane
Front plane
000000 (in front)
010000 (in front)
100000 (behind)
000000 (behind)
Top plane
Bottom plane
001000 (above)
000000 (above)
000000 (below)
000100 (below)
Right plane
Left plane
000000 (to left of)
000001 (to left of)
000010 (to right of)
000000 (to right of)
5 of 16
CS123 | INTRODUCTION TO COMPUTER GRAPHICS
Cohen-Sutherland Algorithm (1/3)


If we can neither trivially accept/reject (T/A, T/R),
D
divide and conquer
Subdivide line into two segments; then T/A or T/R one
or both segments:



G
I
H
F
E
pick an order for checking edges: top – bottom – right – left
compute the intersection point



for a given clip edge, if a line’s two outcodes differ in the
corresponding bit, the line has one vertex on each side of the edge,
thus crosses
B
A
use a clip edge to cut line
use outcodes to choose the edges that are crossed


C
Clip
rectangle
the clip edge fixes either x or y
can substitute into the line equation
iterate for the newly shortened line, “extra” clips may
happen (e.g., E-I at H)
Andries van Dam©
Clipping - 10/15/15
6 of 16
CS123 | INTRODUCTION TO COMPUTER GRAPHICS
Cohen-Sutherland Algorithm (2/3)

ComputeOutCode(x0, y0, outcode0);
ComputeOutCode(x1, y1, outcode1);
repeat
check for trivial reject or trivial accept
pick the point that is outside the clip rectangle
if TOP then
x = x0 + (x1 – x0) * (ymax – y0) / (y1 – y0);
y = ymax;
else if BOTTOM then
x = x0 + (x1 – x0) * (ymin – y0) / (y1 – y0);
y = ymin;
Andries van Dam©
Clipping - 10/15/15
else if RIGHT then
y = y0 + (y1 – y0) * (xmax – x0) / (x1 – x0);
x = xmax;
else if LEFT then
y = y0 + (y1 – y0) * (xmin – x0) / (x1 – x0);
x = xmin;
if (x0, y0 is the outer point) then
x0 = x; y0 = y; ComputeOutCode(x0, y0, outcode0)
else
x1 = x; y1 = y; ComputeOutCode(x1, y1, outcode1)
until done
7 of 16
CS123 | INTRODUCTION TO COMPUTER GRAPHICS
Cohen-Sutherland Algorithm (3/3)

Similar algorithm for using 3D outcodes to clip against canonical parallel view volume:
xmin = ymin = -1; xmax = ymax = 1;
zmin = -1; zmax = 0;
ComputeOutCode(x0, y0, z0, outcode0);
ComputeOutCode(x1, y1, z1, outcode1);
repeat
check for trivial reject or trivial accept
pick the point that is outside the clip rectangle
if TOP then
x = x0 + (x1 – x0) * (ymax – y0) / (y1 – y0);
z = z0 + (z1 – z0) * (ymax – y0) / (y1 – y0);
y = ymax;
else if BOTTOM then
x = x0 + (x1 – x0) * (ymin – y0) / (y1 – y0);
z = z0 + (z1 – z0) * (ymin – y0) / (y1 – y0);
y = ymin;
else if RIGHT then
y = y0 + (y1 – y0) * (xmax – x0) / (x1 – x0);
z = z0 + (z1 – z0) * (xmax – x0) / (x1 – x0);
x = xmax;
Andries van Dam©
Clipping - 10/15/15
else if LEFT then
y = y0 + (y1 – y0) * (xmin – x0) / (x1 – x0);
z = z0 + (z1 – z0) * (xmin – x0) / (x1 – x0);
x = xmin;
else if NEAR then
x = x0 + (x1 – x0) * (zmax – z0) / (z1 – z0);
y = y0 + (y1 – y0) * (zmax – z0) / (z1 – z0);
z = zmax;
else if FAR then
x = x0 + (x1 – x0) * (zmin – z0) / (z1 – z0);
y = y0 + (y1 – y0) * (zmin – z0) / (z1 – z0);
z = zmin;
if (x0, y0, z0 is the outer point) then
x0 = x; y0 = y; z0 = z;
ComputeOutCode(x0, y0, z0, outcode0)
else
x1 = x; y1 = y; z1 = z;
ComputeOutCode(x1, y1, z1, outcode1)
until done
8 of 16
CS123 | INTRODUCTION TO COMPUTER GRAPHICS
Scan Conversion after Clipping
Clip rectangle

x = xmin
y = ymin
y = ymin – 1/2
y = ymin – 1
Andries van Dam©
Clipping - 10/15/15
B
A
9 of 16
CS123 | INTRODUCTION TO COMPUTER GRAPHICS
Sutherland-Hodgman Polygon Clipping

The 2D Sutherland-Hodgman algorithm generalizes to higher dimensions

We can use it to clip polygons to the 3D view volume one plane at a time

Section 36.5 in textbook
Andries van Dam©
Clipping - 10/15/15
10 of 16
CS123 | INTRODUCTION TO COMPUTER GRAPHICS
Cyrus-Beck/Liang-Barsky Parametric Line Clipping (1/3)

Andries van Dam©
Clipping - 10/15/15
11 of 16
CS123 | INTRODUCTION TO COMPUTER GRAPHICS
Cyrus-Beck/Liang-Barsky Parametric Line Clipping (2/3)

Now solve for the value of t at the intersection of P0
P1 with the edge Ei:

First, substitute for P(t) with P0+ (P1 – P0)t:

Next, group terms and distribute dot product:

Let D be the vector from P0 to P1 = (P1 – P0), and
solve for t:


For this to be true, it must be the case that:




note that this gives a valid value of t only if the
denominator of the expression is nonzero.
Ni  0 (that is, the normal should not be 0; this could
occur only as a mistake)
D  0 (that is, P1  P0)
Ni • D  0 (edge Ei and line D are not parallel; if they
are, no intersection).
The algorithm checks these conditions.
Andries van Dam©
Clipping - 10/15/15
12 of 16
CS123 | INTRODUCTION TO COMPUTER GRAPHICS
Cyrus-Beck/Liang-Barsky Parametric Line Clipping (3/3)

Andries van Dam©
Clipping - 10/15/15
13 of 16
CS123 | INTRODUCTION TO COMPUTER GRAPHICS
Cyrus-Beck/Liang-Barsky Line Clipping Algorithm
Pre-calculate Ni and select PEi for each edge;
for each line segment to be clipped
if P1 = P0 then line is degenerate so clip as a point;
else
begin
tE = 0; tL = 1;
for each candidate intersection with a clip edge
if Ni • D  0 then {Ignore edges parallel to line}
begin
calculate t; {of line and clip edge intersection}
use sign of Ni • D to categorize as PE or PL;
if PE then tE = max(tE,t);
if PL then tL = min(tL,t);
end
if tE > tL then return nil
else return P(tE) and P(tL) as true clip intersections
end
Andries van Dam©
Clipping - 10/15/15
14 of 16
CS123 | INTRODUCTION TO COMPUTER GRAPHICS
Parametric Line Clipping for Upright Clip Rectangle (1/2)

D = P1 – P0 = (x1 – x0, y1 – y0)

Leave PEi as an arbitrary point on clip edge: it’s a free variable and drops out
Calculations for Parametric Line Clipping Algorithm
Clip Edgei
Normal Ni
PEi
P0-PEi
left: x = xmin
(-1,0)
(xmin, y)
(x0- xmin,y0-y)
 (x  x
)
0
min
(x  x )
1
0
right: x = xmax
(1,0)
(xmax,y)
(x0- xmax,y0-y)
 (x  x
)
0
max
(x  x )
1
0
bottom: y = ymin
(0,-1)
(x, ymin)
(x0-x,y0- ymin)
(y  y
)
0
min
(y  y )
1
0
top: y = ymax
(0,1)
(x, ymax)
(x0-x,y0- ymax)
(y  y
)
0
max
(y  y )
1
0
Andries van Dam©
Clipping - 10/15/15
t
N  (P  P )
i
0
Ei
N D
i
15 of 16
CS123 | INTRODUCTION TO COMPUTER GRAPHICS
Parametric Line Clipping for Upright Clip Rectangle (2/2)

Examine t:

Numerator is just the directed distance to an edge; sign corresponds
to OC

Denominator is just the horizontal or vertical projection of the line,
dx or dy; sign determines PE or PL for a given edge

Ratio is constant of proportionality: “how far over” from P0 to P1
intersection is relative to dx or dy
Andries van Dam©
Clipping - 10/15/15
16 of 16
Download