cs 376 introduction to computer graphics 02 / 05 / 2007 instructor: michael eckmann

36
CS 376 Introduction to Computer Graphics 02 / 05 / 2007 Instructor: Michael Eckmann

Post on 19-Dec-2015

218 views

Category:

Documents


3 download

TRANSCRIPT

CS 376Introduction to Computer Graphics

02 / 05 / 2007

Instructor: Michael Eckmann

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Today’s Topics• Questions?• a little about an Ellipse drawing algorithm• Antialiasing• Polygons• Determining if a point is in the interior of a polygon• Polygon filling algorithm• tiling• halftoning• dithering• antialiasing polygons

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Initial decision variable value• The initial value of p in the Bresenham line algorithm

is calculated by using the equation for p with (x0, y

0)

• Derivation:

pk = 2dyx

k – 2dxy

k + c

where c = 2dy + dx(2b-1)

and since yk=mx

k+b, b = y

k–mx

k and m = dy/dx

pk = 2dyx

k – 2dxy

k + 2dy + dx(2(y

k– (dy/dx)x

k)– 1)

multiplied out:

pk = 2dyx

k – 2dxy

k + 2dy + 2dxy

k– 2dyx

k – dx

= 2dy – dx

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Circle Algorithms• There's a figure in the text book (figure 3-20) and it looks to me like the red circle

line is drawn incorrectly but the pixels are correct. It is showing the center of the circle at the bottom left corner of the 0,0 pixel box, but it should be in the center of the 0,0 pixel box.

• I noticed it because when x=3, based on the drawn red circle, the algorithm would “turn on” (3,9) not (3,10), because the midpoint is clearly outside the red circle there.

• I didn't verify it, but I trust the calculations in the table which says that p2 = -1 which

would be inside the circle.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Ellipse Algorithm• We can generalize the circle algorithm to generate ellipses but

with only 4-way symmetry.

• The slope of the ellipse changes from > -1 to < -1 in one quadrant so that we will have to switch from – unit samples along the x-axis and calculate y– to unit samples along the y-axis and calculate x

• I'm not as concerned about the details of ellipses as I am with

you understanding the details of the line and circle algorithms.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Ellipse Algorithms

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Ellipse Algorithms

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Antialiasing

• Aliasing is the distortion we see when we undersample. The

jaggedness stairstep quality of lines is an example of aliasing.

• Solutions:– Higher addressability

• e.g. Move from a 800x600 grid to a 1280x1024 grid and your lines will look smoother.

– When keeping fixed addressability --- then we can change the intensity of the pixels being turned on. And instead of turning on one pixel at full intensity, we appropriately weight the intensities of two pixels at each step to cause the illusion of a point at some intermediate location between the two pixel centers.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Antialiasing

• Example on the board.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Antialiasing

• Any ideas on how we could adapt Bresenham's line algorithm to

do antialiased lines?

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Antialiasing

• Any ideas on how we could adapt Bresenham's line algorithm to

do antialiased lines?

• dlower

+ dupper

= 1

• The upper pixel's intensity

can be set to be dlower

• The lower pixel's intensity

can be set to be dupper

• When the line passes exactly through the center of a pixel, that

pixel's intensity is 1 and the other is 0 (off).

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Antialiasing• Supersampling is a technique to treat the screen as a finer grid than is

actually addressable and plot the points by turning on multiple points in

the finer grid. Then when ready to display --- use the finer grid points to

determine the intensities of the pixels of the actual screen.

• Example --- divide each actual addressable pixel into 9 (3x3) finer

subpixels. Draw a Bresenham line on the subpixels. Then base the

intensity of actual pixel on how many of the 9 subpixels would be on. – 3 subpixels is max, so that's full intensity– 2 subpixels could cause the pixel to be at 2/3 intensity– 1 subpixel on could cause the pixel to be at 1/3 intensity– 0 would be off

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Antialiasing

• Alternately, we could use a weighting mask that would give more

weight to the center subpixel of the 3x3 grid1 2 1

2 4 2

1 2 1

• Another alternative is to treat the line as a rectangle of width 1

pixel & draw it on the finer grid (w/ 9 subpixels per pixel). Then

how many of the 9 subpixels are on (on = bottom left corner of

subpixel is inside the rectangle) determines the intensity of pixel

(9 = full intensity, 8 = 8/9 intensity, etc.) This is better than the

three intensity levels of the other supersampling method.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Antialiasing• Area sampling is a technique that computes areas of overlap of

each pixel with the object (e.g. line or polygon) to be displayed.

• This is similar to the supersampling method described last

(treating the line as a rectangle), but instead of just 9 different

intensities, let the intensity of a pixel be the area of the rectangle

that overlaps the pixel / the area of the whole pixel.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Antialiasing• There are other techniques to do antialiasing --- filtering

techniques. These are similar to the discrete mask two slides ago,

except they work with a continuous function to determine the

weightings of the pixels. Examples on the next slide show a box, a

cone and a guassian. The volumes of these are normalized to 1

and to determine the weighting of a pixel we integrate the function

over the pixel surface. Since integrating is expensive (in time)

lookup tables can be used.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Antialiasing

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Antialiasing also helps with ...• Notice: without antialiasing, compare a line with slope = 1 made

up of n pixels and a line with slope = 0 made up of n pixels.

• The slope = 1 line is SQRT(2) longer but is made up of the same

number of pixels. What do you think is the visual effect of this?

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Antialiasing helps total intensity• See figures 4-51 & 4-52 in text.

• In addition to lines looking straighter, when using the antialiasing

technique that treats lines as having some finite width, lines of

different angles will not have different total intensities.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Polygons• 3 or more vertices describe a polygon. The vertices are

connected with line segments (called an edge, or a side). Each

edge can only have endpoints in common with any other edge.

• Definition of convex polygon – Def 1: All interior angles are < 180 degrees– Def 2: The interior lies completely on 1 side of the infinite

extension of any edge.– Def 3: If we select any two interior points, the line segment

joining them is also fully in the interior of the polygon

• Definition of concave polygon– Not convex.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Polygons• Degenerate polygons are

– Those with 3 or more collinear vertices– Those with repeated vertices– Etc.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Polygon interior points• A common operation is to determine if a point is in the interior of

a polygon or not.

• One way to do it is, for some point, draw a horizontal line from

that point to a distant point outside the possible area of the

polygon and count how many times the horizontal line crosses

edges of the polygon.

• If the line crosses an odd number of edges, then it is an interior

point. If it crosses an even number of edges, then it is exterior.

• Example on board.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Polygon interior points• What happens when the horizontal line crosses a vertex. Should it

be counted as 1 or 2?

• Example on board.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Polygon interior points• What happens when the horizontal line crosses a vertex. Should it

be counted as 1 or 2?

• If the vertex is a local maximum or a local minimum then count it

as 2. Otherwise count it as 1.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Polygon fill areas• Polygons in OpenGL are specified by vertices. It is good to get

into the habit now that you specify the vertices in

counterclockwise order.

• The reason for this is, when we do some things later this semester

like displaying 3D objects, we're going to care about which side

(face) of the polygon is visible.

• The front face of a polygon is visible when it's vertices are in

counterclockwise order. We'll know if we're seeing the back face

of a polygon if they are in clockwise order.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Polygon fill areas• To do a scanline fill of a polygon (see figure 4-20).

– Determine the intersections (crossings) of the horizontal line (y=c) with the edges (y=mx + b) of the polygon.

– Sort the crossings (x coordinates) from low to high (left to right).

– There will be an even number of crossings, so draw horizontal lines between the first two crossings, then the next 2 and so on.

– If the scanline goes through a vertex• Add the crossing to the list twice if it's a local max or min.• Add the crossing only once otherwise.

• Horizontal edges of a polygon can be ignored (not turned on.)

• Example on board.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Polygon fill areas• Another way to determine how many to count if the scanline goes

through a vertex• If the two edges are on the same side of the scanline, then

add it twice.• If the two edges are on different sides of the scanline, then

add it once.

• To check for this, we can compare the y coordinates of the 3

vertices in question (draw on board) in either clockwise or

counterclockwise fashion– If all 3 are monotonically increasing ( y

1>y

2 => f(y

1) >= f(y

2))or

all 3 are monotonically decreasing then the two edges are on different sides.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Polygon fill areas• Edge coherence properties can be used to speed up the calculation of the

crossings of the scanline and edges. The crossing x-coordinate of one

scanline with an edge differs from the crossing of the x-coordinate of the

next scanline only by 1/m as seen below.

• Assuming we're processing the fill from bottom to top and the y's

increase as we go up, – Assume scan line y

k crosses an edge at (x

k , y

k ) and y

k+1 crosses at

(xk+1

, yk+1

)

– m = (yk+1

– yk) / (x

k+1 – x

k )

– (yk+1

– yk) = 1, so, m = 1 / (x

k+1 – x

k ) and solve for x

k+1

– So, scan line yk+1

crosses that edge at (xk + 1/m, y

k )

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Polygon fill areas• Efficient polygon filling

– 1) proceed around edges in a clockwise or counterclockwise fashion– 2) store each edge in an edge table– 3) sort the edges based on the minimum y in the edge– 4) process the scanlines in a bottom to top order– 5) when the current scanline reaches the lower endpoint (with the

min y) of the edge, that edge becomes active– 6) active edges are sorted by their x coordinates (left to right)– During any given scanline non-active edges can be marked as either

finished, or not yet active. Horizontal edges are ignored.

• Example on board.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Polygon fill areas• Masks

– Besides being filled with a solid color, polygons are sometimes filled with patterns. The process of filling an area with a pattern is called tiling.

– Fill patterns can be stored as rectangular arrays. The arrays are called masks and they are applied to the fill area and are usually smaller than the area to be filled.

– The mask needs a starting position within the area to be filled. Starting at this position the mask is replicated both vertically and horizontally.

– If the mask is an m n array, and starting position is (0,0) a pixel at (x, y) will be drawn with the color in mask((x mod n), (y mod m)).

– Example on board.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Polygon fill areas• Section 10.9 Halftoning and dithering

– When there are very few intensity levels available (e.g. 2, black & white) to be displayed, halftoning is a technique that can provide more intensities with the tradeoff in addressability.

– Newspapers show grey level photos by displaying black circles. The black circles vary in size according to how dark that part of the photo should be.

– In graphics systems this halftoning technique is approximated with halftone patterns. Halftone patterns are typically n n squares of pixels where the number of pixels turned on in that pattern correspond to the intensity desired.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Polygon fill areas• How is halftoning a tradeoff between intensities and addressability

(resolution) ?

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Polygon fill areas• Guidelines to creating halftoning patterns

– With halftoning, one thing to be careful about is that the patterns can become apparent. That is undesirable. The intent is to have the viewer see the increase in intensities without noticing unintentional patterns.

– Avoid only horizontal or vertical or diagonal pixels on in the patterns to reduce the possibility of “streaks”.

– Further it is good to approximate the way that newspapers do it --- that is, concentrate on turning on pixels in the center of the pattern at each successive intensity.

– To minimize unintentional patterns to be displayed, we can evolve each successive grid pattern by copying it and turning on an additional pixel.

• See next slide figure 10-40.

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Polygon fill areas

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Polygon fill areas• Dithering

– Dithering refers to techniques for approximating halftones but without reducing addressability (resolution).

– An nn dither matrix Dn is used to detemine if a pixel should

be on or off. – The matrix is filled with the numbers from 0 to n2 – 1– on page 589 (equation 10-49) there's a mistake, it should be the

dither matrix D4

15 7 13 5 3 11 1 912 4 14 6 0 8 2 10

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Polygon fill areas• Example of dither matrix D

4

15 7 13 5 3 11 1 912 4 14 6 0 8 2 10

– For some pixel (x, y) an intensity level I(x,y) between 0 and n2 is desired. Compute i = x mod n and j = y mod n to find which element (i,j) of the matrix D

n to compare to the desired intensity.

– If I(x,y) > Dn(i,j) then the pixel is turned on, otherwise it is not.

– This has the effect of different intensities, without reducing resolution. But what gets lost?

Michael Eckmann - Skidmore College - CS 376 - Spring 2007

Antialiasing Polygons• Edges of polygons are lines. Lines (and therefore edges) have aliasing

problems when made discrete. Antialiasing edges of polygons can be

done using similar techniques as were used with lines. One way

described below is the way I described antialiasing Bresenham lines.

• During scanline fill of a polygon, if the edge falls between two pixels on

the scanline, then the intensities of the pixels depend on how close to the

centers of the two pixels the line falls.

• The pixel at (xj, y

k): could be set to have x

j+1 – x and x

j+1

• The pixel at (xj+1

, yk) would then be set to have x – x

j

• Pixels that fall fully within the interior of a polygon are set to full

intensity.