reading for clipping rendering pipeline
play

Reading for Clipping Rendering Pipeline CPSC 314 Computer Graphics - PowerPoint PPT Presentation

University of British Columbia Reading for Clipping Rendering Pipeline CPSC 314 Computer Graphics FCG Sec 8.1.3-8.1.6 Clipping Jan-Apr 2013 FCG Sec 8.4 Culling Geometry Model/View Perspective Lighting Clipping Tamara Munzner


  1. University of British Columbia Reading for Clipping Rendering Pipeline CPSC 314 Computer Graphics • FCG Sec 8.1.3-8.1.6 Clipping Jan-Apr 2013 • FCG Sec 8.4 Culling Geometry Model/View Perspective Lighting Clipping Tamara Munzner • (12.1-12.4 2nd ed) Database Transform. Transform. Clipping Clipping Scan Frame- Depth Texturing Blending Conversion buffer Test http://www.ugrad.cs.ubc.ca/~cs314/Vjan2013 2 3 4 Next Topic: Clipping Clipping Why Clip? Line Clipping • we ’ ve been assuming that all primitives (lines, • analytically calculating the portions of • bad idea to rasterize outside of framebuffer • 2D triangles, polygons) lie entirely within the viewport primitives within the viewport bounds • determine portion of line inside an axis-aligned • in general, this assumption will not hold: rectangle (screen or window) • also, don ’ t waste time scan converting pixels outside window • 3D • could be billions of pixels for very close • determine portion of line inside axis-aligned objects! parallelpiped (viewing frustum in NDC) • simple extension to 2D algorithms 5 6 7 8 Clipping Trivial Accepts Trivial Rejects Clipping Lines To Viewport • big optimization: trivial accept/rejects • Q: how can we know a line is outside • combining trivial accepts/rejects • naïve approach to clipping lines: • Q: how can we quickly determine whether a line viewport? • trivially accept lines with both endpoints inside all edges of the viewport for each line segment segment is entirely inside the viewport? • A: if both endpoints on wrong side of same • trivially reject lines with both endpoints outside the same for each edge of viewport • A: test both endpoints edge, can trivially reject line edge of the viewport find intersection point • otherwise, reduce to trivial cases by splitting into two pick “ nearest ” point segments if anything is left, draw it B • what do we mean by “ nearest ” ? D • how can we optimize this? C A 9 10 11 12 Cohen-Sutherland Line Clipping Cohen-Sutherland Line Clipping Cohen-Sutherland Line Clipping Cohen-Sutherland Line Clipping • if line cannot be trivially accepted or rejected, • outcodes • assign outcode to each vertex of line to test subdivide so that one or both segments can be • if line cannot be trivially accepted or rejected, • line segment: ( p1,p2 ) discarded subdivide so that one or both segments can be • 4 flags encoding position of a point relative to • trivial cases top, bottom, left, and right boundary discarded • pick an edge that the line crosses • OC( p1 )== 0 && OC( p2 )==0 • pick an edge that the line crosses ( how? ) • check against edges in same order each time • both points inside window, thus line segment completely visible 1010 1000 1001 (trivial accept) • for example: top, bottom, right, left • intersect line with edge ( how? ) • OC( p1 )=0010 y=y max E p3 • (OC( p1 ) & OC( p2 ))!= 0 D p1 • discard portion on wrong side of edge and assign • OC( p2 )=0000 C • there is (at least) one boundary for which both points are outside outcode to new vertex 0010 0000 0001 (same flag set in both outcodes) • OC( p3 )=1001 B • thus line segment completely outside window (trivial reject) • apply trivial accept/reject tests; repeat if necessary p2 y=y min A 0110 0100 0101 x=x min x=x max 13 14 15 16

  2. Cohen-Sutherland Line Clipping Cohen-Sutherland Line Clipping Viewport Intersection Code Cohen-Sutherland Discussion • discard portion on wrong side of edge and assign • key concepts • intersect line with edge • (x 1 , y 1 ), (x 2 , y 2 ) intersect vertical edge at x right outcode to new vertex • use opcodes to quickly eliminate/include lines • y intersect = y 1 + m(x right – x 1 ) • best algorithm when trivial accepts/rejects are • m=(y 2 -y 1 )/(x 2 -x 1 ) E D D common (x 2 , y 2 ) C C (x 1 , y 1 ) • must compute viewport clipping of remaining x right B B lines • (x 1 , y 1 ), (x 2 , y 2 ) intersect horiz edge at y bottom A A • non-trivial clipping cost • x intersect = x 1 + (y bottom – y 1 )/m • redundant clipping of some lines • basic idea, more efficient algorithms exist • m=(y 2 -y 1 )/(x 2 -x 1 ) (x 2 , y 2 ) • apply trivial accept/reject tests and repeat if y bottom necessary (x 1 , y 1 ) 17 18 19 20 Line Clipping in 3D Polygon Clipping Polygon Clipping Why Is Clipping Hard? • what happens to a triangle during clipping? • approach • objective • not just clipping all boundary lines • clip against parallelpiped in NDC • some possible outcomes: • 2D: clip polygon against rectangular window • may have to introduce new line segments • after perspective transform • or general convex polygons • means that clipping volume always the same • extensions for non-convex or general polygons • xmin=ymin= -1, xmax=ymax= 1 in OpenGL • 3D: clip polygon against parallelpiped • boundary lines become boundary planes triangle to quad triangle to triangle triangle to 5-gon • but outcodes still work the same way • how many sides can result from a triangle? • additional front and back clipping plane • seven • zmin = -1, zmax = 1 in OpenGL 21 22 23 24 Why Is Clipping Hard? Polygon Clipping Sutherland-Hodgeman Clipping Sutherland-Hodgeman Clipping • basic idea: • basic idea: • a really tough case: • classes of polygons • consider each edge of the viewport individually • consider each edge of the viewport individually • triangles • clip the polygon against the edge equation • clip the polygon against the edge equation • convex • after doing all edges, the polygon is fully clipped • after doing all edges, the polygon is fully clipped • concave • holes and self-intersection concave polygon to multiple polygons 25 26 27 28 Sutherland-Hodgeman Clipping Sutherland-Hodgeman Clipping Sutherland-Hodgeman Clipping Sutherland-Hodgeman Clipping • basic idea: • basic idea: • basic idea: • basic idea: • consider each edge of the viewport individually • consider each edge of the viewport individually • consider each edge of the viewport individually • consider each edge of the viewport individually • clip the polygon against the edge equation • clip the polygon against the edge equation • clip the polygon against the edge equation • clip the polygon against the edge equation • after doing all edges, the polygon is fully clipped • after doing all edges, the polygon is fully clipped • after doing all edges, the polygon is fully clipped • after doing all edges, the polygon is fully clipped 29 30 31 32

  3. Sutherland-Hodgeman Clipping Sutherland-Hodgeman Clipping Sutherland-Hodgeman Clipping Sutherland-Hodgeman Algorithm • basic idea: • basic idea: • basic idea: • input/output for whole algorithm • input: list of polygon vertices in order • consider each edge of the viewport individually • consider each edge of the viewport individually • consider each edge of the viewport individually • output: list of clipped polygon vertices consisting of old vertices • clip the polygon against the edge equation • clip the polygon against the edge equation • clip the polygon against the edge equation (maybe) and new vertices (maybe) • after doing all edges, the polygon is fully clipped • after doing all edges, the polygon is fully clipped • after doing all edges, the polygon is fully clipped • input/output for each step • input: list of vertices • output: list of vertices, possibly with changes • basic routine • go around polygon one vertex at a time • decide what to do based on 4 possibilities • is vertex inside or outside? • is previous vertex inside or outside? 33 34 35 36 Clipping Against One Edge Clipping Against One Edge Clipping Against One Edge Sutherland-Hodgeman Example clipPolygonToEdge( p[n], edge ) { • p[i] inside: 2 cases • p[i] outside: 2 cases for( i= 0 ; i< n ; i++ ) { if( p[i] inside edge ) { inside outside if( p[i-1] inside edge ) output p[i]; // p[-1]= p[n-1] inside outside inside outside inside outside inside outside p7 else { p6 p5 p[i-1] p[i] p[i-1] p= intersect( p[i-1], p[i], edge ); output p, p[i]; p3 } p4 } else { // p[i] is outside edge p[i-1] p p p2 p0 if( p[i-1] inside edge ) { p[i] p= intersect(p[i-1], p[I], edge ); output p; p[i] p1 } p[i-1] p[i] } output: p[i] output: p, p[i] output: p output: nothing } 37 38 39 40 Sutherland-Hodgeman Discussion • similar to Cohen/Sutherland line clipping • inside/outside tests: outcodes • intersection of line segment with edge: window-edge coordinates • clipping against individual edges independent • great for hardware (pipelining) • all vertices required in memory at same time • not so good, but unavoidable • another reason for using triangles only in hardware rendering 41

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend