Ch_3-_Part_II[1]

advertisement
Chapter Three
Part II
Output Primitives
CS 380
CH 3-P2 - 1
Outline
• In this chapter we will cover the following topics:
Part I:
– Line drawing algorithms.
– Circle generating algorithms
Part II:
– Setting frame-buffer values
– Pixel addressing and object geometry.
– Filled-Area primitives. (This section is from chapter four)
• This chapter will show the discrete nature for computer
graphics.
CS 380
CH 3-P2 - 2
Setting frame-buffer values
• After generating a line or circle using scan conversion, we
need to know where is the specified pixels are stored in the
frame buffer.
• Frame buffer is stored in memory as an addressable array
and stored row by row.
• Pixels are labeled from (0, 0) the lower left corner to
(xmax,ymax) the top right corner.
CS 380
CH 3-P2 - 3
Row by Row mapping
CS 380
CH 3-P2 - 4
Setting frame-buffer values (cont.)
•
For a bilevel system (1 bit per pixel),the Frame-Buffer bit address
for pixel position (x, y) is calculated as:
1. addr(x, y) = addr (0,0) + y (xmax +1) + x
2. addr(x + 1, y) = addr(x, y) + 1
3. addr(x + 1, y + 1) = addr(x, y) + xmax + 2
CS 380
CH 3-P2 - 5
Setting frame-buffer values (cont.)
• Example:
Find the address of the pixel (6,5), where the address of (0,0) =500,
xmax=12, and ymax = 10.
addr(x, y) = addr (0,0) + y(xmax +1) + x
addr(6, 5) = 500 + 5(12 + 1) + 6 = 571
addr(7, 5) = addr(6, 5) + 1 = 572
addr(7, 6) = addr(6, 5) + xmax + 2 = 585
CS 380
CH 3-P2 - 6
Pixel addressing and object geometry
• When an object is scan converted into the frame buffer, the
input description is transformed to pixel coordinates.
• So, the displayed image may not correspond exactly with the
relative dimensions of the input object.
• To preserve the specified geometry of world objects, we need
to compensate for the mapping of mathematical input points
to finite pixel area, we use one of the two ways:
CS 380
CH 3-P2 - 7
Pixel addressing and object geometry (cont.)
1) Adjust the dimensions of displayed objects to account for the
amount of overlap of pixel areas with the object boundaries.
(i.e. a rectangle with 40 cm width, will be displayed in 40 pixel)
2) Map world coordinates onto screen positions between pixels, so that
we align objects boundaries with pixel boundaries instead of pixel
centers.
CS 380
CH 3-P2 - 8
Pixel addressing and object geometry (cont.)
Screen Grid Coordinates:
An alternative to addressing
display positions in terms of
pixel centers is to reference
screen coordinates with
respect to the grid of
horizontal and vertical pixel
boundary lines spaced one
unit a part.
CS 380
CH 3-P2 - 9
Pixel addressing and object geometry (cont.)
• Screen coordinate
position is then the pair of
integer values identifying
a grid intersection
position between two
pixels.
• For example, the
mathematical line path for
a polyline with screen
endpoints (0, 0), (5, 2),
and (1,4) is shown
beside.
CS 380
CH 3-P2 - 10
Pixel addressing and object geometry (cont.)
• With the coordinate origin
at the lower left of the
screen, each pixel area
can be referenced by the
integer grid coordinates
of its lower left corner.
• The following figure
illustrates this convention
for an 8 by 8 section of a
raster, with a single
illuminated pixel at screen
coordinate position (4, 5).
CS 380
CH 3-P2 - 11
Pixel addressing and object geometry (cont.)
•
In general, we identify the area occupied by a pixel with
screen coordinates ( x, y) as the unit square with diagonally
opposite corners at (x, y) and ( x + 1, y + 1 ).
•
This pixel addressing scheme has several advantages:
1. It avoids half-integer pixel boundary
2. It facilitates precise object representations.
3. Simplifies the processing involved in many scan
conversion algorithms and in other raster procedures
CS 380
CH 3-P2 - 12
Pixel addressing and object geometry (cont.)
Notes:
1)
The previous algorithms for drawing line, circle, …etc
are still valid when applied to input positions expressed
as screen grid coordinates.
2)
The decision parameter Pk is a measure of screen
grid separation differences rather than separation
differences from pixel centers.
CS 380
CH 3-P2 - 13
Pixel addressing and object geometry (cont.)
 A circle of radius 5 and center position (10, 10), for instance, would
be displayed by the midpoint circle algorithm using screen grid
coordinate positions.
 But the plotted circle has a diameter of 11, To plot the circle with the
defined diameter of 10, we can modify the circle algorithm to shorten
each pixel scan line and each pixel column.
CS 380
CH 3-P2 - 14
Pixel addressing and object geometry (cont.)
CS 380
CH 3-P2 - 15
Pixel addressing and object geometry (cont.)
CS 380
CH 3-P2 - 16
Filled- Area Primitives

A standard output primitive in general graphics packages is a solidcolor or patterned polygon area.

There are two basic approaches to area filling on raster systems:
1. The scan-line approach
Determine the overlap intervals for scan lines that cross the area.
is typically used in general graphics packages to fill polygons,
circles, ellipses
2. Filling approaches
start from a given interior position and paint outward from this point
until we encounter the specified boundary conditions.
useful with more complex boundaries and in interactive painting
systems.
CS 380
CH 3-P2 - 17
Filled- Area Primitives (cont.)
Scan-Line Fill Algorithm:
 For each scan line crossing a polygon, the area-fill
algorithm locates the intersection points of the scan line
with the polygon edges.
 These intersection points are then sorted from left to
right, and the corresponding frame-buffer positions
between each intersection pair are set to the specified fill
color.
CS 380
CH 3-P2 - 18
Filled- Area Primitives (cont.)
CS 380
CH 3-P2 - 19
Filled- Area Primitives (cont.)
 Calculations performed in scan-conversion and other
graphics algorithms typically take advantage of various
coherence properties of a scene that is to be displayed.
 Coherence is simply that the properties of one part of a
scene are related in some way to other parts of the
scene so that the relationship can be used to reduce
processing.
 Coherence methods often involve incremental
calculations applied along a single scan line or between
successive scan lines.
CS 380
CH 3-P2 - 20
Inside-Outside Tests

Area-filling algorithms and other graphics processes
often need to identify interior regions of objects.

To identify interior regions of an object graphics
packages normally use either:
1. Odd-Even rule
2. Nonzero winding number rule
CS 380
CH 3-P2 - 21
Inside-Outside Tests
Odd-Even rule (Odd Parity Rule, Even-Odd Rule):
1. draw a line from any position P to a distant point outside
the coordinate extents of the object and counting the
number of edge crossings along the line.
2. If the number of polygon edges crossed by this line is
odd then
P is an interior point.
Else
P is an exterior point
CS 380
CH 3-P2 - 22
Inside-Outside Tests
Nonzero Winding Number Rule :
 Counts the number of times the polygon edges wind
around a particular point in the counterclockwise
direction. This count is called the winding number, and
the interior points of a two-dimensional object are
defined to be those that have a nonzero value for the
winding number.
1. Initializing the winding number to 0.
2. Imagine a line drawn from any position P to a distant
point beyond the coordinate extents of the object.
CS 380
CH 3-P2 - 23
Inside-Outside Tests
Nonzero Winding Number Rule :
3. Count the number of edges that cross the line in each
direction. We add 1 to the winding number every time
we intersect a polygon edge that crosses the line from
right to left, and we subtract 1 every time we intersect
an edge that crosses from left to right.
4. If the winding number is nonzero, then
P is defined to be an interior point
Else
P is taken to be an exterior point.
CS 380
CH 3-P2 - 24
CH 3-P2 - 25
Boundary-Fill Algorithm
 Start at a point inside a region and paint the interior
outward toward the boundary. If the boundary is
specified in a single color, the fill algorithm proceeds
outward pixel by pixel until the boundary color is
encountered.
 It is useful in interactive painting packages, where
interior points are easily selected.
 The inputs of the this algorithm are:
•
•
•
Coordinates of the interior point (x, y)
Fill Color
Boundary Color
CS 380
CH 3-P2 - 26
Boundary-Fill Algorithm (cont.)
 Starting from (x, y), the algorithm tests
neighboring pixels to determine whether they
are of the boundary color. If not, they are painted
with the fill color, and their neighbors are tested.
This process continues until all pixels up to the
boundary have been tested.

There are two methods for proceeding to
neighboring pixels from the current test position:
CS 380
CH 3-P2 - 27
Boundary-Fill Algorithm (cont.)
1. The 4-connected
method.
2. The 8-connected
method.
CS 380
CH 3-P2 - 28
Boundary-Fill Algorithm (cont.)
void boundaryFill4 (int x, int y, int fillColor, int borderColor)
{ int interiorColor;
/* set current color to fillColor, then perform following operations. */
getPixel (x, y, interiorColor);
if ( (interiorColor != borderColor) && (interiorColor != fillColor) )
{
setPixel (x, y); // set color of pixel to fillColor
boundaryFill4 (x + 1, y, fillColor, borderColor);
boundaryFill4 (x - 1, y, fillColor, borderColor);
boundaryFill4 (x, y + 1, fillColor, borderColor);
boundaryFill4 (x, y - 1, fillColor, borderColor);
}
}
CS 380
CH 3-P2 - 29
Boundary-Fill Algorithm (cont.)
CS 380
CH 3-P2 - 30
Boundary-Fill Algorithm (cont.)
 4-connected and 8-connected methods involve heavy
recursion which may consume memory and time. More
efficient methods are used. These methods fill
horizontal pixel spans across scan line. This called a
Pixel Span method.
 We need only stack a beginning position for each
horizontal pixel span, instead of stacking all unprocessed
neighboring positions around the current position, where
spans are defined as the contiguous horizontal string of
positions.
CS 380
CH 3-P2 - 31
Pixel Span Method
•
•
Start from the initial interior point, then fill in the
contiguous span of pixels on this starting scan line. Then
we locate and stack starting positions for spans on the
adjacent scan lines, where spans are defined as the
contiguous horizontal string of positions bounded by
pixels displayed in the area border color.
At each subsequent step, we unstack the next start
position and repeat the process. An example of how
pixel spans could be filled using this approach is
illustrated for the 4-connected fill region in the following
figure.
CS 380
CH 3-P2 - 32
Pixel Span Method (cont.)
CS 380
CH 3-P2 - 33
Pixel Span Method (cont.)
CS 380
CH 3-P2 - 34
Flood-Fill Algorithm
 Sometimes we want to fill in (or
recolor) an area that is not defined
within a single color boundary. We
can paint such areas by replacing a
specified interior color instead of
searching for a boundary color
value. This approach is called a
flood-fill algorithm.
CS 380
CH 3-P2 - 35
Flood-Fill Algorithm (cont.)
 We start from a specified interior point (x, y) and reassign all pixel
values that are currently set to a given interior color with the desired
fill color.
 If the area we want to paint has more than one interior color, we can
first reassign pixel values so that all interior points have the same
color. Using either a 4-connected or 8-connected approach, we then
step through pixel positions until all interior points have been
repainted.
CS 380
CH 3-P2 - 36
Flood-Fill Algorithm (cont.)
void floodFill4 (int x, int y, int fillColor, int interiorColor)
{ int color;
/* set current color to fillColor, then perform following operations. */
getPixel (x, y, color);
if (color = interiorColor)
{
setPixel (x, y); // set color of pixel to fillColor
floodFill4 (x + 1, y, fillColor, interiorColor);
floodFill4 (x - 1, y, fillColor, interiorColor);
floodFill4 (x, y + 1, fillColor, interiorColor);
floodFill4 (x, y - 1, fillColor, interiorColor);
}
}
CS 380
CH 3-P2 - 37
Download