0% found this document useful (1 vote)
731 views

CG3 - Fill Area Primitives

This document discusses different techniques for filling 2D shapes in computer graphics. It begins by explaining the basic requirements for filling shapes, such as having a digital representation of the closed shape with a well-defined inside and outside. Various methods are presented for representing filled shapes, including using digital images, outlines with seed points, implicit functions, and edge lists with interior rules. The document then covers different options for setting pixel colors within shapes, such as solid fills, pattern fills, and texture fills. Seed filling, boundary filling, and flood filling algorithms are described in detail. Techniques for improving the performance of filling algorithms like span-based filling are also presented. The document concludes by discussing methods for filling polygons, such as using the even

Uploaded by

SameerSharma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (1 vote)
731 views

CG3 - Fill Area Primitives

This document discusses different techniques for filling 2D shapes in computer graphics. It begins by explaining the basic requirements for filling shapes, such as having a digital representation of the closed shape with a well-defined inside and outside. Various methods are presented for representing filled shapes, including using digital images, outlines with seed points, implicit functions, and edge lists with interior rules. The document then covers different options for setting pixel colors within shapes, such as solid fills, pattern fills, and texture fills. Seed filling, boundary filling, and flood filling algorithms are described in detail. Techniques for improving the performance of filling algorithms like span-based filling are also presented. The document concludes by discussing methods for filling polygons, such as using the even

Uploaded by

SameerSharma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 54

CGMB 314

Intro to Computer
Graphics

Fill Area Primitives

Filling 2D Shapes

How do we fill shapes?

Solid Fill

Pattern Fill

Texture Fill

Filling 2D Shapes (cont)


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


(cont)

A digital outline and a seed point indicating the


interior

Digital outline and seed


points

Filled outlines

Representing Filled Shapes


(cont)

An implicit function representing a shapes


interior

The inside of a
circle of radius R

The inside of a unit


square

Representing Filled Shapes


(cont)

An equation or list of edges representing a


shapes 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 (1,1)

All points to the right of all of the (ordered) edges

Rule for interior points

Representing Filled Shapes


(cont)

Ordered edges

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 (1,1)

All points to the right of all of the (ordered) edges

Rule for interior points

Representing Filled Shapes


(cont)

Edge list

Filled shape

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 (1,1)

All points to the right of all of the (ordered) edges

Rule for interior points

Fill Options
How

to set pixel colors for points inside


the shape?

Solid Fill

Pattern Fill

Texture 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 users
intent

Seed Fill

Basic algorithm
select seed pixel
initialize a fill list to contain seed pixel
while (fill list not empty) {
pixel get next pixel from fill list
setPixel(pixel)
for (each of the pixels 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

Which neighbors should be


tested?

Using 4-connected and 8-connected neighbors


gives different results

Magnified area

Original boundary

Fill using 4-connected neighbors

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

Original image and seed point

Image after 4-connected boundary


fill

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 pixels 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 dont 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 (cont)

Use coherence (logical connection) to improve


performance and reduce memory requirements

Neighbor coherence

Span coherence

Neighboring pixels tend to be in the same region


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 (cont)

Span-based seed fill algorithm

Seed point

Improving Performance (cont)

Span-based seed fill algorithm

Start from the seed point


Fill the entire horizontal span of pixels inside the region

Seed point

Improving Performance (cont)

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 (cont)

Span-based seed fill algorithm

Repeat until the fill list is empty

Improving Performance (cont)

Span-based seed fill algorithm

Repeat until the fill list is empty

Improving Performance (cont)

Span-based seed fill algorithm

Repeat until the fill list is empty

Improving Performance (cont)

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)

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

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

Even-odd Parity 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

Non-zero Winding Number 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

Non-zero Winding Number 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

Non-zero Winding Number Rule

To determine the winding number at a point P

Initialize the winding number to zero and draw a line (e.g.


horizontal) from P to infinity
If the line crosses an edge directed bottom to up

Add 1 to the winding number

If the line crosses an edge directed top to bottom

Subtract 1 from the winding number

Inside-Outside Tests

The non-zero winding number rule and the even-odd parity


rule can give different results for general polygons

When polygons self intersect


When polygons have interior holes

Even-odd parity

Non-zero winding

Inside-Outside Tests

Standard polygons

Standard polygons (e.g. triangles, rectangles, octagons) do not


self intersect and do not contain holes
The non-zero winding number rule and the even-odd parity rule
give the same results for standard polygons

Shared Vertices

Edges share vertices

If the line drawn for the fill rule intersects a vertex, the
edge crossing would be counted twice

This yields incorrect and inconsistent even-odd parity


checks and winding numbers

Line pierces the outline


- Should count as one crossing

Line grazes the outline


- Should count as no crossings

Dealing with Shared Vertices


Check the vertex type (piercing or grazing)

1.

If the vertex is between two upwards or two downwards edges, the line
pierces the edge

Process a single edge crossing

If the vertex is between an upwards and a downwards edge, the line


grazes the vertex

Dont process any edge crossings

Vertex between two upwards edges


- Process a single crossing

Vertex between upwards and downwards edges


- Process no crossings

Dealing with Shared Vertices


2.

Ensure that the line does not intersect a vertex


Use a different line if the first line intersects a vertex

Could be costly if you have to try several lines

If using horizontal scan line for the inside-outside test

Preprocess edge vertices to make sure that none of them fall on a scan line

Add a small floating point value to each vertex y-position

Filling Polygons via Boundary


Fill

Polygons are defined by their edges

Filling Polygons via Boundary


Fill

Polygons are defined by their edges

Use a line drawing algorithm to draw edges of the polygon


with a boundary color

Filling Polygons via Boundary


Fill

Polygons are defined by their edges

Fill the inside of the polygon using a boundary fill

Filling Polygons via Boundary


Fill

Problems

1. Pixels are drawn on both sides of the line

The polygon contains pixels outside of the outline


Polygons with shared edges will have overlapping
pixels

2. Efficiency

Drawing outlines and then filling can be less efficient


that combining the edge drawing and filling in one step

Raster-Based Filling

Fill polygons in raster-scan order

Fill spans of pixels inside the polygon along each horizontal scan
line

More efficient addressing by accessing spans of pixels


Only test pixels at the span endpoints

Raster-Based Filling

For each scan line

Determine points where the scan line intersects the


polygon

Raster-Based Filling

For each scan line

Set pixels between intersection points (using a fill rule)

Even-odd parity rule: set pixels between pairs of intersections


Non-zero winding rule: set pixels according to the winding number

Raster-Based Filling

Basic algorithm (with even-odd parity rule)


for (each scan line, j) {
find the x-intersections between the scan line and each edge
sort the x-intersections by increasing x-value
for (each pair of intersection points, x1 and x2) {
while (x1 < i < x2) setPixel(i, j, fillColor)
}
}

Conventions for Setting Edge


Pixels

Adjacent polygons share edges

When rendered, some pixels along the edges are shared


Need to know what color to use for shared edge pixels

Conventions for Setting Edge


Pixels

If we draw all edge pixels for each polygon

Shared pixels will be rendered more than once

If setPixel() overwrites the current pixel, the last polygon drawn


will look larger

Green triangle written last

Conventions for Setting Edge


Pixels

If we draw all edge pixels for each polygon

Shared pixels will be rendered more than once

If setPixel() overwrites the current pixel, the last polygon drawn


will look larger

Blue triangle written last

Conventions for Setting Edge


Pixels

If we draw all edge pixels for each polygon

Shared pixels will be rendered more than once

If setPixel() blends the background color with the foreground


color, shared edge pixels will have a blended color

Edge color different than either triangle

Conventions for Setting Edge


Pixels

If we draw none of the edge pixels

Only interior pixels are drawn

Gaps appear between polygons and the background shows


through

Gaps between adjacent triangles

You might also like