1 / 30

Rasterization

Rasterization. CS 418: Interactive Computer Graphics. UNIVERSITY OF ILLINOIS AT URBANA-CHAMPAIGN. Based on slide from Professor John Hart. Eric Shaffer. Fragment Pipeline. Rasterization is the process of converting vector graphics-style geometric primitives into a set of pixels.

oscarm
Download Presentation

Rasterization

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. Rasterization CS 418: Interactive Computer Graphics UNIVERSITY OF ILLINOIS AT URBANA-CHAMPAIGN Based on slide from Professor John Hart Eric Shaffer

  2. Fragment Pipeline Rasterization is the process of converting vector graphics-style geometric primitives into a set of pixels

  3. How to Draw a Line • Jack Bresenham’s Algorithm • Given a line from point (x0,y0) to (x1,y1) • How do we know which pixels to illuminate to draw the line? • First simplify the problem to the first octant • Translate start vertex to origin • Reflect end vertex into first octant (x0-x1, y0-y1) (x1-x0, y1-y0) (x0,y0) (x1,y1)

  4. x’ = y y’ = -x x’ = y y’ = x x’ = -x y’ = y x’ = x y’ = y x’ = x y’ = -y x’ = -x y’ = -y x’ = -y y’ = x x’ = -y y’ = -x

  5. Line Rasterization 4 • How to rasterize a line from (0,0) to (4,3) • Pixel (0,0) and (4,3) easy • One pixel for each integer x-coordinate • Pixel’s y-coordinate closest to line • If line equal distance between two pixels, pick one arbitrarily but consistently 3 2 ? 1 ? 0 0 1 2 3 4

  6. Midpoint Algorithm • Which pixel should be plotted next? • East? • Northeast? NE E

  7. Midpoint Algorithm • Which pixel should be plotted next? • East? • Northeast? • Line equation y = mx + b m = (y1 – y0)/(x1 – x0) b = y0 – mx0 f(x,y) = mx + b – y f >0 f < 0 NE M E

  8. Midpoint Algorithm • Which pixel should be plotted next? • East? • Northeast? • Line equation y = mx + b m = (y1 – y0)/(x1 – x0) b = y0 – mx0 f(x,y) = mx + b – y • f(M) < 0  E • f(M)  0  NE NE M E

  9. Computing f (M) Fast If you know f (P), then you can compute f (M) easily: f(x,y) = mx + b – y M= P + (1,½) f(M) = f(x+1,y+½) = m(x+1) + b – (y+½) = mx + m + b – y – ½ = mx + b – y + m – ½ = f(P) + m – ½ NE M E P

  10. Preparing next f (P ) f(x,y) = mx + b – y The next iteration’s f (P ) isf (E ) or f (NE ) of this iteration F (E ) = f (x+1,y) = f (P ) + m F (NE ) = f (x +1,y +1) = f (P ) + m – 1 Also need f (P ) at start point: f (0,0) = b NE M E P

  11. Midpoint Increments f(M) = f(P) + m – ½ If choice is E, then next midpoint is ME f(ME) = f(x+2,y+½) = m(x+2) + b – (y+½) = f(P) + 2m – ½ = f(M) + m Otherwise next midpoint is MNE f(MNE) = f(x+2,y+1½) = m(x+2) + b – (y+1½) = f(P) + 2m – 1½ = f(M) + m – 1 Initialize: f(1, ½) = m + b – ½ NE 2 ENE NE MNE M ME E EE P

  12. Integer Math NE 2 f(ME) = f(M) + m f(MNE) = f(M) + m – 1 f(1, ½) = m + b – ½ b = 0 M = (y1 – y0)/(x1 – x0) = Dy/Dx Dx f(ME) = Dx f(M) + Dy Dx f(MNE) = Dx f(M) + Dy – Dx Dx f(1, ½) = Dy – ½ Dx ENE NE MNE M ME E EE P

  13. Integer Math NE 2 f(ME) = f(M) + m f(MNE) = f(M) + m – 1 f(1, ½) = m + b – ½ b = 0 m= (y1 – y0)/(x1 – x0)= Dy/Dx 2Dx f(ME) = 2Dx f(M) + 2Dy 2Dx f(MNE)=2Dx f(M)+2Dy–2Dx 2Dx f(1, ½) = 2Dy – Dx ENE NE MNE M ME E EE P

  14. Integer Math f(ME) = f(M) + m f(MNE) = f(M) + m – 1 f(1, ½) = m + b – ½ b = 0 m = (y1 – y0)/(x1 – x0)= Dy/Dx F(ME) = F(M) + 2Dy F(MNE) = F(M) + 2Dy – 2Dx F(1,½) = 2Dy – Dx NE 2 ENE NE MNE M ME E EE P

  15. Integer Math Bresenham Line Algorithm line(int x0,int y0,int x1,int y1) { intdx = x1 – x0; intdy = y1 – y0; int F = 2*dy – dx; intdFE = 2*dy; intdFNE = 2*dy – 2*dx; int y = y0; for (int x = x0, x < x1; x++) { plot(x,y); if (F < 0) { F += dFE; } else { F += dFNE; y++; } } } f(ME) = f(M) + m f(MNE) = f(M) + m – 1 f(1, ½) = m + b – ½ b = 0 m= (y1 – y0)/(x1 – x0)= Dy/Dx F(ME) = F(M) + 2Dy F(MNE) = F(M) + 2Dy – 2Dx F(1,½) = 2Dy – Dx

  16. PolygonRasterization • Ignore horizontal lines 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9

  17. PolygonRasterization 9 • Ignore horizontal lines • Sort edges by smallery coordinate 8 D E 7 F 6 G 5 4 C 3 B 2 A 1 0 0 1 2 3 4 5 6 7 8 9

  18. PolygonRasterization • For each scanline… • Add edges wherey = ymin • Sorted by x • Then by dx/dy 9 8 D E 7 F 6 G 5 4 C 3 B 2 A 1 0 0 1 2 3 4 5 6 7 8 9

  19. PolygonRasterization Plotting rules for when segments lie on pixels • Plot lefts • Don’t plot rights • Plot bottoms • Don’t plot tops 9 8 D E 7 F 6 G 5 4 C 3 B 2 A 1 0 0 1 2 3 4 5 6 7 8 9

  20. PolygonRasterization • y = 1 • Delete y = ymax edges • Update x • Add y = ymin edges • For each pair x0,x1, plot from ceil(x0)to ceil(x1) – 1 9 8 D E 7 F 6 G 5 4 C 3 B 2 A 1 0 0 1 2 3 4 5 6 7 8 9

  21. PolygonRasterization • y = 2 • Delete y = ymax edges • Update x • Add y = ymin edges • For each pair x0,x1, plot from ceil(x0)to ceil(x1) – 1 9 8 D E 7 F 6 G 5 4 C 3 B 2 A 1 0 0 1 2 3 4 5 6 7 8 9

  22. PolygonRasterization • y = 3 • Delete y = ymax edges • Update x • Add y = ymin edges • For each pair x0,x1, plot from ceil(x0)to ceil(x1) – 1 9 8 D E 7 F 6 G 5 4 C 3 B 2 A 1 0 0 1 2 3 4 5 6 7 8 9

  23. PolygonRasterization • y = 4 • Delete y = ymax edges • Update x • Add y = ymin edges • For each pair x0,x1, plot from ceil(x0)to ceil(x1) – 1 9 8 D E 7 F 6 G 5 4 C 3 B 2 A 1 0 0 1 2 3 4 5 6 7 8 9

  24. PolygonRasterization • y = 5 • Delete y = ymax edges • Update x • Add y = ymin edges • For each pair x0,x1, plot from ceil(x0)to ceil(x1) – 1 9 8 D E 7 F 6 G 5 4 C 3 B 2 A 1 0 0 1 2 3 4 5 6 7 8 9

  25. PolygonRasterization • y = 6 • Delete y = ymax edges • Update x • Add y = ymin edges • For each pair x0,x1, plot from ceil(x0)to ceil(x1) – 1 9 8 D E 7 F 6 G 5 4 C 3 B 2 A 1 0 0 1 2 3 4 5 6 7 8 9

  26. PolygonRasterization • y = 7 • Delete y = ymax edges • Update x • Add y = ymin edges • For each pair x0,x1, plot from ceil(x0)to ceil(x1) – 1 9 8 D E 7 F 6 G 5 4 C 3 B 2 A 1 0 0 1 2 3 4 5 6 7 8 9

  27. PolygonRasterization • y = 8 • Delete y = ymax edges • Update x • Add y = ymin edges • For each pair x0,x1, plot from ceil(x0)to ceil(x1) – 1 9 8 D E 7 F 6 G 5 4 C 3 B 2 A 1 0 0 1 2 3 4 5 6 7 8 9

  28. PolygonRasterization • y = 9 • Delete y = ymax edges • Update x • Add y = ymin edges • For each pair x0,x1, plot from ceil(x0)to ceil(x1) – 1 9 8 D E 7 F 6 G 5 4 C 3 B 2 A 1 0 0 1 2 3 4 5 6 7 8 9

  29. Gouraud Shading Revisited • Flat shading • Per face normals • Color jumps across edge • Human visual perception accentuates edges • Smooth shading • Per vertex normals • Colors similar across edge • Edges become harder to discern Perception

  30. Gouraud Shading Revisited • Keep track of R, G, B at edge endpoints • Compute dR/dy, dG/dy and dB/dy per edge • Compute dR/dx, dG/dx and dB/dx at each scanline • Color each pixel R += dR/dx G += dG/dx B += dB/dx 9 8 D E 7 F 6 G 5 4 C 3 B 2 A 1 0 0 1 2 3 4 5 6 7 8 9

More Related