computer graphics - computer action...
TRANSCRIPT
Computer Graphics
Si Lu
Fall 2017
http://web.cecs.pdx.edu/~lusi/CS447/CS447_547_Computer_Graphics.htm
10/25/2017
Last time
o Clipping
2
Today
o Rasterization o In-class Mid-termn November 1n Close-book examn Notes on 1 page of A4 or Letter size paper
3
Where We Stand
o At this point we know how to:n Convert points from local to screen coordinatesn Clip polygons and lines to the view volume
o Next thing:n Determine which pixels to fill for any given point,
line or polygon
4
Drawing Pointso When points are mapped into window coordinates,
they could land anywhere – not just at a pixel centero Solution is the simple, obvious one
n Map to window spacen Fill the closest pixeln Can also specify a radius – fill a square of that size, or fill a
circleo Square is faster
5
Drawing Points (2)
6
1
2 3 4 5 6 7 81
2
3
4
5
6
7
Drawing Lineso Task: Decide which pixels to fill (samples to use) to
represent a lineo We know that all of the line lies inside the visible
region (clipping gave us this!)
7
Line Drawing Algorithmso Consider lines of the form y=m x + c, where m=y/x,
0<m<1, integer coordinatesn All others follow by symmetry, modify for real numbers
o Variety of slow algorithms (Why slow?):n step x, compute new y at each step by equation, rounding:n step x, compute new y at each step by adding m to old y,
rounding:
8
)( ,1 111 bmxroundyxx iiii
)( ,1 11 myroundyxx iiii
Bresenham’s Algorithm Overviewo Aim: For each x, plot the pixel whose y-value is closest to
the lineo Given (xi,yi), must choose from either (xi+1,yi+1) or (xi+1,yi)o Idea: compute a decision variable
n Value that will determine which pixel to drawn Easy to update from one pixel to the next
o Bresenham’s algorithm is the midpoint algorithm for linesn Other midpoint algorithms for conic sections (circles, ellipses)
9
Midpoint Methods
10
yi
yi+1
xi+1
• Consider the midpoint between (xi+1,yi+1) and (xi+1,yi)• If it’s above the line, we choose (xi+1,yi), otherwise we choose
(xi+1,yi+1)
xi
Choose (xi+1,yi)
yi
yi+1
xi+1xi
Choose (xi+1,yi+1)
Midpoint Decision Variableo Write the line from (x1, y1) to (x2, y2) in implicit form:
n Assume x1 <= x2
n ∆x= x2 - x1, ∆y= y2 - y1
o The value of F(x,y) tells us where points are with respect to the linen F(x,y)=0: the point is on the linen F(x,y)>0: The point is above the linen F(x,y)<0: The point is below the line
o The decision variable is the value of di = 2F(xi+1,yi+0.5)n The factor of two makes the math easier
11
11, yxxyxyyxcbyaxyxF
What Can We Decide?
12
o di positive=> next point at (xi+1,yi)o di negative => next point at (xi+1,yi+1)o At each point, we compute di and decide
which pixel to drawo How do we update it? What is di+1?
xyxxyxyxyd iii 112)1(22
Updating The Decision Variable
13
o dk+1 is the old value, dk, plus an increment:
o If we chose yi+1=yi+1:
o If we chose yi+1=yi:
o What is d1 (assuming integer endpoints)?o Notice that we don’t need c any more
)( 11 kkkk dddd
xydd kk 221
ydd kk 21
yxd 21
Bresenham’s Algorithm
14
o For integers, slope between 0 and 1:n x=x1, y=y1, d= dx -2dy, draw (x, y)n until x=x2
o x=x+1o If d<0 then { y=y+1, draw (x, y), d=d-2y + 2x }o If d>0 then { y=y, draw (x, y), d=d-2y }
o Compute the constants (2y-2x and 2y ) once at the startn Inner loop does only adds and comparisons
o For floating point, initialization is harder, x and y will be floating point, but still no rounding required
Example: (2,2) to (7,6)
15
x=5, y=4x y d
1
2 3 4 5 6 7 81
2
3
4
5
6
7
2 2 -3
Example: (2,2) to (7,6)
16
x=5, y=4x y d
1
2 3 4 5 6 7 81
2
3
4
5
6
7
2 2 -33 3 -1
Example: (2,2) to (7,6)
17
x=5, y=4x y d
1
2 3 4 5 6 7 81
2
3
4
5
6
7
2 2 -33 3 -14 4 1
Example: (2,2) to (7,6)
18
x=5, y=4x y d
1
2 3 4 5 6 7 81
2
3
4
5
6
7
2 2 -33 3 -14 4 15 4 -7
Example: (2,2) to (7,6)
19
x=5, y=4x y d
1
2 3 4 5 6 7 81
2
3
4
5
6
7
2 2 -33 3 -14 4 15 4 -76 5 -5
Example: (2,2) to (7,6)
20
x=5, y=4x y d
1
2 3 4 5 6 7 81
2
3
4
5
6
7
2 2 -33 3 -14 4 15 4 -76 5 -57 6 -3
Filling Triangles
21
1
2 3 4 5 6 7 81
2
3
4
5
6
7
Filling Triangles
22
1
2 3 4 5 6 7 81
2
3
4
5
6
7
Algorithm
o Decide which pixels to fill (samples to use) to represent a triangle?
o Calculate the color for each pixel?
23
Barycentric coordinates
24
P0=(x0, y0)
P1=(x1, y1)P2=(x2, y2)
1,,01
PPPP 210
Barycentric coordinates
25
0110011001
2002200220
1221122112
220101
112020
001212
)()(,)()(,
)()(,
,/,,/,,/,
yxyxyxxxyyyxfyxyxyxxxyyyxfyxyxyxxxyyyxf
yxfyxfyxfyxfyxfyxf
Rasterizing Triangle
o ymin=min(y0, y1, y2), ymax=max(y0, y1, y2)o xmin=min(x0, x1, x2), xmax=max(x0, x1, x2)o for y=ymin to ymax
n for x=xmin to xmax
o calculate o if
draw (x, y) with color c
26
and,,1and,,0 210 cccc
Anti-Aliasingo Recall: We can’t sample and then accurately
reconstruct an image that is not band-limitedn Infinite Nyquist frequencyn Attempting to sample sharp edges gives “jaggies”, or stair-
step lines
o Solution: Band-limit by filtering (pre-filtering)n What sort of filter will give a band-limited result?
o In practice, difficult to do for graphics rendering
27
Alpha-based Anti-Aliasing
28
o Set the of a pixel to simulate a thick linen The pixel gets the line color, but
with <=1
o This supports the correct drawing of primitives one on top of the othern Draw back to front, and
composite each primitive over the existing image
n Only some hidden surface removal algorithms support it
1/8
1/8
.914
.914
.914
1/8
1/8
1/4
1/4
1/41/40 0
00
0000
0
0
0
0 0 0
Calculating
29
o Consider a line as having thickness (all good drawing programs do this)
o Consider pixels as little squares
o Set according to the proportion of the square covered by the line
o The sub-pixel coverage interpretation of
1/8
1/8
.914
.914
.914
1/8
1/8
1/4
1/4
1/41/4
0 0
00
0000
0
0
0
0 0 0
Weighted Sampling
30
o Instead of using the proportion of the area covered by the line, use convolution to do the samplingn Equivalent to filtering the line
then point sampling the result
o Place the “filter” at each pixel, and integrate product of pixel and line
o Common filters are cones (like Bartlett) or Gaussians
Post-Filtering (Supersampling)
31
o Sample at a higher resolution than required for display, and filter image downn Easy to implement in hardwaren Typical is 2x2 sampling per pixel, with
simple averaging to get finalo What kind of filter?
o More advanced methods generate different samples (eg. not on regular grid) and filter properlyn Issues of which samples to take, and how
to filter them
Next Time
o Hidden Surface Removalo
32