840 likes | 1.11k Views
CGMB214: Introduction to Computer Graphics. Topic 4 part III Fill area primitives Polygon fill areas. What we are going to learn. To be able to understand the concept of fill attributes To be able to understand the concept of polygon. Fill Area Primitives. Filled-Area Primitives.
E N D
CGMB214: Introduction to Computer Graphics Topic 4 part III Fill area primitives Polygon fill areas
What we are going to learn To be able to understand the concept of fill attributes To be able to understand the concept of polygon
Filled-Area Primitives • Two ways of area filling on raster system • By determining the overlaps intervals for scan lines that cross the area. • By starting from interior position outward until specified boundary condition is encountered.
Filling 2D Shapes Types of filling Pattern Fill Solid Fill Texture Fill
Filling 2D Shapes • Some requirements • A digital representation of the shape • The shape must be closed • It must have a well defines inside and outside • A test for determining if a point is inside or outside of the shape • A rule or procedure for determining the colors of points inside the shape
Representing Filled Shapes • Digital images • Inside determined by a color or range of colors Original Image Pink pixels have been filled with yellow
Representing Filled Shapes A digital outline and a seed point indicating the interior Digital outline and seed points Filled outlines
Representing Filled Shapes An implicit function representing a shape’s interior The inside of a circle of radius R The inside of a unit square
Representing Filled Shapes • An equation or list of edges representing a shape’s boundary and a rule for determining its interior • E.g. • Edge list • Line from (0,0) to (1,0) • Line from (1,0) to (1,1) • Line from (1,1) to (0,1) • Line from (0,1) to (0,0) • Rule for interior points • All points to the right of all of the (ordered) edges
Representing Filled Shapes • Edge list • Line from (0,0) to (1,0) • Line from (1,0) to (1,1) • Line from (1,1) to (0,1) • Line from (0,1) to (0,0) • Rule for interior points • All points to the right of all of the (ordered) edges
Representing Filled Shapes • Edge list • Line from (0,0) to (1,0) • Line from (1,0) to (1,1) • Line from (1,1) to (0,1) • Line from (0,1) to (0,0) • Rule for interior points • All points to the right of all of the (ordered) edges Filled shape
Fill Options How to set pixel colors for points inside the shape? Solid Fill Texture Fill Pattern Fill
Seed Fill • Approach • Select a seed point inside a region • Move outwards from the seed point, setting neighboring pixels until the region is filled Seed point Move outwards to neighbors Stop when the region is filled
Selecting the Seed Point • Difficult to place the seed point automatically • Seed fill works best in an interactive application where the user sets the seed point What is the inside of this shape? It depends on the user’s intent
Seed Fill Basic algorithm select seed pixelinitialize a fill list to contain seed pixelwhile (fill list not empty) { pixel get next pixel from fill list setPixel(pixel) for (each of the pixel’s neighbors) { if (neighbor is inside region AND neighbor not set) add neighbor to fill list } }
Which neighbors should be tested? • There are two types of 2D regions • 4-connected region (test 4 neighbors) • Two pixels are 4-connected if they are vertical or horizontal neighbors • 8-connected region (test 8 neighbors) • Two pixels are 8-connected if they are vertical, horizontal, or diagonal neighbors
Using 4-connected and 8-connected neighbors gives different results Which neighbors should be tested? Magnified area Fill using 4-connected neighbors Original boundary Fill using 8-connected neighbors
When is a Neighbor Inside the Region? • There are two types of tests, resulting in two filling approaches • Boundary fill • Flood fill
Boundary Fill • Fill condition • The region is defined by a set of boundary pixels • A neighbor of an inside pixel is also inside if it is not a boundary pixel Seed pixel Boundary pixel Image after 4-connected boundary fill Original image and seed point
Flood Fill • Fill condition • The region is defined by a patch of like-colored pixels • A neighbor of an inside pixel is also inside if its color is within a range of the seed pixel’s original color • The range of inside colors can be specified in the application Seed pixel Original image and seed point Image after 4-connected flood fill
Improving Performance • Problems with the basic algorithm • We don’t know how big the fill list should be • Worst case, all the image pixels • Slow • Pixels may be checked many times to see if they have already been set (especially for 8-connected regions)
Improving Performance • Use coherence (logical connection) to improve performance and reduce memory requirements • Neighbor coherence • Neighboring pixels tend to be in the same region • Span coherence • Neighboring pixels along a given scan line tend to be in the same region • Scan-line coherence • The filling patterns of adjacent scan lines tends to be similar
Improving Performance Span-based seed fill algorithm Seed point
Improving Performance • Span-based seed fill algorithm • Start from the seed point • Fill the entire horizontal span of pixels inside the region Seed point
Improving Performance • Span-based seed fill algorithm • Determine spans of pixels in the rows above and below the current row that are connected to the current span • Add the left-most pixel of these spans to the fill list
Improving Performance • Span-based seed fill algorithm • Repeat until the fill list is empty
Improving Performance • Span-based seed fill algorithm • Repeat until the fill list is empty
Improving Performance • Span-based seed fill algorithm • Repeat until the fill list is empty
Improving Performance • Span-based seed fill algorithm • Repeat until the fill list is empty
Filling Axis-Aligned Rectangles • An axis-aligned rectangle is defined by its corner points (Xmin, Ymin) and (Xmax, Ymax) (Xmax, Ymax) (Xmin, Ymin)
Filling Axis-Aligned Rectangles Filling can be done in a nested loop for (j = Ymin, j < Ymax, j++) { for (i = Xmin, i < Xmax, i++) {setPixel(i, j, fillColor) } } (Xmax, Ymax) (Xmin, Ymin)
What is polygon? • A plane figure specified by a set of three or more coordinate positions (called vertices), that are connected in sequence by straight line segments (called edges or sides of the polygon). • Polygon must have • All vertices within a single plane • No edge crossing
Polygon Classification An interior angle of a polygon is an angle inside the polygon boundary formed by two adjacent edges If all interior angles of a polygon are less than or equal to 180 degree, the polygon is said to be convex If there is at least one interior angle greater than 180 degree, the polygon is said to be concave The order of vertices for a polygon can be either clockwise or anti-clockwise
Polygon Classification • Polygon • Concave • Convex
Identifying Concave Polygon 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
Identifying Concave Polygon Vn Ej V6 E5 V5 Vm Ej = (Vnx – Vmx , Vny – Vmy) E4 V4 (E1 X E2) > 0 (E2 X E3) > 0 (E3 X E4) < 0 (E4 X E5) > 0 (E5 X E6) > 0 (E6 X E1) > 0 E3 E6 V3 E2 V2 E1 V1 EJ X EK = EJXEKY - EJYEKX
Identifying Concave Polygon • Example: • Given 6 vertices: • V1 = (1,1) • V2 = (5,1) • V3 = (7,3) • V4 = (4,5) • V5 = (4,10) • V6 = (1,10) • 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…).
Exact angle between two adjacent edges Use dot product operation a.b = |a||b|cosθ |a| means the magnitude of vector a |a| = θ Angle between Edges
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
Filling General Polygons • Representing general polygons • Defined by a list of connected line segments • The line segments must form a closed shape (i.e. the boundary must connected) • General polygons • Can be self intersecting • Can have interior holes
Filling General Polygons • Specifying the interior • Must be able to determine which points are inside the polygon • Need a fill rule
Filling General Polygons • Inside-Outside Tests • Filling means coloring a region • How to identify interior or exterior region? • Once determined only then interior to be filled accordingly
Filling General Polygons • Specifying the interior • There are two commonly used fill rules • Even-odd parity rule • Non-zero winding rule Filled using even-odd parity rule Filled using none-zero winding rule
Inside-Outside Tests: Even-Odd Rule • Even-Odd Rule • Also known as odd-parity and odd-even rule. • How its work? • Pick a point of P in the region of interest • Draw a line from P to a distant point which lower than the smallest x • Move from P along the line to the distant point • Count the number of region edges the line crosses • If the number of crossed is odd then P is inside the interior region • If the number of crossed is even then P is inside the exterior region
Inside-Outside Tests: Even-Odd Rule • To determine if a point P is inside or outside • Draw a line from P to infinity • Count the number of times the line crosses an edge • If the number of crossing is odd, the point is inside • If the number of crossing is even, the point is outside
Inside-Outside Tests: Non-Zero Winding Rule • Non-Zero Winding Number Rule • Each boundary is given a direction number and then sum the numbers. • Rules • The line chosen must not pass through any vertices. • If first y values less than second y value • Then give direction number –1 • If first y values greater than second y value • Then give direction number 1. • Move from P along the line to the distant point. • Add or minus based on the direction number when crossing the edges. • Interior regions have non-zero winding numbers. • Exterior regions have a winding number of 0.
Inside-Outside Tests: Non-Zero Winding Rule • The outline of the shape must be directed • The line segments must have a consistent direction so that they formed a continuous, closed path
Inside-Outside Tests: Non-Zero Winding Rule • To determine if a points is inside or outside • Determine the winding number (i.e. the number of times the edge winds around the point in either a clockwise or counterclockwise direction) • Points are outside if the winding number is zero • Point are inside if the winding number is not zero