cyrus beck

27
Two-Dimensional Viewing

Upload: satheesh-miryala

Post on 02-Nov-2014

205 views

Category:

Documents


10 download

DESCRIPTION

abc

TRANSCRIPT

Page 1: Cyrus Beck

Two-Dimensional Viewing

Page 2: Cyrus Beck

Viewing Pipeline

Page 3: Cyrus Beck

Two-Dimensional Viewing

• Two dimensional viewing transformation– From world coordinate scene description to device

(screen) coordinates

Page 4: Cyrus Beck

Normalization and Viewport Transformation

• World coordinate clipping window• Normalization square: usually [-1,1]x[-1,1]• Device coordinate viewport

Page 5: Cyrus Beck

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

Page 6: Cyrus Beck

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

Page 7: Cyrus Beck

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

Page 8: Cyrus Beck

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

Page 9: Cyrus Beck

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

Page 10: Cyrus Beck

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

Page 11: Cyrus Beck

Cohen-Sutherland Line Clipping

• Fixed order testing and clipping cause needless clipping (external intersection)

Page 12: Cyrus Beck

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

Page 13: Cyrus Beck

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

Page 14: Cyrus Beck

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

Page 15: Cyrus Beck

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

Page 16: Cyrus Beck

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

Page 17: Cyrus Beck

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

Page 18: Cyrus Beck

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

Page 19: Cyrus Beck

Liang-Barsky Line Clipping

T

B

RLtT

tB

Page 20: Cyrus Beck

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

Page 21: Cyrus Beck

Polygon Fill-Area Clipping• Polyline vs polygon fill-area

• Early rejection is useful

Clipping Window

Bounding box of polygon fill area

Page 22: Cyrus Beck

Sutherland-Hodgman Polygon Clipping

• Clip against 4 infinite clip edges in succession

Page 23: Cyrus Beck

Sutherland-Hodgman Polygon Clipping

• Accept a series of vertices (polygon) and outputs another series of vertices

• Four possible outputs

Page 24: Cyrus Beck

Sutherland-Hodgman Polygon Clipping

• The algorithm correctly clips convex polygons, but may display extraneous lines for concave polygons

Page 25: Cyrus Beck

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

Page 26: Cyrus Beck

Weiler-Atherton Polygon Clipping

• Polygon clipping using nonrectangular polygon clip windows

Page 27: Cyrus Beck

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