CSCE 441 Computer Graphics: Clipping Polygons Jinxiang Chai
Review: Clipping Points Given a point (x, y) and clipping window (xmin, ymin), (xmax, ymax), determine if the point should be drawn (xmax,ymax) (x,y) xmin=<x<=xmax? (xmin,ymin) ymin=<y<=ymax?
Review: Clipping Lines
Review: Clipping Lines
Review Clipping Simple line clipping algorithm - compute intersection points - clip the line segment between the outside point and intersection point Cohen-Sutherland - region coding (9 regions, 4bits) - best used when trivial acceptance and rejection is possible for most lines Liang-Barsky - computation of t-intersections is cheap (only one division) - computation of (x,y) clip points is only done once - algorithm doesn’t consider trivial accepts/rejects - best when many lines must be clipped
Clipping Polygons Clipping polygons is more complex than clipping the individual lines - Input: polygon
Clipping Polygons Clipping polygons is more complex than clipping the individual lines - Input: polygon - Output: original polygon, new polygon, or nothing
Why Is Polygon Clipping Hard? What happens to a triangle during clipping? - possible outcomes: triangle->triangle triangle->quad triangle->5-gon
Why Is Polygon Clipping Hard? What happens to a triangle during clipping? - possible outcomes: triangle->triangle triangle->quad triangle->5-gon How many sides a clipped triangle might have? 9 9
How Many Sides? Seven
Why Is Clipping Hard? A really tough case Concave polygon -> Multiple polygons
Why Is Clipping Hard? A really tough case
Outline Sutherland-Hodgman Clipping - convex polygons Weiler-Atherton Algorithm - general polygons Required readings - HB 8-8
Any idea? Clipping polygon edges? 14 14
Any idea? Clipping polygon edges?
Any idea? Clipping polygon edges? 16 16
Any idea? Clipping polygon edges? 17 17
Any idea? Clipping polygon edges? Unconnected set of lines!
Any idea? Clipping polygon edges? Wrong even with connected line segments! 19 19
Sutherland-Hodgman Clipping Basic idea: similar to line clipping
Sutherland-Hodgman Clipping Basic idea: similar to line clipping - consider each edge of the view window individually - clip the polygon against the view window edge’s equation 21 21
Sutherland-Hodgman Clipping Basic idea: - consider each edge of the view window individually - clip the polygon against the view window edge’s equation
Sutherland-Hodgman Clipping Basic idea: - consider each edge of the view window individually - clip the polygon against the view window edge’s equation
Sutherland-Hodgman Clipping Basic idea: - consider each edge of the view window individually - clip the polygon against the view window edge’s equation
Sutherland-Hodgman Clipping Basic idea: - consider each edge of the view window individually - clip the polygon against the view window edge’s equation
Sutherland-Hodgman Clipping Basic idea: - consider each edge of the view window individually - clip the polygon against the view window edge’s equation
Sutherland-Hodgman Clipping Basic idea: - consider each edge of the view window individually - clip the polygon against the view window edge’s equation
Sutherland-Hodgman Clipping Basic idea: - consider each edge of the view window individually - clip the polygon against the view window edge’s equation
Sutherland-Hodgman Clipping Basic idea: - consider each edge of the view window individually - clip the polygon against the view window edge’s equation
Sutherland-Hodgman Clipping Basic idea: - consider each edge of the view window individually - clip the polygon against the view window edge’s equation - after doing all edges, the polygon is fully clipped
Sutherland-Hodgman Clipping Input/output for algorithm: - input: list of polygon vertices in order {abcdef} a f b e d c
Sutherland-Hodgman Clipping Input/output for algorithm: - input: list of polygon vertices in order - output: list of clipped polygon vertices consisting of old vertices (maybe) and new vertices (maybe)
Sutherland-Hodgman Clipping Input/output for algorithm: - input: list of polygon vertices in order - output: list of clipped polygon vertices consisting of old vertices (maybe) and new vertices (maybe) - exactly what expect from the clipping operation against each edge!
Sutherland-Hodgman Clipping How to clip the polygon against the window edge? - Go around polygon one vertex (i.e. polygon edge) at a time - Current vertex has position E - Previous vertex had position S, and it has been added to the output if appropriate a f b e d {abcdef} c
Sutherland-Hodgman Clipping How to clip the polygon against the window edge? - Go around polygon one vertex (i.e. polygon edge) at a time - Current vertex has position E - Previous vertex had position S, and it has been added to the output if appropriate a f b e d {abcdef} c
Sutherland-Hodgman Clipping How to clip the polygon against the window edge? - Go around polygon one vertex (i.e. polygon edge) at a time - Current vertex has position E - Previous vertex had position S, and it has been added to the output if appropriate a f b e d {abcdef} c Need to determine output vertices for each polygon line! 36 36
Sutherland-Hodgman Clipping Polygon edge from S to E takes one of four cases: inside outside inside outside inside outside inside outside E S E S E S E S
Sutherland-Hodgman Clipping Polygon edge from S to E takes one of four cases: inside outside inside outside inside outside inside outside E S E S E S E S ? output ? output ? output ? output 38 38
Sutherland-Hodgman Clipping Polygon edge from S to E takes one of four cases: inside outside inside outside inside outside inside outside E S E S E S E S I output E output E output I output no output 39 39
Sutherland-Hodgman Clipping Four cases: S inside plane and E inside plane Add E to output Note: S has already been added S inside plane and E outside plane Find intersection point I Add I to output S outside plane and E outside plane Add nothing S outside plane and E inside plane Add I to output, followed by E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E Input vertices after clipping against left edge after clipping against right edge after clipping against bottom edge after clipping all the window edges
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E b
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E Possible error for non-convex polygons
Sutherland-Hodgman Algorithm Out In No output Output E Output I Output I,E Possible error for non-convex polygons #1: split concave polygon into two or more convex polygons (see Section 4-7) #2: use more general polygon clipper. 85 85
Sutherland-Hodgman Algorithm How to deal with more general clipping boundaries (convex clip polygons) 86 86
Sutherland-Hodgman Algorithm How to deal with more general clipping boundaries (convex clip polygons) 87 87
Sutherland-Hodgman Algorithm Work for convex input polygons Work for convex clipping boundaries Easy to pipeline for parallel processing Polygon from one boundary does not have to be completed before next boundary starts Leads to substantial performance gains 88 88
Weiler-Atherton Algorithm + Work for general input polygons (concave & convex) + Handles a clipping window with any polygon shape (concave & convex) + Can be extended to 3D - Not as efficient as Sutherland-Hodgman - Not easy to parallelize
Weiler-Atherton Algorithm Key idea: tracing around the perimeter of the fill polygon searching for the borders that enclose a clipped fill region.
Weiler-Atherton Algorithm Advantage: multiple regions can be identified and displayed as separate, unconnected polygons. 91 91
Weiler-Atherton Algorithm Process the edges of the polygon fill area in a counterclockwise order until an inside-outside pair of vertices is encountered Follow the window boundaries in a counterclockwise direction from the exit-intersection point to another intersection point with the polygon - previously processed? - yes, go to the next step - no, continue processing polygon until a previously processed vertex is encountered Form the vertex list for this section of the clipped fill area Return to the exit-intersection point and continue processing the polygon edges in a counterclockwise order 92 92
Weiler-Atherton Algorithm
Weiler-Atherton Algorithm Process the edges of the polygon fill area in a counterclockwise order until an inside-outside pair of vertices is encountered Follow the window boundaries in a counterclockwise direction from the exit-intersection point to another intersection point with the polygon - previously processed? - yes, go to the next step - no, continue processing polygon until a previously processed vertex is encountered Form the vertex list for this section of the clipped fill area Return to the exit-intersection point and continue processing the polygon edges in a counterclockwise order
Weiler-Atherton Algorithm
Weiler-Atherton Algorithm Process the edges of the polygon fill area in a counterclockwise order until an inside-outside pair of vertices is encountered Follow the window boundaries in a counterclockwise direction from the exit-intersection point to another intersection point with the polygon - previously processed? - yes, go to the next step - no, continue processing polygon until a previously processed vertex is encountered Form the vertex list for this section of the clipped fill area Return to the exit-intersection point and continue processing the polygon edges in a counterclockwise order
Weiler-Atherton Algorithm
Weiler-Atherton Algorithm
Weiler-Atherton Algorithm Process the edges of the polygon fill area in a counterclockwise order until an inside-outside pair of vertices is encountered Follow the window boundaries in a counterclockwise direction from the exit-intersection point to another intersection point with the polygon - previously processed? - yes, go to the next step - no, continue processing polygon until a previously processed vertex is encountered Form the vertex list for this section of the clipped fill area Return to the exit-intersection point and continue processing the polygon edges in a counterclockwise order
Weiler-Atherton Algorithm
Weiler-Atherton Algorithm Process the edges of the polygon fill area in a counterclockwise order until an inside-outside pair of vertices is encountered Follow the window boundaries in a counterclockwise direction from the exit-intersection point to another intersection point with the polygon - previously processed? - yes, go to the next step - no, continue processing polygon until a previously processed vertex is encountered Form the vertex list for this section of the clipped fill area Return to the exit-intersection point and continue processing the polygon edges in a counterclockwise order
Weiler-Atherton Algorithm Process the edges of the polygon fill area in a counterclockwise order until an inside-outside pair of vertices is encountered Follow the window boundaries in a counterclockwise direction from the exit-intersection point to another intersection point with the polygon - previously processed? - yes, go to the next step - no, continue processing polygon until a previously processed vertex is encountered Form the vertex list for this section of the clipped fill area Return to the exit-intersection point and continue processing the polygon edges in a counterclockwise order
Weiler-Atherton Algorithm Process the edges of the polygon fill area in a counterclockwise order until an inside-outside pair of vertices is encountered Follow the window boundaries in a counterclockwise direction from the exit-intersection point to another intersection point with the polygon - previously processed? - yes, go to the next step - no, continue processing polygon until a previously processed vertex is encountered Form the vertex list for this section of the clipped fill area Return to the exit-intersection point and continue processing the polygon edges in a counterclockwise order
Weiler-Atherton Algorithm Process the edges of the polygon fill area in a counterclockwise order until an inside-outside pair of vertices is encountered Follow the window boundaries in a counterclockwise direction from the exit-intersection point to another intersection point with the polygon - previously processed? - yes, go to the next step - no, continue processing polygon until a previously processed vertex is encountered Form the vertex list for this section of the clipped fill area Return to the exit-intersection point and continue processing the polygon edges in a counterclockwise order
Weiler-Atherton Algorithm
Weiler-Atherton Algorithm Process the edges of the polygon fill area in a counterclockwise order until an inside-outside pair of vertices is encountered Follow the window boundaries in a counterclockwise direction from the exit-intersection point to another intersection point with the polygon - previously processed? - yes, go to the next step - no, continue processing polygon until a previously processed vertex is encountered Form the vertex list for this section of the clipped fill area Return to the exit-intersection point and continue processing the polygon edges in a counterclockwise order
Weiler-Atherton Algorithm
Weiler-Atherton Algorithm Process the edges of the polygon fill area in a counterclockwise order until an inside-outside pair of vertices is encountered Follow the window boundaries in a counterclockwise direction from the exit-intersection point to another intersection point with the polygon - previously processed? - yes, go to the next step - no, continue processing polygon until a previously processed vertex is encountered Form the vertex list for this section of the clipped fill area Return to the exit-intersection point and continue processing the polygon edges in a counterclockwise order
Weiler-Atherton Algorithm
Weiler-Atherton Algorithm
Weiler-Atherton Algorithm
Weiler-Atherton Algorithm
Weiler-Atherton Algorithm
Weiler-Atherton Algorithm Process the edges of the polygon fill area in a counterclockwise order until an inside-outside pair of vertices is encountered Follow the window boundaries in a counterclockwise direction from the exit-intersection point to another intersection point with the polygon - previously processed? - yes, go to the next step - no, continue processing polygon until a previously processed vertex is encountered Form the vertex list for this section of the clipped fill area Return to the exit-intersection point and continue processing the polygon edges in a counterclockwise order
Weiler-Atherton Algorithm
Weiler-Atherton Algorithm Process the edges of the polygon fill area in a counterclockwise order until an inside-outside pair of vertices is encountered Follow the window boundaries in a counterclockwise direction from the exit-intersection point to another intersection point with the polygon - previously processed? - yes, go to the next step - no, continue processing polygon until a previously processed vertex is encountered Form the vertex list for this section of the clipped fill area Return to the exit-intersection point and continue processing the polygon edges in a counterclockwise order
Weiler-Atherton Algorithm Process the edges of the polygon fill area in a counterclockwise order until an inside-outside pair of vertices is encountered Follow the window boundaries in a counterclockwise direction from the exit-intersection point to another intersection point with the polygon - previously processed? - yes, go to the next step - no, continue processing polygon until a previously processed vertex is encountered Form the vertex list for this section of the clipped fill area Return to the exit-intersection point and continue processing the polygon edges in a counterclockwise order
Weiler-Atherton Algorithm Process the edges of the polygon fill area in a counterclockwise order until an inside-outside pair of vertices is encountered Follow the window boundaries in a counterclockwise direction from the exit-intersection point to another intersection point with the polygon - previously processed? - yes, go to the next step - no, continue processing polygon until a previously processed vertex is encountered Form the vertex list for this section of the clipped fill area Return to the exit-intersection point and continue processing the polygon edges in a counterclockwise order
Weiler-Atherton Algorithm
Weiler-Atherton Algorithm Process the edges of the polygon fill area in a counterclockwise order until an inside-outside pair of vertices is encountered Follow the window boundaries in a counterclockwise direction from the exit-intersection point to another intersection point with the polygon - previously processed? - yes, go to the next step - no, continue processing polygon until a previously processed vertex is encountered Form the vertex list for this section of the clipped fill area Return to the exit-intersection point and continue processing the polygon edges in a counterclockwise order
Weiler-Atherton Algorithm
Weiler-Atherton Algorithm Process the edges of the polygon fill area in a counterclockwise order until an inside-outside pair of vertices is encountered Follow the window boundaries in a counterclockwise direction from the exit-intersection point to another intersection point with the polygon - previously processed? - yes, go to the next step - no, continue processing polygon until a previously processed vertex is encountered Form the vertex list for this section of the clipped fill area Return to the exit-intersection point and continue processing the polygon edges in a counterclockwise order
Weiler-Atherton Algorithm
Weiler-Atherton Algorithm
Nonlinear Clipping-window Boundaries Approximate the boundaries with straight-line sections. Use the existing polygon clipping algorithms for clipping against a general polygon-shaped clipping window.
OpenGL Geometric Primitives All geometric primitives are specified by vertices GL_LINE_STRIP GL_LINE_LOOP GL_POLYGON GL_LINES GL_POINTS GL_TRIANGLE_STRIP GL_QUAD_STRIP GL_TRIANGLES GL_QUADS GL_TRIANGLE_FAN
Summary Polygon drawing Polygon clipping You need to implement both algorithms in assignment #3.
Next Lecture 2D transformations y y x x y x
Next Lecture 2D transformations 129 129