Upload
satheesh-miryala
View
248
Download
10
Embed Size (px)
DESCRIPTION
abc
Citation preview
Two-Dimensional Viewing
Viewing Pipeline
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
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 leftBit 4 3 2 1
0000
10001001
0001
0101 0100 0110
0010
1010Clipping window
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)
0000
10001001
0001
0101 0100 0110
0010
1010Clipping window
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
10 ),()( 010 tPPtPtP
Cyrus-Beck Line Clipping
halfplane outside in thepoint a0))((
edge thecontaining line on thepoint a0))((
halfplane inside in thepoint a0))((
i
i
i
Ei
Ei
Ei
PtPN
PtPN
PtPN
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)
DNPPNt
i
Eii
][ 0
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
PL0PE0
10
10
PPNPPN
i
i
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
),(1),(0
22
11
yxQtyxPt
tdyyyytyytdxxxxtxx
1121
1121
)()(
P(x1,y1)
Q(x2.y2)
tB
tT
tR
tL
Liang-Barsky Line Clipping
T
B
RLtT
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