Last Time Finished viewing Now you know how
- Slides: 37
Last Time • Finished viewing: Now you know how to: – Define a region of space that you wish to view – the view volume – Transform it into a generic view volume – canonical view volume • Using orthographic or perspective projection • Very brief intro to clipping 02/28/02 (c) 2002 University of Wisconsin, CS 559
Today • Clipping in all its detail 02/28/02 (c) 2002 University of Wisconsin, CS 559
Sutherland-Hodgman Clip • Clip the polygon against each edge of the clip region in turn – Clip polygon each time to line containing edge – Only works for convex clip regions (Why? ) 02/28/02 (c) 2002 University of Wisconsin, CS 559
Sutherland-Hodgman Clip • To clip a polygon to a line/plane: – Consider the polygon as a list of vertices – One side of the line/plane is considered inside the clip region, the other side is outside – We are going to rewrite the polygon one vertex at a time – the rewritten polygon will be the polygon clipped to the line/plane – Check start vertex: if “inside”, emit it, otherwise ignore it – Continue processing vertices as follows… 02/28/02 (c) 2002 University of Wisconsin, CS 559
Sutherland-Hodgman (3) • Look at the next vertex in the list, and the edge from the last vertex to the next. If the – polygon edge crosses the clip line/plane going from out to in: emit crossing point, next vertex – polygon edge crosses clip line/plane going from in to out: emit crossing – polygon edge goes from out to out: emit nothing – polygon edge goes from in to in: emit next vertex 02/28/02 (c) 2002 University of Wisconsin, CS 559
Sutherland-Hodgman (4) Inside Outside s p p s Output p 02/28/02 i p Output i Inside p Outside i s s No output (c) 2002 University of Wisconsin, CS 559 Output i and p
Inside-Outside Testing • Lines/planes store a vector pointing toward the outside of the clip region – the outward pointing normal – Could re-define for inward pointing Outside • Dot products give inside/outside information • Note that x is any point on the clip line/plane f n i s 02/28/02 x (c) 2002 University of Wisconsin, CS 559 Inside
Finding Intersection Pts • Use the parametric form for the edge between two points, x 1 and x 2: • For planes of the form x=a: • Similar forms for y=a, z=a • Solution for general plane can also be found 02/28/02 (c) 2002 University of Wisconsin, CS 559
Inside/Outside in Screen Space • In canonical screen space, clip planes are xs=± 1, ys=± 1, zs=± 1 • Inside/Outside reduces to comparisons before perspective divide 02/28/02 (c) 2002 University of Wisconsin, CS 559
Hardware Sutherland-Hodgman • Suitable for hardware implementation – Only need the clip edge, the endpoints of the current edge, and the last output point – Polygon edges are output as they are found, and passed right on to the next clip region edge Vertices in Clipped vertices out 02/28/02 Clip Top Clip Far Clip Right Clip Near (c) 2002 University of Wisconsin, CS 559 Clip Bottom Clip Left
Other Ways to Reject • If a polygonal object is closed, then no back-facing face is visible – Front-facing faces must occlude all back-facing ones – Reject back-facing polygons in view space • Transform face normal and check – Open. GL supports optional back-face culling (and front-face culling too) • Bounding volumes enclosing many polygons can be checked against the view volume – Done in software in world or view space • Visibility can reject whole chunks of geometry without even looking at them 02/28/02 (c) 2002 University of Wisconsin, CS 559
Clipping In General • Apart from clipping to the view volume, clipping is a basic operation in many other algorithms – Breaking space up into chunks – 2 D drawing and windowing – Modeling • May require more complex geometry than rectangular boxes 02/28/02 (c) 2002 University of Wisconsin, CS 559
Additional Clipping Planes • Useful for doing things like cut-away views – Use a clip plane to cut off part of the object – Only works if piece to be left behind is convex • Open. GL allows you to do it • Also one way to use Open. GL to identify objects in a region of space (uses the selection mechanism) 02/28/02 (c) 2002 University of Wisconsin, CS 559
Clipping Lines • Lines can also be clipped by Sutherland-Hodgman – Slower than necessary, unless you already have hardware • Better algorithms exist – Cohen-Sutherland – Liang-Barsky – Nicholl-Lee-Nicholl (we won’t cover this one – only good for 2 D) 02/28/02 (c) 2002 University of Wisconsin, CS 559
Cohen-Sutherland (1) • Works basically the same as Sutherland-Hodgman – Was developed earlier • Clip line against each edge of clip region in turn – If both endpoints outside, discard line and stop – If both endpoints in, continue to next edge (or finish) – If one in, one out, chop line at crossing pt and continue • Works in both 2 D and 3 D for convex clipping regions 02/28/02 (c) 2002 University of Wisconsin, CS 559
Cohen-Sutherland (2) 1 2 3 3 4 4 1 02/28/02 2 1 2 (c) 2002 University of Wisconsin, CS 559
Cohen-Sutherland (3) • Some cases lead to premature acceptance or rejection – If both endpoints are inside all edges – If both endpoints are outside one edge • General rule of clipping – if a fast test can cover many cases, do it first 02/28/02 (c) 2002 University of Wisconsin, CS 559
Cohen-Sutherland - Details • Only need to clip line against edges where one endpoint is out • Use outcode to record endpoint in/out wrt each edge. One bit per edge, 1 if out, 0 if in. 1 2 0010 • Trivial reject: – outcode(x 1)&outcode(x 2)!=0 • Trivial accept: 3 – outcode(x 1)|outcode(x 2)==0 • Which edges to clip against? 4 – outcode(x 1)^outcode(x 2) 0101 02/28/02 (c) 2002 University of Wisconsin, CS 559
Liang-Barsky Clipping • Parametric clipping - view line in parametric form and reason about the parameter values • More efficient, as not computing the coordinate values at irrelevant vertices • Works for rectilinear clip regions in 2 D or 3 D • Clipping conditions on parameter: Line is inside clip region for values of t such that (for 2 D): 02/28/02 (c) 2002 University of Wisconsin, CS 559
Liang-Barsky (2) • Infinite line intersects clip region edges when: where Note: Left edge is 1, right edge is 2, top edge is 3, bottom is 4 02/28/02 (c) 2002 University of Wisconsin, CS 559
Liang-Barsky (3) • When pk<0, as t increases line goes from outside to inside entering • When pk>0, line goes from inside to outside – leaving • When pk=0, line is parallel to an edge (clipping is easy) • If there is a segment of the line inside the clip region, sequence of infinite line intersections must go: enter, leave, leave 02/28/02 (c) 2002 University of Wisconsin, CS 559
Liang-Barsky (4) Enter Leave Enter 02/28/02 Enter (c) 2002 University of Wisconsin, CS 559 Leave
Liang-Barsky - Algorithm • • • Compute entering t values, which are qk/pk for each pk<0 Compute leaving t values, which are qk/pk for each pk>0 Parameter value for small t end of line is: tsmall= max(0, entering t’s) parameter value for large t end of line is: tlarge=min(1, leaving t’s) if tsmall<tlarge, there is a line segment - compute endpoints by substituting t values • Improvement (and actual Liang-Barsky): – compute t’s for each edge in turn (some rejects occur earlier like this) 02/28/02 (c) 2002 University of Wisconsin, CS 559
Weiler Atherton Polygon Clipping • Faster than Sutherland-Hodgman for complex polygons • For clockwise polygon: – for out-to-in pair, follow usual rule – for in-to-out pair, follow clip edge • Easiest to start outside 02/28/02 (c) 2002 University of Wisconsin, CS 559
General Clipping • Clipping general against general polygons is quite hard • Outline of Weiler algorithm: – – Replace crossing points with vertices Double all edges and form linked lists of edges Change links at vertices Enumerate polygon patches • Can use clipping to break concave polygon into convex pieces; main issue is inside-outside for edges 02/28/02 (c) 2002 University of Wisconsin, CS 559
Weiler Algorithm (1) 02/28/02 (c) 2002 University of Wisconsin, CS 559
Rearranging pointers makes it possible to enumerate all components of the intersection Changes to 02/28/02 (c) 2002 University of Wisconsin, CS 559
Where We Stand • At this point we know how to: – Convert points from local to screen coordinates – Clip polygons and lines to the view volume • Next thing: – Determine which pixels are covered by any given point, line or polygon 02/28/02 (c) 2002 University of Wisconsin, CS 559
Drawing Points • When points are mapped into window coordinates, they could land anywhere – not just at a pixel center • Solution is the simple, obvious one – Map to window space – Fill the closest pixel – Can also specify a radius – fill a square of that size, or fill a circle • Square is faster 02/28/02 (c) 2002 University of Wisconsin, CS 559
Drawing Lines • Task: Decide which pixels to fill (samples to use) to represent a line • We know that all of the line lies inside the visible region (clipping gave us this!) • Issues: – If slope between -1 and 1, one pixel per column. Otherwise, one pixel per row – Constant brightness? Lines of the same length should light the same number of pixels (we normally ignore this) – Anti-aliasing? (Getting rid of the “jaggies”) 02/28/02 (c) 2002 University of Wisconsin, CS 559
Line Drawing Algorithms • Consider lines of the form y=m x + c, where m= y/ x, 0<m<1, integer coordinates – All others follow by symmetry • Variety of slow algorithms (Why slow? ): – step x, compute new y at each step by equation, rounding: – step x, compute new y at each step by adding m to old y, rounding: 02/28/02 (c) 2002 University of Wisconsin, CS 559
Bresenham’s Algorithm Overview • Plot the pixel whose y-value is closest to the line • Given (xi, yi), must choose from either (xi+1, yi+1) or (xi+1, yi) • Idea: compute a decision variable – Value that will determine which pixel to draw – Easy to update from one pixel to the next 02/28/02 (c) 2002 University of Wisconsin, CS 559
Decision Variable • Decision variable is: yi+1 d 2 d 1 yi xi 02/28/02 xi+1 (c) 2002 University of Wisconsin, CS 559
What Can We Decide? • • d 1<d 2 => pi negative => next point at (xi+1, yi) d 1>d 2 => pi positive => next point at (xi+1, yi+1) So, we know what to draw based on the decision variable How do we update it? What is pk+1? 02/28/02 (c) 2002 University of Wisconsin, CS 559
Updating The Decision Variable • • If yi+1=yi+1: • If yi+1=yi: • What is p 1 (assuming integer endpoints)? 02/28/02 (c) 2002 University of Wisconsin, CS 559
Bresenham’s Algorithm • For integers, slope between 0 and 1: – x=x 1, y=y 1, p=2 dy - dx, draw (x, y) – until x=x 2 • x=x+1 • p>0 ? y=y+1, draw (x, y), p=p+2 y - 2 x • p<0? y=y, draw (x, y), p=p+2 y • Compute the constants once at the start – Only does add and comparisons • Floating point has slightly more difficult initialization 02/28/02 (c) 2002 University of Wisconsin, CS 559
Example: (2, 2) to (7, 6) x=5, y=4 i x 1 2 2 3 3 4 4 5 5 6 6 7 7 6 5 4 3 2 1 1 2 02/28/02 3 4 5 6 7 8 (c) 2002 University of Wisconsin, CS 559 y 2 3 4 4 5 6 p 3 1 -1 7 5 3
- . . . . . they do their homework last night?
- Hooray cheered gilda. does that mean we can stay
- Now i see it now you don't
- Did you do last night
- Thank you for viewing my presentation
- You have finished
- You have finished
- Maggie hi tom have you finished your homework
- Congrats you finished
- My dear do you know how a long time ago
- Know history know self
- Do deep generative models know what they don’t know?
- The one who reigns forever he is a friend of mine
- The second coming 27
- You are
- Happy and know it snapchat
- Personification in the raven
- When you're blue and you don't know
- Asexual symptoms
- Do you know who you are
- I will follow you wherever you dash
- Your dreams stay big and your worries stay small
- For you doing
- Claims example
- Section view examples
- Is film a text
- Ls&s low vision
- Slit diffraction
- Steps in viewing
- Soal dan jawaban grafika komputer
- Viewing transformation pipeline
- Viewing coordinate sering juga disebut
- Even though the banana seemed to change color
- Constant intensity shading
- Define projection in computer graphics
- Computer graphics introduction ppt
- What is window and viewport in computer graphics
- Exterior clipping