1 / 44

Scan Conversion

Scan Conversion. CS123. Scan Converting Lines. 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

Download Presentation

Scan Conversion

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Scan Conversion CS123 Scan Conversion - 10/14/2014

  2. Scan Converting Lines 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 Scan Conversion - 10/14/2014

  3. What is Scan Conversion? • 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 conversion Scan Conversion - 10/14/2014

  4. Scan-converting a Line: Finding the next pixel 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 ycoordinate value by 1 to get next pixel. • Diagonal Line: • Draw pixel P and increment both x and ycoordinate 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”? Scan Conversion - 10/14/2014

  5. Vertical Distance • 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 Scan Conversion - 10/14/2014

  6. Strategy 1 – Incremental Algorithm (1/3) Scan Conversion - 10/14/2014

  7. Strategy 1 – Incremental Algorithm (2/3) Scan Conversion - 10/14/2014

  8. Strategy 1 – Incremental Algorithm (3/3) - Issues void Line(intx0,int y0, intx1,int y1){ int x,y; floatdy= 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; } } Since slope is fractional, need special case for vertical lines (dx = 0) Rounding takes time Scan Conversion - 10/14/2014

  9. Strategy 2 – Midpoint Line Algorithm (1/3) • 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 Scan Conversion - 10/14/2014

  10. Strategy 2 – Midpoint Line Algorithm (2/3) NE pixel Previous pixel Q Midpoint M E pixel Scan Conversion - 10/14/2014

  11. NE pixel E pixel 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 Scan Conversion - 10/14/2014

  12. General Line Equation in Implicit Form • 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 Scan Conversion - 10/14/2014

  13. Decision Variable Scan Conversion - 10/14/2014

  14. Incrementing Decision Variable if E was chosen: Scan Conversion - 10/14/2014

  15. If NE was chosen: Scan Conversion - 10/14/2014

  16. Summary (1/2) Scan Conversion - 10/14/2014

  17. Summary (2/2) Scan Conversion - 10/14/2014

  18. Example Code void MidpointLine(int x0,int y0,int x1,int y1){ intdx=(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); } } Scan Conversion - 10/14/2014

  19. (0, 17) (0, 17) (17, 0) (17, 0) Scan Converting Circles Scan Conversion - 10/14/2014

  20. (x0 + a, y0 + b) R (x0, y0) (x-x0)2 + (y-y0)2 = R2 Version 3 — Use Symmetry 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. Scan Conversion - 10/14/2014

  21. (x0, y0) Using the Symmetry Scan Conversion - 10/14/2014

  22. The Incremental Algorithm – a Pseudocode Sketch Scan Conversion - 10/14/2014

  23. What we need for the Incremental Algorithm Scan Conversion - 10/14/2014

  24. 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 Scan Conversion - 10/14/2014

  25. The right decision variable? Scan Conversion - 10/14/2014

  26. Alternate Phrasing (1/3) Scan Conversion - 10/14/2014

  27. Alternate Phrasing (2/3) Scan Conversion - 10/14/2014

  28. Alternate Phrasing (3/3) • 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). Scan Conversion - 10/14/2014

  29. Incremental Computation Revisited (1/2) Scan Conversion - 10/14/2014

  30. Incremental Computation (2/2) • If we move E, update d = f(M)by adding • If we move SE, update dby 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 Scan Conversion - 10/14/2014

  31. Second Differences (1/2) • The function is linear, hence amenable to incremental computation: • Similarly Scan Conversion - 10/14/2014

  32. Second Differences (2/2) Scan Conversion - 10/14/2014

  33. Midpoint Eighth Circle Algorithm MidpointEighthCircle(R){ /* 1/8th of a circle w/ radius R */ intx =0, y =R; intdeltaE=2 * x +3; intdeltaSE=2 *(x - y)+5; floatdecision=(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 } } } Scan Conversion - 10/14/2014

  34. Analysis • 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 > xthe right criterion? • What if it were an ellipse? Scan Conversion - 10/14/2014

  35. Other Scan Conversion Problems • Aligned Ellipses • Non-integer primitives • General conics • Patterned primitives Scan Conversion - 10/14/2014

  36. Aligned Ellipses Scan Conversion - 10/14/2014

  37. Direction Changing Criterion (1/2) Scan Conversion - 10/14/2014

  38. Direction Changing Criterion (2/2) • In our case, and so we check for • This, too, can be computed incrementally Scan Conversion - 10/14/2014

  39. Problems with aligned ellipses • 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? Scan Conversion - 10/14/2014

  40. Patterned Lines P Q P Q Patterned line from P to Q is not same as patterned line from Q to P. • Patterns can be cosmeticor geometric • Cosmetic: Texture applied after transformations • Geometric: Pattern subject to transformations Cosmetic patterned line Geometric patterned line Scan Conversion - 10/14/2014

  41. Geometric vs. Cosmetic + Cosmetic (Real-World Contact Paper) Geometric (Perspectivized/Filtered) Scan Conversion - 10/14/2014

  42. Non-Integer Primitives and General Conics Scan Conversion - 10/14/2014

  43. Generic Polygons • What's the difference between these two solutions? Under which circumstances is the right one "better"? Balsa Video - http://www.youtube.com/watch?v=GXi32vnA-2A Scan Conversion - 10/14/2014

  44. Scan Converting Arbitrary Solids • 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 Scan Conversion - 10/14/2014

More Related