290 likes | 607 Views
Two-Dimensional Viewing. Jehee Lee Seoul National University. Viewing Pipeline. Two-Dimensional Viewing. Two dimensional viewing transformation From world coordinate scene description to device (screen) coordinates. Normalization and Viewport Transformation.
E N D
Two-Dimensional Viewing Jehee Lee Seoul National University
Two-Dimensional Viewing • Two dimensional viewing transformation • From world coordinate scene description to device (screen) coordinates
Normalization and Viewport Transformation • World coordinate clipping window • Normalization square: usually [-1,1]x[-1,1] • Device coordinate viewport
OpenGL 2D Viewing • Projection Mode • glMatrixMode(GL_PROJECTION); • GLU clipping-window function • gluOrtho2D(xwmin,xwmax,ywmin,ywmax); • Normalized to [-1,1]x[-1,1] • OpenGL viewport function • glViewport(xvmin,xvmax,yvmin,yvmax); • Rarely used because of GLUT device independent library
Clipping • Remove portion of output primitives outside clipping window • Two approaches • Clip during scan conversion: Per-pixel bounds check • Clip analytically, then scan-convert the modified primitives
Two-Dimensional Clipping • Point clipping – trivial • Line clipping • Cohen-Sutherland • Cyrus-beck • Liang-Barsky • Fill-area clipping • Sutherland-Hodgeman • Weiler-Atherton • Curve clipping • Text clipping
Line Clipping • Basic calculations: • Is an endpoint inside or outside the clipping window? • Find the point of intersection, if any, between a line segment and an edge of the clipping window. • Both endpoints inside: trivial accept • One inside: find intersection and clip • Both outside: either clip or reject
1001 1000 1010 Clipping window 0001 0010 0000 0101 0100 0110 Cohen-Sutherland Line Clipping • One of the earliest algorithms for fast line clipping • Identify trivial accepts and rejects by bit operations < Region code for each endpoint > above below right left Bit 4 3 2 1
1001 1000 1010 Clipping window 0001 0010 0000 0101 0100 0110 Cohen-Sutherland Line Clipping • Compute region codes for two endpoints • If (both codes = 0000 ) trivially accepted • If (bitwise AND of both codes 0000) trivially rejected • Otherwise, divide line into two segments • test intersection edges in a fixed order. (e.g., top-to-bottom, right-to-left)
Cohen-Sutherland Line Clipping • Fixed order testing and clipping cause needless clipping (external intersection)
Cohen-Sutherland Line Clipping • This algorithm can be very efficient if it can accept and reject primitives trivially • Clip window is much larger than scene data • Most primitives are accepted trivially • Clip window is much smaller than scene data • Most primitives are rejected trivially • Good for hardware implementation
Cyrus-Beck Line Clipping • Use a parametric line equation • Reduce the number of calculating intersections by exploiting the parametric form • Notations • Ei : edge of the clipping window • Ni : outward normal of Ei • An arbitrary point PEi on edge Ei
Cyrus-Beck Line Clipping • Solve for the value of t at the intersection of P0P1 with the edge • Ni·[P(t) - PEi] = 0 and P(t) = P0 + t(P1 - P0) • letting D = (P1 - P0), • Where • Ni 0 • D 0 (that is, P0 P1) • Ni· D 0 (if not, no intersection)
Cyrus-Beck Line Clipping • Given a line segment P0P1, find intersection points against four edges • Discard an intersection point if t [0,1] • Label each intersection point either PE (potentially entering) or PL (potentially leaving) • Choose the smallest (PE, PL) pair that defines the clipped line
Cyrus-Beck Line Clipping • Cyrus-Beck is efficient when many line segments need to be clipped • Can be extended easily to convex polygon (rather than upright rectangle) clip windows
Liang-Barsky Line Clipping • Liang-Barsky optimized Cyrus-Beck for upright rectangular clip windows Q(x2.y2) tR tT P(x1,y1) tL tB
Liang-Barsky Line Clipping L R tT T B tB
General Clipping Window • Line clipping using nonrectangular polygon clip windows • Convex polygon • Cyrus-Beck algorithm can be readily extended • Concave polygon • Split the concave polygon into convex polygons • Vector Method for Concave Splitting • Calculate edge-vector cross products in a counterclockwise order • If any z component turns out to be negative, the polygon is concave
Polygon Fill-Area Clipping • Polyline vs polygon fill-area • Early rejection is useful Clipping Window Bounding box of polygon fill area
Sutherland-Hodgman Polygon Clipping • Clip against 4 infinite clip edges in succession
Sutherland-Hodgman Polygon Clipping • Accept a series of vertices (polygon) and outputs another series of vertices • Four possible outputs
Sutherland-Hodgman Polygon Clipping • The algorithm correctly clips convex polygons, but may display extraneous lines for concave polygons
Weiler-Atherton Polygon Clipping • For an outside-to-inside pair of vertices, follow the polygon boundary • For an inside-to-outside pair of vertices, follow the window boundary in a clockwise direction
Weiler-Atherton Polygon Clipping • Polygon clipping using nonrectangular polygon clip windows
Text Clipping • All-or-none text clipping • Using boundary box for the entire text • All-or-non character clipping • Using boundary box for each individual character • Character clipping • Vector font: Clip boundary polygons or curves • Bitmap font: Clip individual pixels