490 likes | 692 Views
Rasterizing Polygons. Lecture 29 Wed, Dec 7, 2005. Rasterizing Polygons. Given a the vertices of a polygon, in viewport coordinates, which pixels should be shaded? How do we determine them efficiently?. Rasterizing Polygons. Rasterizing Polygons.
E N D
Rasterizing Polygons Lecture 29 Wed, Dec 7, 2005
Rasterizing Polygons • Given a the vertices of a polygon, in viewport coordinates, which pixels should be shaded? • How do we determine them efficiently?
Rasterizing Polygons • Obviously, any pixel lying entirely within the polygon should be shaded. • What about the pixels that are partially within the polygon? • Rule: Shade them if their center is within the polygon. • What about the pixels whose center is exactly on the edge?
Neighboring Polygons • When two polygons share an edge, which one “owns” the pixels on the edge? • Rule • A polygon owns all pixels whose centers are within its interior. • A polygon owns all pixels whose centers lie on one of its left edges.
Neighboring Polygons • Fill in all pixels whose centers are within the polygon.
Neighboring Polygons • Fill in all pixels whose centers are on a left edge of the polygon.
A Rasterization Algorithm • To rasterize a polygon, first determine its bounding box.
A Rasterization Algorithm • To rasterize a polygon, first determine its bounding rectangle.
A Rasterization Algorithm • Then scan each row of pixels in the bounding rectangle, left to right, bottom to top.
A Rasterization Algorithm • When an edge is encountered, • If we were on the outside, we move to the inside. • If we were on the inside, we move to the outside. • Thus, we stop or resume shading accordingly.
A Rasterization Algorithm • Then scan each row of pixels in the bounding rectangle, left to right, bottom to top. row 0
A Rasterization Algorithm • Then scan each row of pixels in the bounding rectangle, left to right, bottom to top. row 1
A Rasterization Algorithm • Then scan each row of pixels in the bounding rectangle, left to right, bottom to top. row 2
A Rasterization Algorithm • Then scan each row of pixels in the bounding rectangle, left to right, bottom to top. row 3
A Rasterization Algorithm • Then scan each row of pixels in the bounding rectangle, left to right, bottom to top. row 4
A Rasterization Algorithm • Then scan each row of pixels in the bounding rectangle, left to right, bottom to top. row 5
A Rasterization Algorithm • Then scan each row of pixels in the bounding rectangle, left to right, bottom to top. row 6
A Rasterization Algorithm • Then scan each row of pixels in the bounding rectangle, left to right, bottom to top. row 7
A Rasterization Algorithm • The following algorithm is designed to allow rapid shading of the pixels. • As the vertices are given, create a list of the vertices. (The order matters!) • {(1, 0), (4, 3), (6, 1), (12, 1), (11, 8), (7, 8), (6, 5), (4, 8), (0, 7), (1, 0)}. • From the list of vertices, form an edge table. • {{(1, 0), (4, 3)}, {(4, 3), (6, 1)}, …, {(0, 7), (1, 0)}}.
A Rasterization Algorithm • Organization of the edge table. • Eliminate any horizontal edges. • Sort the edges in the edge table by the y-coordinate of the lower endpoint. • Begin scanning with the bottom scan line.
The Active Edge Table • Create the active edge table (AET). • For each edge in the edge table whose lower endpoint is on the scan line, • Create an active-edge-table entry. • Add it to the active edge table. • Delete the edge from the edge table.
The Active Edge Table • Organization of an active-edge-table entry: • y-coordinate of upper endpoint. • Reciprocal of the slope. • x-intercept with the horizontal line ½ unit above the current scan line.
The Active Edge Table Active edges Scan line
The Active Edge Table (7, -1/7, 13/14) Scan line (3, 1, 1-1/2)
The Active Edge Table • Sort the AET entries by their x-intercepts. • The AET must contain an even number of entries. • Why? • Shade pixels from the 1st to the 2ndx-intercepts, 3rd to 4thx-intercepts, etc., in the AET.
The Active Edge Table (7, -1/7, 13/14) (no shading on this scan line) Scan line (3, 1, 1-1/2)
The Active Edge Table • Update the AET. • Increment the scan line number. • Delete from the AET any entries for which the upper endpoint is on the scan line. • Update the x-intercepts of all AET entries. • Add the reciprocal slope to the x-intercept. • Create and add entries from the edge table for edges whose lower endpoint is on the scan line.
A Rasterization Algorithm (7, -1/7, 13/14) Scan line (3, 1, 1-1/2)
A Rasterization Algorithm (7, -1/7, 11/14) Scan line (8, -1/7, 11-13/14) (3, -1, 5-1/2) (3, 1, 2-1/2)
A Rasterization Algorithm (7, -1/7, 11/14) Scan line (8, -1/7, 11-13/14) (3, -1, 5-1/2) (3, 1, 2-1/2)
A Rasterization Algorithm (7, -1/7, 9/14) Scan line (8, -1/7, 11-11/14) (3, -1, 4-1/2) (3, 1, 3-1/2)
A Rasterization Algorithm (7, -1/7, 9/14) Scan line (8, -1/7, 11-11/14) (3, -1, 4-1/2) (3, 1, 3-1/2)
A Rasterization Algorithm (7, -1/7, 1/2) Scan line (8, -1/7, 11-9/14)
A Rasterization Algorithm (7, -1/7, 1/2) Scan line (8, -1/7, 11-9/14)
A Rasterization Algorithm (7, -1/7, 5/14) Scan line (8, -1/7, 11-1/2)
A Rasterization Algorithm (7, -1/7, 5/14) Scan line (8, -1/7, 11-1/2)
A Rasterization Algorithm (8, -2/3, 5-5/6) (8, 1/3, 6-1/6) (7, -1/7, 3/14) Scan line (8, -1/7, 11-5/14)
A Rasterization Algorithm (8, -2/3, 5-2/3) (8, 1/3, 6-1/6) (7, -1/7, 3/14) Scan line (8, -1/7, 11-5/14)
A Rasterization Algorithm (8, -2/3, 5) (8, 1/3, 6-1/2) (7, -1/7, 1/14) Scan line (8, -1/7, 11-3/14)
A Rasterization Algorithm (8, -2/3, 5) (8, 1/3, 6-1/2) (7, -1/7, 1/14) Scan line (8, -1/7, 11-3/14)
A Rasterization Algorithm (8, -2/3, 5) (8, 1/3, 6-1/2) (8, 4, 2) Scan line (8, -1/7, 11-3/14)
A Rasterization Algorithm (8, -2/3, 5) (8, 1/3, 6-1/2) (8, 4, 2) Scan line (8, -1/7, 11-3/14)
Rasterizing Polygons Read Run
Rasterizing Polygons in OpenGL Read Run
Freehand Polygons Read Run