Coodinate-Free Geometric Programming
Download
Report
Transcript Coodinate-Free Geometric Programming
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
• 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
1001
1000
1010
< Region code for each endpoint >
Clipping window
0001
0000
0010
above below
Bit 4
0101
0100
0110
3
right
left
2
1
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)
1001
1000
1010
Clipping window
0001
0000
0010
0101
0100
0110
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
P(t ) P0 t (P1 P0 ), 0 t 1
• 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
N i ( P(t ) PEi ) 0 a pointin theinside halfplane
N i ( P(t ) PEi ) 0 a pointon theline containingtheedge
N i ( P(t ) PEi ) 0 a pointin theoutside halfplane
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),
N i [ P0 PEi ]
t
Ni D
– 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
Ni P0 P1 0 PE
Ni P0 P1 0 PL
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)
tT
P(x1,y1)
tB
tL
tR
x x1 t ( x2 x1 ) x1 tdx
y y1 t ( y2 y1 ) y1 tdy
t 0 P( x1 , y1 )
t 1 Q( x2 , y2 )
Liang-Barsky Line Clipping
L
R
tT
tB
T
B
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
Bounding box of polygon fill area
Clipping Window
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