44
CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44 Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

Embed Size (px)

Citation preview

Page 1: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014

Scan ConversionCS123

1 of 44

Page 2: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014

Line Drawing First problem statement: Draw a line on a raster screen between two

points Why is this a difficult problem?

What is “drawing” on a raster display? What is a “line” in raster world? Efficiency and appearance are both important

Problem Statement Given two points P and Q in XY plane, both with integer coordinates,

determine which pixels on a raster screen should be on in order to best approximate a unit-width line segment starting at P and ending at Q

2 of 44

Scan Converting Lines

Page 3: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014

Final step of rasterization (process of taking geometric shapes and converting them into an array of pixels stored in the framebuffer to be displayed) – converting from “random scan”/vector specification to a raster scan where we specify which pixels are on based on a stored array of pixels

Takes place after clipping occurs All graphics packages do this at end of the rendering pipeline Takes triangles (or higher-order primitives) and maps them to pixels on

screen For 3D rendering also takes into account other processes, like lighting

and shading, but we’ll focus first on algorithms for line scan conversion3 of 44

What is Scan Conversion?

Page 4: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014

Special cases: Horizontal Line:

Draw pixel P and increment x coordinate value by 1 to get next pixel. Vertical Line:

Draw pixel P and increment y coordinate value by 1 to get next pixel. Diagonal Line:

Draw pixel P and increment both x and y coordinate by 1 to get next pixel. What should we do in the general case?

For slope <= 1, increment x coordinate by 1 and choose pixel on or closest to line. Slopes in other octants by reflection (e.g., in second octant, increment Y)

But how do we measure “closest”?

4 of 44

Scan-converting a Line: Finding the next pixel

Page 5: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014

Why can we use vertical distance as a measure of which point (pixel center) is closer? … because vertical distance is

proportional to actual distance Similar triangles show that true

distances to line (in blue) are directly proportional to vertical distances to line (in black) for each point

Therefore, point with smaller vertical distance to line is closest to line

5 of 44

Vertical Distance

(𝑥1 , 𝑦1)

(𝑥2 , 𝑦 2)

Page 6: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 6 of 44

Strategy 1 – Incremental Algorithm (1/3)

Page 7: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 7 of 44

Strategy 1 – Incremental Algorithm (2/3)

(𝑥 𝑖+1 ,𝑅𝑜𝑢𝑛𝑑 ( 𝑦 𝑖+𝑚))

(𝑥 𝑖 , 𝑦 𝑖)

(𝑥 𝑖 ,𝑅𝑜𝑢𝑛𝑑 (𝑦 𝑖 ))

(𝑥 𝑖+1 , 𝑦 𝑖+𝑚)

Page 8: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 8 of 44

Strategy 1 – Incremental Algorithm (3/3) - Issuesvoid Line(int x0, int y0, int x1, int y1) { int x, y; float dy = y1 – y0; float dx = x1 – x0; float m = dy / dx;

y = y0; for (x = x0; x < x1; ++x) {

WritePixel( x, Round(y) );y = y + m;

}}

Rounding takes time

Since slope is fractional, need special case for vertical lines (dx = 0)

Page 9: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014

Assume that line’s slope is shallow and positive (0 < slope < 1); other slopes can be handled by suitable reflections about principal axes

Call lower left endpoint and upper right endpoint Assume that we have just selected pixel at Next, we must choose between pixel to right (E pixel), or one

right and one up (NE pixel) Let Q be intersection point of line being scan-converted and

vertical line

9 of 44

Strategy 2 – Midpoint Line Algorithm (1/3)

Page 10: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 10 of 44

Strategy 2 – Midpoint Line Algorithm (2/3)

Previous pixel

E pixel

NE pixel

Midpoint MQ

𝑃=(𝑥𝑃 , 𝑦 𝑃)

𝑥=𝑥𝑃+1

Page 11: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014

 

11 of 44

Strategy 2- Midpoint Line Algorithm (3/3)

For line shown, algorithm chooses NE as next pixel.Now, need to find a way to calculate on which side of line midpoint lies

E pixel

NE pixel

𝑀𝑄

Page 12: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014

Line equation as function: Line equation as implicit function:

Avoids infinite slopes, provides symmetry between x and y So from line eqn,

Properties (proof by case analysis): when any point is on line when any point is above line when any point is below line Our decision will be based on value of function at midpoint m= at

12 of 44

General Line Equation in Implicit Form

Page 13: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 13 of 44

Decision Variable

Page 14: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 14 of 44

Incrementing Decision Variable if E was chosen:

Page 15: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 15 of 44

If NE was chosen:

Page 16: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 16 of 44

Summary (1/2)

Page 17: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 17 of 44

Summary (2/2)

Page 18: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014

void MidpointLine(int x0, int y0, int x1, int y1) { int dx = (x1 - x0), dy = (y1 - y0); int d = 2 * dy - dx; int incrE = 2 * dy; int incrNE = 2 * (dy - dx); int x = x0, y = y0; WritePixel(x, y);

while (x < x1) { if (d <= 0) d = d + incrE; // East Case else { d = d + incrNE; ++y; } // Northeast Case ++x; WritePixel(x, y); }}

18 of 44

Example Code

Page 19: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 19 of 44

Scan Converting Circles

(17, 0)

(0, 17)

(17, 0)

(0, 17)

Page 20: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 20 of 44

Version 3 — Use Symmetry

R

(x0 + a, y0 + b)

(x-x0)2 + (y-y0)2 = R2

(x0, y0)

Symmetry: If is on circle centered at

Then and are also on the circle Hence there is 8-way symmetry

Reduce the problem to finding the pixels for 1/8 of the circle.

Page 21: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 21 of 44

Using the Symmetry

(x0, y0)

Page 22: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 22 of 44

The Incremental Algorithm – a Pseudocode Sketch

Page 23: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 23 of 44

What we need for the Incremental Algorithm

Page 24: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 24 of 44

The Decision Variable

If negative, midpoint inside circle, choose E vertical distance to the circle is less at than at

If positive, opposite is true, choose SE

Page 25: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 25 of 44

The right decision variable?

Page 26: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 26 of 44

Alternate Phrasing (1/3)

Page 27: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 27 of 44

Alternate Phrasing (2/3)

Page 28: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014

The radial distance decision is whether

is positive or negative. The vertical distance decision is whether

is positive or negative; and are ¼ apart. The integer is positive only if ¼ is positive (except special case

where : remember you’re using integers).

28 of 44

Alternate Phrasing (3/3)

Page 29: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 29 of 44

Incremental Computation Revisited (1/2)

Page 30: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014

If we move E, update d = f(M) by adding

If we move SE, update d by adding Forward differences of a 1st degree

polynomial are constants and those of a 2nd degree polynomial are 1st degree polynomials this “first order forward difference,”

like a partial derivative, is one degree lower

30 of 44

Incremental Computation (2/2)

Page 31: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014

The function is linear, hence amenable to incremental computation:

Similarly

31 of 44

Second Differences (1/2)

Page 32: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 32 of 44

Second Differences (2/2)

Page 33: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014

MidpointEighthCircle(R) { /* 1/8th of a circle w/ radius R */ int x = 0, y = R; int deltaE = 2 * x + 3; int deltaSE = 2 * (x - y) + 5; float decision = (x + 1) * (x + 1) + (y - 0.5) * (y - 0.5) – R*R; WritePixel(x, y);

while ( y > x ) { if (decision > 0) { // Move East x++; WritePixel(x, y); decision += deltaE; deltaE += 2; deltaSE += 2; // Update deltas } else { // Move SouthEast y--; x++; WritePixel(x, y); decision += deltaSE; deltaE += 2; deltaSE += 4; // Update deltas } }} 33 of 44

Midpoint Eighth Circle Algorithm

Page 34: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014

Uses floats! 1 test, 3 or 4 additions per pixel Initialization can be improved Multiply everything by 4: No Floats!

Makes the components even, but sign of decision variable remains same

Questions Are we getting all pixels whose distance from the

circle is less than ½? Why is y > x the right criterion? What if it were an ellipse?

34 of 44

Analysis

Page 35: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014

Aligned Ellipses

Non-integer primitives

General conics

Patterned primitives

35 of 44

Other Scan Conversion Problems

Page 36: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 36 of 44

Aligned Ellipses

Page 37: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 37 of 44

Direction Changing Criterion (1/2)

Page 38: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014

In our case, and

so we check for

This, too, can be computed incrementally

38 of 44

Direction Changing Criterion (2/2)

Page 39: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014

Now in ENE octant, not ESE octant. Used the wrong direction because the ellipse rapidly changes slope within a pixel

This problem is an artifact of aliasing, remember filter?

39 of 44

Problems with aligned ellipses

Page 40: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 40 of 44

Patterned line from P to Q is not same as patterned line from Q to P.

Patterns can be cosmetic or geometric Cosmetic: Texture applied after

transformations Geometric: Pattern subject to

transformations

Cosmetic patterned line

Geometric patterned line

Patterned Lines

P Q

P Q

Page 41: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 41 of 44

Geometric vs. Cosmetic

+

Geometric (Perspectivized/Filtered)

Cosmetic (Real-World Contact Paper)

Page 42: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014 42 of 44

Non-Integer Primitives and General Conics

Page 43: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014

What's the difference between these two solutions? Under which circumstances is the right one "better"?

43 of 44

Generic Polygons

Balsa Video - http://www.youtube.com/watch?v=GXi32vnA-2A

Page 44: CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © Scan Conversion CS123 1 of 44Scan Conversion - 10/14/2014

CS123 | INTRODUCTION TO COMPUTER GRAPHICS

Andries van Dam© Scan Conversion - 10/14/2014

Rapid Prototyping is becoming cheaper and more prevalent 3D printers lay down layer after layer to produce solid objects We have an RP lab across the street in Barus and Holley

Printing food - http://www.youtube.com/watch?v=55NvbBJzDpU Bio-printing - http://www.youtube.com/watch?v=-RgI_bcETkM

44 of 44

Scan Converting Arbitrary Solids