280 likes | 443 Views
Clipping Lines. Lecture 7 Wed, Sep 10, 2003. The Graphics Pipeline. From time to time we will discuss the graphics pipeline . The graphics pipeline is the sequence of operations that are performed on primitives to render them on the screen as collections of colored pixels.
E N D
Clipping Lines Lecture 7 Wed, Sep 10, 2003
The Graphics Pipeline • From time to time we will discuss the graphics pipeline. • The graphics pipeline is the sequence of operations that are performed on primitives to render them on the screen as collections of colored pixels. • We have discussed the framebuffer. • Now we will discuss 2-dimensional clipping of lines.
Clipping • Any object that is not entirely within the viewport must be clipped. • That is, the part that is outside the viewport must be eliminated before the object is drawn. • The graphics pipeline, does this “automatically.” • Why is it necessary to clip?
Clipping Lines • If a line is partially in the viewport, then we need to recalculate its endpoints. • In general, there are four possible cases. • The line is entirely within the viewport. • The line is entirely outside the viewport. • One endpoint is in and the other is out. • Both endpoints are out, but the middle part is in.
C B D E A G F H Clipping Lines • Before clipping
C B D E A F' G F G' H' H Clipping Lines • After clipping
ymax ymin xmax xmin The Cohen-Sutherland Clipping Algorithm • Let the x-coordinates of the window boundaries be xmin and xmax and let the y-coordinates be ymin and ymax.
The Cohen-Sutherland Clipping Algorithm • For each endpoint p of a line segment we will define a codeword c3c2c1c0 consisting of 4 true/false values. • c3 = true, if p is left of the window. • c2 = true, if p is above the window. • c1 = true, if p is right of the window. • c0 = true, if p is below the window. • How many different values are possible for a codeword?
The Cohen-Sutherland Clipping Algorithm • How many different combinations of values are possible for the codewords of the two endpoints of a segment? • How do we compute a codeword?
The Cohen-Sutherland Clipping Algorithm • Consider the vertical edge x = xmin. (You can do the other edges.) • Compare the x-coordinate of p to xmin. • If it is less, then “set” bit 3 of the codeword. if (p.x < xmin) c = 1 << 3;
The Cohen-Sutherland Clipping Algorithm • After the codewords for both endpoints are computed, we divide the possibilities into three cases: • Trivial accept – both codewords are FFFF. • Trivial reject – both codewords have T in the same position. • Indeterminate so far – Investigate further.
The Cohen-Sutherland Clipping Algorithm • What is the quickest way to separate the cases? • Use bitwise “and” and “or.” • If ((codeword1 | codeword2) == 0) then we trivially accept. • Why? • If ((codeword1 & codeword2) != 0) then we trivially reject. • Why?
The Cohen-Sutherland Clipping Algorithm • What about the third case? • We clip against each edge of the window, in sequence, as necessary. • After clipping against an edge, we may test again for trivial acceptance or trivial rejection before moving on to the next edge.
clip The Cohen-Sutherland Clipping Algorithm
clip The Cohen-Sutherland Clipping Algorithm
clip The Cohen-Sutherland Clipping Algorithm
clip The Cohen-Sutherland Clipping Algorithm
The Cohen-Sutherland Clipping Algorithm • This raises some questions? • What is the worst case? • What is the best case? • How do we decide whether to clip against a particular edge? • If we do clip, how to we determine the new endpoint?
The Cohen-Sutherland Clipping Algorithm • Consider again the vertical edge x = xmin. (You can do the other edges.) • Compute codeword1 ^ codeword2. • This shows where they disagree. • Why? • “And” this with (1 << 3). • If result = 1, then clip. • Else do not clip.
The Cohen-Sutherland Clipping Algorithm • If we clip, then the new point will be on the line x = xmin. • So its x-coordinate will be xmin. • We must calculate its y-coordinate.
x = xmin q r p The Cohen-Sutherland Clipping Algorithm
x = xmin q r p The Cohen-Sutherland Clipping Algorithm
x = xmin q q.y – p.y r r.y – p.y p xmin – p.x q.x – p.x The Cohen-Sutherland Clipping Algorithm
The Cohen-Sutherland Clipping Algorithm • Then (r.y – p.y)/(xmin – p.x) = (q.y – p.y)/(q.x – p.x) • So r.y = p.y + (xmin – p.x)(q.y – p.y)/(q.x – p.x)
The Cohen-Sutherland Clipping Algorithm • This used to be done in software. • Now it is done in hardware, in the graphics pipeline. • Should it be done before or after the line is rasterized? • We will discuss clipping polygons and clipping in 3D later.
Example: Clip a Line • LineClipper.cpp