University of British Columbia CPSC 414 Computer Graphics © Tamara Munzner 1 Scan Conversion Week 6, Mon 6 Oct 2003 recap: Bresenham line algorithm scan.

Slides:



Advertisements
Similar presentations
Polygon Scan Conversion – 11b
Advertisements

Computer Graphics Inf4/MSc 1 Computer Graphics Lecture 7 Scanline algorithm and polygon clipping Taku Komura.
Computer Graphics 4: Bresenham Line Drawing Algorithm, Circle Drawing & Polygon Filling By:Kanwarjeet Singh.
CS 450: COMPUTER GRAPHICS FILLING POLYGONS SPRING 2015 DR. MICHAEL J. REALE.
CP411 polygon Lecture 6 1. Scan conversion algorithm for circle 2. Draw polygons 3. Antialiasing.
CS 352: Computer Graphics Chapter 7: The Rendering Pipeline.
Classes of Polygons Planar polygons Non-planar polygons Simple
Different types of Polygons Simple Convex Simple Concave Non-simple : self-intersecting With holes ConvexConcaveSelf-intersecting.
University of British Columbia CPSC 314 Computer Graphics Jan-Apr 2005 Tamara Munzner Interpolation Clipping.
Implementation Dr. Amy Zhang. Reading 2  Hill, Chapters  Hill, Chapter 10.
CSCE 441: Computer Graphics Scan Conversion of Polygons
Graphics Programming: Polygon Filling
Scan Conversion II Revision 1.4 2/13/07 Copyright 2006, Dr. Zachary Wartell, UNCC, All Rights Reserved.
University of British Columbia CPSC 314 Computer Graphics Jan-Apr 2005 Tamara Munzner Rasterization Week 6,
1 CSCE 441 Computer Graphics: Clipping Lines Jinxiang Chai.
CS 454 Computer graphics Polygon Filling
Scan Conversion Week 6, Wed 8 Oct 2003
Rasterization Foley, Ch: 3. Pixels are represented as disjoint circles centered on uniform grid Each (x,y) of the grid has a pixel Y X (1,1) (1,2) (0,0)
Graphics Pipeline Rasterization CMSC 435/634. Drawing Terms Primitive – Basic shape, drawn directly – Compare to building from simpler shapes Rasterization.
TOPIC 4 PART III FILL AREA PRIMITIVES POLYGON FILL AREAS CGMB214: Introduction to Computer Graphics.
1 CSCE 441: Computer Graphics Scan Conversion of Polygons Jinxiang Chai.
CGMB 314 Intro to Computer Graphics Fill Area Primitives.
Polygon Scan Conversion and Z-Buffering
Basics of Rendering Pipeline Based Rendering –Objects in the scene are rendered in a sequence of steps that form the Rendering Pipeline. Ray-Tracing –A.
CS 551 / 645: Introductory Computer Graphics
Graphics Pipeline Rasterization CMSC 435/634. Drawing Terms Primitive – Basic shape, drawn directly – Compare to building from simpler shapes Rasterization.
3/4/04© University of Wisconsin, CS559 Spring 2004 Last Time Clipping Lines –Cohen-Sutherland: The use of outcodes and early reject/accept tests –Liang-Barsky:
CS 445 / 645 Introduction to Computer Graphics Lecture 8 Triangle Rasterization Lecture 8 Triangle Rasterization.
Rasterization Aaron Bloomfield CS 445: Introduction to Graphics Fall 2006 (Slide set originally by David Luebke)
Triangle Scan Conversion. 2 Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 Rasterization Rasterization (scan conversion) –Determine which.
Graphics Pipeline Rasterization CMSC 435/634. Drawing Terms Primitive – Basic shape, drawn directly – Compare to building from simpler shapes Rasterization.
College of Computer and Information Science, Northeastern UniversityOctober 12, CS G140 Graduate Computer Graphics Prof. Harriet Fell Spring 2006.
10/15/02 (c) 2002 University of Wisconsin, CS559 Last Time Clipping.
1 CS 430/536 Computer Graphics I Polygon Clipping and Filling Week 3, Lecture 5 David Breen, William Regli and Maxim Peysakhov Geometric and Intelligent.
CAP4730: Computational Structures in Computer Graphics
Drawing Triangles CS 445/645 Introduction to Computer Graphics David Luebke, Spring 2003.
Introduction to Computer Graphics CS 445 / 645 Lecture 9 Chapter 4: Rasterization L. McMillan MIT notes (Fall ’98)
10/15/02 (c) 2002 University of Wisconsin, CS559 Who Am I? Prof Stephen Chenney These notes will be online after the lecture – in fact they’re online already.
University of British Columbia CPSC 314 Computer Graphics Jan-Apr 2013 Tamara Munzner Rasterization.
Computer Graphics Filling. Filling Polygons So we can figure out how to draw lines and circles How do we go about drawing polygons? We use an incremental.
Graphics Pipeline Rasterization CMSC 435/634. Drawing Terms Primitive – Basic shape, drawn directly – Compare to building from simpler shapes Rasterization.
Lecture 15: Raster Graphics and Scan Conversion
Graphics Graphics & Graphical Programming Lecture 23 - Viewing & Clipping.
1 CSCE 441: Computer Graphics Scan Conversion of Polygons Jinxiang Chai.
University of British Columbia CPSC 314 Computer Graphics Jan-Apr 2010 Tamara Munzner Rasterization II Week.
Rasterization Overview Raster Display Device. Scan Conversion / Rasterization: converting vector graphics into raster graphics (determining pixels in.
Computer Graphics CC416 Week 14 Filling Algorithms.
Computer Graphics Lecture 08 Taqdees A. Siddiqi Computer Graphics Filled Area Primitives I Lecture 08 Taqdees A. Siddiqi
Rasterization, or “What is glBegin(GL_LINES) really doing?” Course web page: February 23, 2012  Lecture 4.
OUTPUT PRIMITIVES CEng 477 Computer Graphics METU, 2004.
Computer Graphics Filling.
Scan Conversion of Polygons
Introduction to Polygons
CS G140 Graduate Computer Graphics
Polygons.
(c) 2002 University of Wisconsin, CS559
Computer Graphics Filled Area Primitives II Lecture 09 Taqdees A
Fill Area Algorithms Jan
© University of Wisconsin, CS559 Fall 2004
3D Rendering Pipeline Hidden Surface Removal 3D Primitives
Agenda Polygon Terminology Types of polygons Inside Test
CSCE 441 Computer Graphics: Clipping Lines Jinxiang Chai
Prepared by Narendra V G CSE MIT
Agenda Polygon Terminology Types of polygons Inside Test
(c) 2002 University of Wisconsin, CS559
Rasterization Week 6, Mon Feb 12
Chapter 3 Graphics Output Primitives
Rasterizing Polygons Lecture 29 Wed, Dec 7, 2005.
Clipping University of British Columbia CPSC 314 Computer Graphics
Polygons.
Presentation transcript:

University of British Columbia CPSC 414 Computer Graphics © Tamara Munzner 1 Scan Conversion Week 6, Mon 6 Oct 2003 recap: Bresenham line algorithm scan conversion: polygons

Week 6, Fri 6 Oct 03 © Tamara Munzner2 News Homework 1 out –due Wed 15 Oct at beginning of class –all late work must be in by Fri 17 Oct solutions out then to help with midterm studying

Week 6, Fri 6 Oct 03 © Tamara Munzner3 Scan Conversion recap given vertices in DCS, fill in the pixels –start with lines

Week 6, Fri 6 Oct 03 © Tamara Munzner4 Lines: DDA -> Bresenham recap –operate only on integers and avoid rounding –decision variable: after drawing point (x,y) decide whether to draw (x+1,y): case E ( “east”) (x+1,y+1): case NE (“north-east”) –create discriminator, d = d 1 – d 2 If d > 0 y increases If d <= 0 y stays the same –

Week 6, Fri 6 Oct 03 © Tamara Munzner5 Scan Conversion of Lines discussion –Bresenham sets same pixels as DDA –intensity of line varies with its angle!

Week 6, Fri 6 Oct 03 © Tamara Munzner6 Scan Conversion of Lines discussion –Bresenham good for hardware implementations (integer!) –DDA may be faster for software (depends on system)! floating point ops higher parallelized (pipelined) –e.g. RISC CPUs from MIPS, SUN no if statements in inner loop –more efficient use of processor pipelining

Week 6, Fri 6 Oct 03 © Tamara Munzner7 Rasterizing Polygons In interactive graphics, polygons rule the world Two main reasons: –Lowest common denominator for surfaces Can represent any surface with arbitrary accuracy Splines, mathematical functions, volumetric isosurfaces… –Mathematical simplicity lends itself to simple, regular rendering algorithms Like those we’re about to discuss… Such algorithms embed well in hardware

Week 6, Fri 6 Oct 03 © Tamara Munzner8 Rasterizing Polygons Triangle is the minimal unit of a polygon –All polygons can be broken up into triangles –Triangles are guaranteed to be: Planar Convex

Week 6, Fri 6 Oct 03 © Tamara Munzner9 Triangularization Convex polygons easily triangulated Concave polygons present a challenge

Week 6, Fri 6 Oct 03 © Tamara Munzner10 OpenGL Triangularization –simple convex polygons break into triangles, trivial glBegin(GL_POLYGON)... glEnd() –concave or non-simple polygons break into triangles, more effort gluNewTess(), gluTessCallback(),...

Week 6, Fri 6 Oct 03 © Tamara Munzner11 Scan Conversion of Polygons Simple Algorithm: –Draw edges of polygon –Use flood-fill to draw interior

Week 6, Fri 6 Oct 03 © Tamara Munzner12 Scan Conversion of Polygons Flood Fill –Start with seed point –Recursively set all neighbors until boundary is hit

Week 6, Fri 6 Oct 03 © Tamara Munzner13 Scan Conversion of Polygons Discussion – Flood Fill –Breadth-first traversal –Temporary memory needed for storing boundary –Pixels visited up to 4 times to check if already set –Problems with other primitives with same color Need per-pixel flag indicating if set already Needs to be cleared for every polygon!

Week 6, Fri 6 Oct 03 © Tamara Munzner14 Scan Conversion of Polgons Scanline Algorithm –Scanline: a line of pixels in an image

Week 6, Fri 6 Oct 03 © Tamara Munzner15 Scan Conversion of Polygons Classes of Polygons –Triangles Simple algorithms based on scan-conversion of edges followed by filling of scanlines –General polygons More complicated scanline algorithms

Week 6, Fri 6 Oct 03 © Tamara Munzner16 Rasterizing Triangles Interactive graphics hardware commonly uses edge walking or edge equation techniques for rasterizing triangles

Week 6, Fri 6 Oct 03 © Tamara Munzner17 Edge Walking Basic idea: –Draw edges vertically Interpolate colors down edges –Fill in horizontal spans for each scanline At each scanline, interpolate edge colors across span

Week 6, Fri 6 Oct 03 © Tamara Munzner18 Edge Walking: Notes Order three triangle vertices in x and y –Find middle point in y dimension and compute if it is to the left or right of polygon. Also could be flat top or flat bottom triangle We know where left and right edges are. –Proceed from top scanline downwards –Fill each span –Until breakpoint or bottom vertex is reached Advantage: can be made very fast Disadvantages: –Lots of finicky special cases

Week 6, Fri 6 Oct 03 © Tamara Munzner19 Edge Walking: Disadvantages Fractional offsets: Be careful when interpolating color values! Beware of gaps between adjacent edges Beware of duplicating shared edges

Week 6, Fri 6 Oct 03 © Tamara Munzner20 Edge Equations An edge equation is simply the equation of the line defining that edge –Q: What is the implicit equation of a line? –A: Ax + By + C = 0 –Q: Given a point ( x,y ), what does plugging x & y into this equation tell us? –A: Whether the point is: On the line: Ax + By + C = 0 “Above” the line: Ax + By + C > 0 “Below” the line: Ax + By + C < 0

Week 6, Fri 6 Oct 03 © Tamara Munzner21 Edge Equations Edge equations thus define two half-spaces:

Week 6, Fri 6 Oct 03 © Tamara Munzner22 Edge Equations And a triangle can be defined as the intersection of three positive half-spaces: A 1 x + B 1 y + C 1 < 0 A 2 x + B 2 y + C 2 < 0 A 3 x + B 3 y + C 3 < 0 A 1 x + B 1 y + C 1 > 0 A 3 x + B 3 y + C 3 > 0 A 2 x + B 2 y + C 2 > 0

Week 6, Fri 6 Oct 03 © Tamara Munzner23 Edge Equations So…simply turn on those pixels for which all edge equations evaluate to > 0:

Week 6, Fri 6 Oct 03 © Tamara Munzner24 Using Edge Equations Which pixels: compute min,max bounding box Edge equations: compute from vertices Orientation: ensure area is positive (why?)

Week 6, Fri 6 Oct 03 © Tamara Munzner25 Computing Edge Equations Want to calculate A, B, C for each edge from ( x 1, y 1 ) and ( x 2, y 2 ) Treat it as a linear system: Ax 1 + By 1 + C = 0 Ax 2 + By 2 + C = 0 Notice: two equations, three unknowns What can we solve? Goal: solve for A & B in terms of C

Week 6, Fri 6 Oct 03 © Tamara Munzner26 Computing Edge Equations Set up the linear system: Multiply both sides by matrix inverse: Let C = x 0 y 1 - x 1 y 0 for convenience –Then A = y 0 - y 1 and B = x 0 – x 1

Week 6, Fri 6 Oct 03 © Tamara Munzner27 Edge Equations So…we can find edge equation from two verts. Given three corners P 0, P 1, P 2 of a triangle, what are our three edges? How do we make sure the half-spaces defined by the edge equations all share the same sign on the interior of the triangle? A: Be consistent (Ex: [P 0 P 1 ], [P 1 P 2 ], [P 2 P 0 ] ) How do we make sure that sign is positive? A: Test, and flip if needed ( A= -A, B= -B, C= -C )

Week 6, Fri 6 Oct 03 © Tamara Munzner28 Edge Equations: Code Basic structure of code: –Setup: compute edge equations, bounding box –(Outer loop) For each scanline in bounding box... –(Inner loop) …check each pixel on scanline, evaluating edge equations and drawing the pixel if all three are positive

Week 6, Fri 6 Oct 03 © Tamara Munzner29 Edge Equations: Code findBoundingBox(&xmin, &xmax, &ymin, &ymax); setupEdges (&a0,&b0,&c0,&a1,&b1,&c1,&a2,&b2,&c2); /* Optimize this: */ for (int y = yMin; y <= yMax; y++) { for (int x = xMin; x <= xMax; x++) { float e0 = a0*x + b0*y + c0; float e1 = a1*x + b1*y + c1; float e2 = a2*x + b2*y + c2; if (e0 > 0 && e1 > 0 && e2 > 0) setPixel(x,y); }}

Week 6, Fri 6 Oct 03 © Tamara Munzner30 Scanline Algorithm

Week 6, Fri 6 Oct 03 © Tamara Munzner31 Edge Equations: Speed Hacks improve inner loop: int xflag = 0; for (int x = xMin; x <= xMax; x++) { if (e0|e1|e2 > 0) { setPixel(x,y); xflag++; } else if (xflag != 0) break; e0 += a0; e1 += a1; e2 += a2; } –Incremental update of edge equation values (think DDA) –Early termination (why does this work?) –Faster test of equation values for (int x = xMin; x <= xMax; x++) { float e0 = a0*x + b0*y + c0; float e1 = a1*x + b1*y + c1; float e2 = a2*x + b2*y + c2; if (e0 > 0 && e1 > 0 && e2 > 0) setPixel(x,y); }

Week 6, Fri 6 Oct 03 © Tamara Munzner32 Triangle Rasterization Issues Exactly which pixels should be lit? A: Those pixels inside the triangle edges What about pixels exactly on the edge? –Draw them: order of triangles matters (it shouldn’t) –Don’t draw them: gaps possible between triangles We need a consistent (if arbitrary) rule –Example: draw pixels on left or top edge, but not on right or bottom edge

Week 6, Fri 6 Oct 03 © Tamara Munzner33 Triangle Rasterization Issues Sliver

Week 6, Fri 6 Oct 03 © Tamara Munzner34 Moving Slivers Triangle Rasterization Issues

Week 6, Fri 6 Oct 03 © Tamara Munzner35 Triangle Rasterization Issues Shared Edge Ordering

Week 6, Fri 6 Oct 03 © Tamara Munzner36 General Polygon Rasterization Now that we can rasterize triangles, what about general polygons? We’ll take an edge-walking approach

Week 6, Fri 6 Oct 03 © Tamara Munzner37 General Polygon Rasterization Consider the following polygon: How do we know whether a given pixel on the scanline is inside or outside the polygon? A B C D E F

Week 6, Fri 6 Oct 03 © Tamara Munzner38 Polygon Rasterization Inside-Outside Points

Week 6, Fri 6 Oct 03 © Tamara Munzner39 Polygon Rasterization Inside-Outside Points

Week 6, Fri 6 Oct 03 © Tamara Munzner40 General Polygon Rasterization Basic idea: use a parity test for each scanline edgeCnt = 0; for each pixel on scanline (l to r) if (oldpixel->newpixel crosses edge) edgeCnt ++; // draw the pixel if edgeCnt odd if (edgeCnt % 2) setPixel(pixel);

Week 6, Fri 6 Oct 03 © Tamara Munzner41 General Polygon Rasterization Count your vertices carefully –If exactly on pixel boundary? –Shared vertices? –Vertices defining horizontal edge? Consider A-B versus I-H B C D E FG I H J A

Week 6, Fri 6 Oct 03 © Tamara Munzner42 Polygon Rasterization Edge Cases AB DC F E H G For scanline, determine all intersections of polygon edges with scanline Sort edge intersections in least to greatest order Use parity count to determine when pixels are drawn Horizontal lines do not contribute to parity count Y min endpoints do contribute to parity count Y max endpoints do not contribute to parity count Bottom edge drawn because A is min of AH. AB does not contribute Not drawn because H is max of AH And HG does not contribute Not drawn because D is min of ED And increments counter to 2. DC doesn’t contribute

Week 6, Fri 6 Oct 03 © Tamara Munzner43 Faster Polygon Rasterization How can we optimize the code? for each scanline edgeCnt = 0; for each pixel on scanline (l to r) if (oldpixel->newpixel crosses edge) edgeCnt ++; // draw the pixel if edgeCnt odd if (edgeCnt % 2) setPixel(pixel); Big cost: testing pixels against each edge Solution: active edge table (AET)

Week 6, Fri 6 Oct 03 © Tamara Munzner44 Active Edge Table Idea: –Edges intersecting a given scanline are likely to intersect the next scanline –The order of edge intersections doesn’t change much from scanline to scanline

Week 6, Fri 6 Oct 03 © Tamara Munzner45 Active Edge Table Algorithm: scanline from bottom to top… –Sort all edges by their minimum y coord –Starting at bottom, add edges with Y min = 0 to AET –For each scanline: Sort edges in AET by x intersection Walk from left to right, setting pixels by parity rule Increment scanline Retire edges with Y max < Y Add edges with Y min < Y Recalculate edge intersections –Stop when Y > Y max for last edges