Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 CSCE 441 Computer Graphics: Clipping Lines Jinxiang Chai.

Similar presentations


Presentation on theme: "1 CSCE 441 Computer Graphics: Clipping Lines Jinxiang Chai."— Presentation transcript:

1 1 CSCE 441 Computer Graphics: Clipping Lines Jinxiang Chai

2 2/135 OpenGL Geometric Primitives All geometric primitives are specified by vertices GL_QUAD_STRIP GL_POLYGON GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_POINTS GL_LINES GL_LINE_LOOP GL_LINE_STRIP GL_TRIANGLES GL_QUADS

3 3/135 Review: Drawing General Polygons How to draw every interior pixels? ? Scanline conversion of polygons!

4 4/135 Review: Curved Boundaries How to deal with curved boundaries? Boundary fill algorithm!

5 5/135 Review: How to deal with this? Multiple color boundaries? Flood fill algorithm!

6 6/135 Why Clip? We do not want to waste time drawing objects that are outside of viewing window (or clipping window)

7 7/135 Clipping Points Given a point (x, y)and clipping window (x min, y min ), (x max, y max ), determine if the point should be drawn (x min, y min ) (x max, y max ) (x,y)

8 8/135 Clipping Points Given a point (x, y)and clipping window (x min, y min ), (x max, y max ), determine if the point should be drawn (x min, y min ) (x max, y max ) (x,y) x min =<x<=x max ? y min =<y<=y max ?

9 9/135 Clipping Points Given a point (x, y)and clipping window (x min, y min ), (x max, y max ), determine if the point should be drawn ( x 1, y 1) ( x 2, y 2) (x min, y min ) (x max, y max ) x min =<x<=x max ? y min =<y<=y max ?

10 10/135 Clipping Points Given a point (x, y)and clipping window (x min, y min ), (x max, y max ), determine if the point should be drawn ( x 1, y 1) ( x 2, y 2) (x min, y min ) (x max, y max ) x min =<x 1 <=x max Yes y min =<y 1 <=y max Yes

11 11/135 Clipping Points Given a point (x, y)and clipping window (x min, y min ), (x max, y max ), determine if the point should be drawn ( x 1, y 1) ( x 2, y 2) (x min, y min ) (x max, y max ) x min =<x 2 <=x max No y min =<y 2 <=y max No

12 12/135 Clipping Lines

13 13/135 Clipping Lines

14 14/135 Clipping Lines Given a line with end-points (x 0, y 0 ), (x 1, y 1 ) and clipping window (x min, y min ), (x max, y max ), determine if line should be drawn and clipped end-points of line to draw. (x 0, y 0 ) (x 1, y 1 ) (x min, y min ) (x max, y max )

15 15/135 Clipping Lines

16 16/135 Outline Simple line clipping algorithm Cohen-Sutherland Liang-Barsky

17 17/135 Clipping Lines

18 18/135 Clipping Lines – Simple Algorithm If both end-points inside rectangle, draw line If one end-point outside, intersect line with all edges of rectangle clip that point and repeat test

19 19/135 Clipping Lines – Simple Algorithm

20 20/135 Clipping Lines – Simple Algorithm

21 21/135 Intersecting Two Lines

22 22/135 Intersecting Two Lines

23 23/135 Intersecting Two Lines

24 24/135 Intersecting Two Lines

25 25/135 Intersecting Two Lines

26 26/135 Intersecting Two Lines Substitute t or s back into equation to find intersection

27 27/135 Clipping Lines – Simple Algorithm

28 28/135 Clipping Lines – Simple Algorithm

29 29/135 Clipping Lines – Simple Algorithm

30 30/135 Clipping Lines – Simple Algorithm

31 31/135 Clipping Lines – Simple Algorithm

32 32/135 Clipping Lines – Simple Algorithm

33 33/135 Clipping Lines – Simple Algorithm

34 34/135 Clipping Lines – Simple Algorithm

35 35/135 Clipping Lines – Simple Algorithm

36 36/135 Clipping Lines – Simple Algorithm

37 37/135 Clipping Lines – Simple Algorithm

38 38/135 Clipping Lines – Simple Algorithm

39 39/135 Clipping Lines – Simple Algorithm

40 40/135 Clipping Lines – Simple Algorithm

41 41/135 Clipping Lines – Simple Algorithm

42 42/135 Clipping Lines – Simple Algorithm Lots of intersection tests makes algorithm expensive Complicated tests to determine if intersecting rectangle Is there a better way?

43 43/135 Trivial Accepts Big Optimization: trivial accepts/rejects How can we quickly decide whether line segment is entirely inside window Answer: test both endpoints

44 44/135 Trivial Accepts Big Optimization: trivial accepts/rejects How can we quickly decide whether line segment is entirely inside window Answer: test both endpoints

45 45/135 Trivial Rejects How can we know a line is outside of the window Answer:

46 46/135 Trivial Rejects How can we know a line is outside of the window Answer: Wrong side

47 47/135 Trivial Rejects How can we know a line is outside of the window Answer: both endpoints on wrong side of same edge, can trivially reject the line

48 48/135 Cohen-Sutherland Algorithm Classify p 0, p 1 using region codes c 0, c 1 If, trivially reject If, trivially accept Otherwise reduce to trivial cases by splitting into two segments

49 49/135 Cohen-Sutherland Algorithm Every end point is assigned to a four-digit binary value, i.e. Region code Each bit position indicates whether the point is inside or outside of a specific window edges bit 4bit 3bit 2bit 1 leftrightbottomtop

50 50/135 Cohen-Sutherland Algorithm bit 4bit 3bit 2bit 1 leftrightbottomtop right left bottom Region code?

51 51/135 Cohen-Sutherland Algorithm bit 4bit 3bit 2bit 1 leftrightbottomtop right left bottom 0010 ?

52 52/135 Cohen-Sutherland Algorithm bit 4bit 3bit 2bit 1 leftrightbottomtop right left bottom 0010 0100

53 53/135 Cohen-Sutherland Algorithm

54 54/135 Cohen-Sutherland Algorithm

55 55/135 Cohen-Sutherland Algorithm Classify p 0, p 1 using region codes c 0, c 1 If, trivially reject If, trivially accept Otherwise reduce to trivial cases by splitting into two segments

56 56/135 Cohen-Sutherland Algorithm Classify p 0, p 1 using region codes c 0, c 1 If, trivially reject If, trivially accept Otherwise reduce to trivial cases by splitting into two segments

57 57/135 Cohen-Sutherland Algorithm Classify p 0, p 1 using region codes c 0, c 1 If, trivially reject If, trivially accept Otherwise reduce to trivial cases by splitting into two segments Line is outside the window! reject

58 58/135 Cohen-Sutherland Algorithm Classify p 0, p 1 using region codes c 0, c 1 If, trivially reject If, trivially accept Otherwise reduce to trivial cases by splitting into two segments Line is outside the window! reject

59 59/135 Cohen-Sutherland Algorithm Classify p 0, p 1 using region codes c 0, c 1 If, trivially reject If, trivially accept Otherwise reduce to trivial cases by splitting into two segments Line is inside the window! draw

60 60/135 Cohen-Sutherland Algorithm Classify p 0, p 1 using region codes c 0, c 1 If, trivially reject If, trivially accept Otherwise reduce to trivial cases by splitting into two segments

61 61/135 Window Intersection (x 1, y 1 ), (x 2, y 2 ) intersect with vertical edge at x right  y intersect = y 1 + m(x right – x1) where m=(y 2 -y 1 )/(x 2 -x 1 ) (x 1, y 1 ), (x 2, y 2 ) intersect with horizontal edge at y bottom  x intersect = x 1 + (y bottom – y1)/m where m=(y 2 -y 1 )/(x 2 -x 1 )

62 62/135 Example 1

63 63/135 Example 1

64 64/135 Example 1

65 65/135 Example 1

66 66/135 Example 2

67 67/135 Example 2

68 68/135 Example 2

69 69/135 Example 2

70 70/135 Example 2

71 71/135 Example 2

72 72/135 Example 2

73 73/135 Example 3

74 74/135 Example 3

75 75/135 Example 3

76 76/135 Example 3

77 77/135 Cohen Sutherland Java applet: click herehere

78 78/135 Cohen-Sutherland Algorithm Extends easily to 3D line clipping  27 regions  6 bits

79 79/135 Cohen-Sutherland Algorithm Use region codes to quickly eliminate/include lines  Best algorithm when trivial accepts/rejects are common Must compute viewing window clipping of remaining lines  Non-trivial clipping cost More efficient algorithms exist

80 80/135 Liang-Barsky Algorithm Parametric definition of a line:  x = x 1 + u Δ x  y = y 1 + u Δ y  Δ x = (x 2 -x 1 ), Δ y = (y 2 -y 1 ), 0<=u<=1 Lines are oriented: classify lines as moving inside to out or outside to in Goal: find range of u for which x and y both inside the viewing window

81 81/135 Liang-Barsky Algorithm Current clipped line (u 1 =0,u 2 =1) (-.5,-.5) (2,1)

82 82/135 Liang-Barsky Algorithm Current clipped line (u 1 =0.333,u 2 =0.6) (-.5,-.5) (2,1)

83 83/135 Liang-Barsky Algorithm For lines starting outside of boundary, update its starting point (u 1 ) For lines starting inside of boundary, update end point (u 2 ) For lines paralleling the boundaries and outside window, reject it.

84 84/135 Liang-Barsky Algorithm For lines starting outside of boundary, update its starting point (u 1 ) For lines starting inside of boundary, update end point (u 2 ) For lines paralleling the boundaries and outside window, reject it.

85 85/135 Liang-Barsky Algorithm Mathematically:  x min <= x 1 + u Δ x <= x max  y min <= y 1 + u Δ y <= y max Rearranged  1:u*(- Δ x) <= (x 1 – x min )  2:u*( Δ x) <= (x max – x 1 )  3:u*(- Δ y) <= (y 1 – y min )  4:u*( Δ y) <= (y max – y 1 )  gen:u*(p k ) <= (q k ), k=1,2,3,4

86 86/135 Liang-Barsky Algorithm Rules: 1) p k = 0: the line is parallel to boundaries  If for that same k, q k < 0, it’s outside  Otherwise it’s inside 2) p k < 0: the line starts outside this boundary  r k = q k /p k  u 1 = max(0, r k, u 1 ) /**update starting point**/  p k > 0: the line starts inside the boundary  r k = q k /p k  u 2 = min(1, r k, u 2 ) /** update end point**/  If u 1 > u 2, the line is completely outside

87 87/135 Liang-Barsky Algorithm Current clipped line (u 1 =0,u 2 =1) (-.5,-.5) (2,1)

88 88/135 Liang-Barsky Algorithm Current clipped line (u 1 =0,u 2 =1) (-.5,-.5) (2,1) Δx = (x2-x1)=2.5 Δy = (y2-y1)=1.5 p 1 = -Δx =-2.5<0 q 1 = (x 1 -x min )=-.5 r 1 = q 1 /p 1 =0.2

89 89/135 Liang-Barsky Algorithm Current clipped line (u 1 =0,u 2 =1) (-.5,-.5) (2,1) Δx = (x2-x1)=2.5 Δy = (y2-y1)=1.5 p 1 = -Δx =-2.5<0 q 1 = (x 1 -x min )=-.5 r 1 = q 1 /p 1 =0.2 line starts outside this boundary

90 90/135 Liang-Barsky Algorithm Current clipped line (u 1 =0,u 2 =1) (-.5,-.5) (2,1) Δx = (x2-x1)=2.5 Δy = (y2-y1)=1.5 p 1 = -Δx =-2.5<0 q 1 = (x 1 -x min )=-.5 r 1 = q 1 /p 1 =0.2

91 91/135 Liang-Barsky Algorithm Current clipped line (u 1 =0,u 2 =1) (-.5,-.5) (2,1) Δx = (x2-x1)=2.5 Δy = (y2-y1)=1.5 p 1 = -Δx =-2.5<0 q 1 = (x 1 -x min )=-.5 r 1 = q 1 /p 1 =0.2

92 92/135 Liang-Barsky Algorithm Current clipped line (u 1 =0,u 2 =1) (-.5,-.5) (2,1) Δx = (x2-x1)=2.5 Δy = (y2-y1)=1.5 p 1 = -Δx =-2.5<0 q 1 = (x 1 -x min )=-.5 r 1 = q 1 /p 1 =0.2u 1 = max(0, r 1, u 1 )

93 93/135 Liang-Barsky Algorithm Current clipped line (u 1 =0.2,u 2 =1) (-.5,-.5) (2,1) u 1 <u2? - yes: continue - no: the line is completely outside window

94 94/135 Liang-Barsky Algorithm Current clipped line (u 1 =0.2,u 2 =1) (-.5,-.5) (2,1)

95 95/135 Liang-Barsky Algorithm Current clipped line (u 1 =0.2,u 2 =1) (-.5,-.5) (2,1) Δx = (x2-x1)=2.5 Δy = (y2-y1)=1.5 p 2 = Δx =2.5>0 q 2 = (x max -x 1 )=1.5 r 2 = q 2 /p 2 =0.6

96 96/135 Liang-Barsky Algorithm Current clipped line (u 1 =0.2,u 2 =1) (-.5,-.5) (2,1) Δx = (x2-x1)=2.5 Δy = (y2-y1)=1.5 p 2 = Δx =2.5>0 q 2 = (x max -x 1 )=1.5 r 2 = q 2 /p 2 =0.6u 2 = min(1, r 2, u 2 )

97 97/135 Liang-Barsky Algorithm Current clipped line (u 1 =0.2,u 2 =0.6) (-.5,-.5) (2,1) Δx = (x2-x1)=2.5 Δy = (y2-y1)=1.5 p 2 = Δx =2.5>0 q 2 = (x max -x 1 )=1.5 r 2 = q 2 /p 2 =0.6

98 98/135 Liang-Barsky Algorithm Current clipped line (u 1 =0.2,u 2 =0.6) (-.5,-.5) (2,1) u 1 <u2? - yes: continue - no: the line is completely outside window

99 99/135 Liang-Barsky Algorithm Current clipped line (u 1 =0.2,u 2 =0.6) (-.5,-.5) (2,1) Δx = (x2-x1)=2.5 Δy = (y2-y1)=1.5 p 3 = -Δy =-1.5<0 q 3 = (y 1 -y min )=0.5 r 3 = q 3 /p 3 =0.333

100 100/135 Liang-Barsky Algorithm Current clipped line (u 1 =0.2,u 2 =0.6) (-.5,-.5) (2,1) Δx = (x2-x1)=2.5 Δy = (y2-y1)=1.5 p 3 = -Δy =-1.5<0 q 3 = (y 1 -y min )=0.5 r 3 = q 3 /p 3 =0.333u 1 = max(0, r 3, u 1 )

101 101/135 Liang-Barsky Algorithm Current clipped line (u 1 =0.333,u 2 =0.6) (-.5,-.5) (2,1) Δx = (x2-x1)=2.5 Δy = (y2-y1)=1.5 p 3 = -Δy =-1.5<0 q 3 = (y 1 -y min )=0.5 r 3 = q 3 /p 3 =0.333

102 102/135 Liang-Barsky Algorithm Current clipped line (u 1 =0.333,u 2 =0.6) (-.5,-.5) (2,1)

103 103/135 Liang-Barsky Algorithm Current clipped line (u 1 =0.333,u 2 =0.6) (-.5,-.5) (2,1) Δx = (x2-x1)=2.5 Δy = (y2-y1)=1.5 p 3 = -Δy =-1.5<0 q 3 = (y 1 -y min )=0.5 r 3 = q 3 /p 3 =0.333

104 104/135 Liang-Barsky Algorithm Current clipped line (u 1 =0.333,u 2 =0.6) (-.5,-.5) (2,1) Δx = (x2-x1)=2.5 Δy = (y2-y1)=1.5 p 4 = Δy =1.5>0 q 4 = (y max -y 1 )=1.5 r 4 = q 4 /p 4 =1

105 105/135 Liang-Barsky Algorithm Current clipped line (u 1 =0.333,u 2 =0.6) (-.5,-.5) (2,1) Δx = (x2-x1)=2.5 Δy = (y2-y1)=1.5 p 4 = Δy =1.5>0 q 4 = (y max -y 1 )=1.5 r 4 = q 4 /p 4 =1u 2 = min(1, r 4, u 2 )

106 106/135 Liang-Barsky Algorithm Check the left edge (u 1 =0.333,u 2 =0.6) (-.5,-.5) (2,1) u 1 <u 2 x new1 =x 1 +Δx*u 1 y new1 =y 1 +Δy*u 1 x new2 =x 2 +Δx*u 2 y new2 =y 2 +Δy*u 2

107 107/135 Liang-Barsky Algorithm Faster than Cohen-Sutherland Extension to 3D is easy - Parametric representation for 3D lines - Compute u1,u2 based on the intersection between line and plane

108 108/135 Comparison Cohen-Sutherland  Repeated clipping is expensive  Best used when trivial acceptance and rejection is possible for most lines Liang-Barsky  Computation of t-intersections is cheap (only one division)  Computation of (x,y) clip points is only done once  Algorithm doesn’t consider trivial accepts/rejects  Best when many lines must be clipped

109 109/135 Curve Clipping

110 110/135 Curve Clipping

111 111/135 Curve Clipping Approximate a curve using a set of straight- line segments Apply line clipping for curve clipping

112 112/135 Next Lecture Polygon fill-area clipping

113 113/135 Next Lecture Polygon fill-area clipping


Download ppt "1 CSCE 441 Computer Graphics: Clipping Lines Jinxiang Chai."

Similar presentations


Ads by Google