Angel CG23
Angel CG23
Angel CG23
Ed Angel
Professor of Computer Science,
Electrical and Computer
Engineering, and Media Arts
University of New Mexico
2
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
Objectives
Survey Line Drawing Algorithms
- DDA
- Bresenham
3
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
Rasterization
Rasterization (scan conversion)
- Determine which pixels that are inside primitive
specified by a set of vertices
- Produces a set of fragments
- Fragments have a location (pixel location) and
other attributes such color and texture
coordinates that are determined by interpolating
values at vertices
Pixel colors determined later using color,
texture, and other vertex properties
4
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
Scan Conversion of Line
Segments
Start with line segment in window
coordinates with integer values for
endpoints
Assume implementation has a
write_pixel function
y = mx + h
x
y
m
5
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
DDA Algorithm
Digital Differential Analyzer
- DDA was a mechanical device for numerical
solution of differential equations
- Line y=mx+ h satisfies differential equation
dy/dx = m = y/x = y
2
-y
1
/x
2
-x
1
Along scan line x = 1
For(x=x1; x<=x2,ix++) {
y+=m;
write_pixel(x, round(y), line_color)
}
6
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
Problem
DDA = for each x plot pixel at closest y
- Problems for steep lines
7
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
Using Symmetry
Use for 1 m 0
For m > 1, swap role of x and y
- For each y, plot closest x
8
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
Bresenhams Algorithm
DDA requires one floating point addition per step
We can eliminate all fp through Bresenhams
algorithm
Consider only 1 m 0
- Other cases by symmetry
Assume pixel centers are at half integers
If we start at a pixel that has been written, there
are only two candidates for the next pixel to be
written into the frame buffer
9
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
Candidate Pixels
1 m 0
last pixel
candidates
Note that line could have
passed through any
part of this pixel
10
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
Decision Variable
-
d = x(b-a)
d is an integer
d > 0 use upper pixel
d < 0 use lower pixel
11
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
Incremental Form
More efficient if we look at d
k
, the value of
the decision variable at x = k
d
k+1
= d
k
2y, if d
k
<0
d
k+1
= d
k
2(y- x), otherwise
For each x, we need do only an integer
addition and a test
Single instruction on graphics chips
12
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
Polygon Scan Conversion
Scan Conversion = Fill
How to tell inside from outside
- Convex easy
- Nonsimple difficult
- Odd even test
Count edge crossings
- Winding number
odd-even fill
13
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
Winding Number
Count clockwise encirclements of point
Alternate definition of inside: inside if
winding number 0
winding number = 2
winding number = 1
14
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
Filling in the Frame Buffer
Fill at end of pipeline
- Convex Polygons only
- Nonconvex polygons assumed to have been
tessellated
- Shades (colors) have been computed for
vertices (Gouraud shading)
- Combine with z-buffer algorithm
March across scan lines interpolating shades
Incremental work small
15
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
Using Interpolation
span
C
1
C
3
C
2
C
5
C
4
scan line
C
1
C
2
C
3
specified by glColor or by vertex shading
C
4
determined by interpolating between C
1
and C
2
C
5
determined by interpolating between C
2
and C
3
interpolate between C
4
and C
5
along span
16
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
Flood Fill
Fill can be done recursively if we know a seed
point located inside (WHITE)
Scan convert edges into buffer in edge/inside
color (BLACK)
flood_fill(int x, int y) {
if(read_pixel(x,y)= = WHITE) {
write_pixel(x,y,BLACK);
flood_fill(x-1, y);
flood_fill(x+1, y);
flood_fill(x, y+1);
flood_fill(x, y-1);
} }
17
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
Scan Line Fill
Can also fill by maintaining a data structure of all
intersections of polygons with scan lines
- Sort by scan line
- Fill each span
vertex order generated
by vertex list
desired order
18
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
Data Structure
19
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
Aliasing
Ideal rasterized line should be 1 pixel wide
Choosing best y for each x (or visa versa)
produces aliased raster lines
20
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
Antialiasing by Area
Averaging
Color multiple pixels for each x depending on
coverage by ideal line
original
antialiased
magnified
21
Angel: Interactive Computer Graphics 5E Addison-Wesley 2009
Polygon Aliasing
Aliasing problems can be serious for
polygons
- Jaggedness of edges
- Small polygons neglected
- Need compositing so color
of one polygon does not
totally determine color of
pixel
All three polygons should contribute to color