Computer Graphics with OpenGL 3e © 2005 Pearson Education
Chapter 4 Attribute of Graphics Primitives © 2005 Pearson Education
Fill-area attributes Graphics packages limit fill area to polygon Describe object as linear equations Fill style Hollow, solid and patterned Fill pattern A mask to be applied to the display area described in rectangular arrays that list different colors for different positions in the array Color-Blended fill regions Combine a fill pattern with background color Example: transparency Simple logical operation Soft-fill algorithm © 2005 Pearson Education
Fill-area attributes “Polygon” (รูปหลายเหลี่ยม) can be generally thought of as a shape Formed by a line segments that are placed end to end to create a continuous closed path Three basic types Convex, concave, and complex © 2005 Pearson Education
Identifying Concave/Convex Setup vectors for all edges Perform cross product to adjacent vectors to test for concavity Perform dot product if we want to determine the angle between two edges All vector products will be the same value (positive or negative) for convex polygon If there are some cross products yield a positive and some yield a negative value, we have a concave polygon © 2005 Pearson Education
Identifying Concave (cont.) Vn Ej V6 E5 V5 Vm E4 Ej = (Vnx – Vmx , Vny – Vmy) V4 E3 (E1 X E2) > 0 (E2 X E3) > 0 (E3 X E4) < 0 (E4 X E5) > 0 (E5 X E6) > 0 (E6 X E1) > 0 E6 V3 E2 V2 E1 V1 EJ X EK = EJXEKY - EJYEKX © 2005 Pearson Education
Example Given 6 vertices: Prove that these vertices is for concave polygon. What can you say about the cross product values if we change the order of these vertices (v6 becomes v1, v5 becomes v2, etc…). © 2005 Pearson Education
Exact angle between two adjacent edges Use dot product operation Angle between Edges Exact angle between two adjacent edges Use dot product operation a.b = |a||b|cos θ |a| means the magnitude of vector a θ © 2005 Pearson Education
Angle Between Edges Example: Given 2 vectors a = (2,3) and b = (6,3). Determine the angle between these two vectors Determine the angle between E3 and E4 (refer to previous example) © 2005 Pearson Education
Fill-area attributes Convex or Concave polygons? Complex polygon http://www.cs.rit.edu/~icss571/filling/what_is_poly.html © 2005 Pearson Education
Fill-area attributes How is a filled polygon different from an unfilled one? When an unfilled polygon is rendered, only the points on the perimeter of the polygon are drawn When a polygon is filled, the interior of the polygon must be considered © 2005 Pearson Education
Inside and Outside Test In order to determine which pixels are inside polygon Odd-Even Rule (Odd-parity rule) Nonzero Winding Number Rule © 2005 Pearson Education
Inside and Outside Test Nonzero Winding Number Rule Count the number of times the boundary of an object “winds” around a particular point in the counterclockwise direction Wn++ Wn- - wn = winding number If wn ≠ 0, such point is interior pixel of the polygon Otherwise, such point is exterior pixel of the polygon © 2005 Pearson Education
Inside and Outside Test Problem in complex shape © 2005 Pearson Education
Polygon-fill Algorithm General scan-line polygon-fill algorithm Applied to concave / convex polygon With help of mid-point method to determine intersection when applied to curved areas Boundary-fill algorithm Filling irregular areas Start at an inside position and “paint” interior © 2005 Pearson Education
General Scan-Line Polygon-fill Algorithm © 2005 Pearson Education
General Scan-Line Polygon-fill Algorithm © 2005 Pearson Education
General Scan-Line Polygon-fill Algorithm Exceptions!!! กรณีที่ scan line ตัดผ่านจุดยอดของ polygon พอดี เช่นที่จุดหมายเลข 2 Case 1 : Scan line y’ two intersection edges are both above the scan line Case 2 : Scan line y two edges sharing an intersection vertex are on opposite sides of the scan line © 2005 Pearson Education
General Scan-Line Polygon-fill Algorithm การระบุว่า scan line ของกรณี Exceptions จัดอยู่ในรูปแบบใด สามารถทำได้ดังนี้ เดิน (trace) ตามเส้นขอบ polygon เพื่อพิจารณา 3 จุดยอดใด ๆ ที่อยู่ติดกัน ในทิศ ทวนเข็ม หรือ ตามเข็มนาฬิกา ก็ได้ สังเกตลักษณะการเปลี่ยนแปลงค่า y จากจุดยอดทั้ง 3 จุด ถ้าค่า y เปลี่ยนแปลง ไปในทิศทางตรงกันข้าม แสดงว่าจุดยอดตรงกลางเป็น กรณีที่ 1 : เพิ่มจุดตัดซ้ำ 2 จุด ถ้าค่า y ลดลงตลอด (หรือเพิ่มขึ้นตลอด) แสดงว่าจุดยอดตรงกลางเป็น กรณีที่ 2 : ให้หดเส้นของลง 1 scan line © 2005 Pearson Education
General Scan-Line Polygon-fill Algorithm © 2005 Pearson Education
General Scan-Line Polygon-fill Algorithm Coherent Polygon Processing เราสามารถใช้ประโยชน์ ความเกี่ยวเนื่องกันขององค์ประกอบ polygon สำหรับ scan line ที่ติดกัน มาใช้เพื่อเพิ่มประสิทธิภาพในการประมวลผลได้ © 2005 Pearson Education
General Scan-Line Polygon-fill Algorithm An Efficient Polygon Algorithm © 2005 Pearson Education
General Scan-Line Polygon-fill Algorithm Scan-Line Algorithm Identifying sharing vertex โดย trace 3 vertices ใด ๆ ที่อยู่ติดกันเพื่อดูการเปลี่ยนแปลงของค่า y ทำการ shorten edge ในกรณีที่จุดยอด (vertex) ตัดผ่าน scan line พอดี เพื่อแยกแยะชนิดของจุดแบ่งเส้น scan line จัดเก็บข้อมูลของแต่ละ edge ในรูป y-min, y-max, x-val (of y-min) และ Δx/ Δy (1/m) ตามลำดับ 4. สร้าง sorted edge table เพื่อนำมาใช้เป็น active edge table ของแต่ละ scan line 5. ทำการระบายสี polygon ทีละ scan line © 2005 Pearson Education
Boundary-Fill Algorithm In many graphics packages the user can fill a region (defined by a boundary). In the figure, the boundary is red and the filling color is blue The user needs to click inside the region (seed) © 2005 Pearson Education
Boundary-Fill Algorithm Employed in interactive painting packages Using recursive method with procedure Start from an interior inside point, test neighboring position Fill color in that position if it is not the boundary Two area fill method 4-connect or 8-connected © 2005 Pearson Education
Boundary-Fill Algorithm ต้องการ input จำนวน 3 ตัว : 1)พิกัดเริ่มต้น (x, y) ที่อยู่ภายในบริเวณที่ต้องการระบาย 2) สีที่ต้องการระบาย 3) สีของขอบของบริเวณ © 2005 Pearson Education
Boundary-Fill Algorithm © 2005 Pearson Education
Boundary-Fill Algorithm © 2005 Pearson Education
Boundary-Fill Algorithm http://www.cs.unc.edu/~mcmillan/comp136/Lecture8/areaFills.html © 2005 Pearson Education
Boundary-Fill Algorithm © 2005 Pearson Education
© 2005 Pearson Education