12
© 2012 Kavita Bala (with previous instructors James/Marschner) Cornell CS4620/5620 Fall 2012 • Lecture 13 1 CS4620/5620: Lecture 13 Rasterization © 2012 Kavita Bala (with previous instructors James/Marschner) Cornell CS4620/5620 Fall 2012 • Lecture 13 Announcements PA 1 due Wed 2

Announcements - Cornell University · 2012. 9. 24. · Cornell CS4620/5620 Fall 2012 • Lecture 13 Clipping to the triangle •Interpolate three barycentric coordinates across the

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Announcements - Cornell University · 2012. 9. 24. · Cornell CS4620/5620 Fall 2012 • Lecture 13 Clipping to the triangle •Interpolate three barycentric coordinates across the

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13 1

CS4620/5620: Lecture 13

Rasterization

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Announcements

• PA 1 due Wed

2

Page 2: Announcements - Cornell University · 2012. 9. 24. · Cornell CS4620/5620 Fall 2012 • Lecture 13 Clipping to the triangle •Interpolate three barycentric coordinates across the

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Rasterization

• First job: enumerate the pixels covered by a primitive– simple, aliased definition: pixels whose centers fall inside

• Second job: interpolate values across the primitive– e.g. colors computed at vertices– e.g. normals at vertices– will see applications later on

3

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Line rasterization

• Can be done incrementally, and therefore very efficiently

• Can also be done conservatively– Visit any likely pixel– Do a test for it and decide if you output or not

4

Page 3: Announcements - Cornell University · 2012. 9. 24. · Cornell CS4620/5620 Fall 2012 • Lecture 13 Clipping to the triangle •Interpolate three barycentric coordinates across the

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Rasterizing triangles

• The most common case in most applications– with good antialiasing can be the only case– some systems render a line as two skinny triangles

• Triangle represented by three vertices• Simple way to think of algorithm follows the pixel-walk

interpretation of line rasterization– walk from pixel to pixel over (at least) the polygon’s area– evaluate linear functions as you go– use those functions to decide which pixels are inside

5

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Rasterizing triangles

• Input:– three 2D points (the triangle’s vertices in pixel space)

• (x0, y0); (x1, y1); (x2, y2)– parameter values at each vertex

• q00, …, q0n; q10, …, q1n; q20, …, q2n

• Output: a list of fragments, each with– the integer pixel coordinates (x, y)

– interpolated parameter values q0, …, qn

6

Page 4: Announcements - Cornell University · 2012. 9. 24. · Cornell CS4620/5620 Fall 2012 • Lecture 13 Clipping to the triangle •Interpolate three barycentric coordinates across the

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Rasterizing triangles

7

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Incremental linear evaluation

• A linear (affine, really) function on the plane is:

• Linear functions are efficient to evaluate on a grid:

8

Page 5: Announcements - Cornell University · 2012. 9. 24. · Cornell CS4620/5620 Fall 2012 • Lecture 13 Clipping to the triangle •Interpolate three barycentric coordinates across the

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Incremental linear evaluation

linEval(xlow, xh, ylow, yh, cx, cy, ck) {

// setup qRow = cx*xlow + cy*ylow + ck;

// traversal for y = ylow to yh { qPix = qRow; for x = xlow to xh { output(x, y, qPix); qPix += cx; } qRow += cy; }}

cx = .005; cy = .005; ck = 0(image size 100x100)

9

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Rasterizing triangles

• Approach1! evaluation of linear

functions on pixelgrid

2! functions defined byparameter values at vertices

10

Page 6: Announcements - Cornell University · 2012. 9. 24. · Cornell CS4620/5620 Fall 2012 • Lecture 13 Clipping to the triangle •Interpolate three barycentric coordinates across the

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Defining parameter functions

• To interpolate parameters across a triangle we need to

find the cx, cy, and ck that define the (unique) linear function that matches the given values at all 3 vertices– this is 3 constraints on 3 unknown coefficients:

– leading to a 3x3 matrix equation for the coefficients:

(singular iff triangleis degenerate)

(each states that the functionagrees with the given valueat one vertex)

11

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Defining parameter functions

• More efficient version: shift origin to (x0, y0)

– now this is a 2x2 linear system (since q0 falls out):

– solve using Cramer’s rule (see Shirley):

12

q(x, y) = cx(x� x0) + cy(y � y0) + q0

q(x1, y1) = cx(x1 � x0) + cy(y1 � y0) + q0 = q1

q(x2, y2) = cx(x2 � x0) + cy(y2 � y0) + q0 = q2

Page 7: Announcements - Cornell University · 2012. 9. 24. · Cornell CS4620/5620 Fall 2012 • Lecture 13 Clipping to the triangle •Interpolate three barycentric coordinates across the

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Defining parameter functions

linInterp(xl, xh, yl, yh, x0, y0, q0,x1, y1, q1, x2, y2, q2) {

// setup det = (x1-x0)*(y2-y0) - (x2-x0)*(y1-y0); cx = ((q1-q0)*(y2-y0) - (q2-q0)*(y1-y0)) / det; cy = ((q2-q0)*(x1-x0) - (q1-q0)*(x2-x0)) / det; qRow = cx*(xlow-x0) + cy*(ylow-y0) + q0;

// traversal (same as before) for y = ylow to yh { qPix = qRow; for x = xlow to xh { output(x, y, qPix); qPix += cx; } qRow += cy; }}

q = 0 q = 1

q = 0

13

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Interpolating several parameters

linInterp(xl, xh, yl, yh, n, x0, y0, q0[],x1, y1, q1[], x2, y2, q2[]) {

// setup for k = 0 to n-1 // compute cx[k], cy[k], qRow[k] // from q0[k], q1[k], q2[k]

// traversal for y = yl to yh { for k = 1 to n, qPix[k] = qRow[k]; for x = xl to xh { output(x, y, qPix); for k = 1 to n, qPix[k] += cx[k]; } for k = 1 to n, qRow[k] += cy[k]; }}

14

Page 8: Announcements - Cornell University · 2012. 9. 24. · Cornell CS4620/5620 Fall 2012 • Lecture 13 Clipping to the triangle •Interpolate three barycentric coordinates across the

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Rasterizing triangles

• Summary1! evaluation of linear

functions on pixelgrid

2! functions defined byparameter values at vertices

3! using extraparametersto determinefragment set

15

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Clipping to the triangle

• Use barycentric coordinates

• A coordinate system for triangles

• 3 values: determine if you are inside the triangle

16

Page 9: Announcements - Cornell University · 2012. 9. 24. · Cornell CS4620/5620 Fall 2012 • Lecture 13 Clipping to the triangle •Interpolate three barycentric coordinates across the

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Barycentric coordinates

• A coordinate system for triangles

[Shi

rley

2000

]

17

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13 18

Page 10: Announcements - Cornell University · 2012. 9. 24. · Cornell CS4620/5620 Fall 2012 • Lecture 13 Clipping to the triangle •Interpolate three barycentric coordinates across the

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Barycentric coordinates

• Basis: a coordinate system for triangles

– in this view, the triangle interior test is just

[Shi

rley

2000

]

19

• A coordinate system for triangles– geometric viewpoint (areas):

• Triangle interior test:

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Barycentric coordinates

[Shi

rley

2000

]

20

Page 11: Announcements - Cornell University · 2012. 9. 24. · Cornell CS4620/5620 Fall 2012 • Lecture 13 Clipping to the triangle •Interpolate three barycentric coordinates across the

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Triangle Areas

• Use this equation to compute barycentric coordinates

• What is beta with this equation?

21

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Clipping to the triangle

• Interpolate three barycentriccoordinates across the plane– each barycentric coord is

1 at one vert. and 0 atthe other two

– lies between 0 and 1 inside the triangle

• Output fragments onlywhen all three are > 0.

22

Page 12: Announcements - Cornell University · 2012. 9. 24. · Cornell CS4620/5620 Fall 2012 • Lecture 13 Clipping to the triangle •Interpolate three barycentric coordinates across the

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Pixel-walk (Pineda) rasterization

• Conservativelyvisit a superset ofthe pixels you want

• Interpolate linearfunctions

• Use those functionsto determine whento emit a fragment

23

© 2012 Kavita Bala •(with previous instructors James/Marschner)

Cornell CS4620/5620 Fall 2012 • Lecture 13

Rasterizing triangles

• Exercise caution with rounding and arbitrary decisions– need to visit these

pixels once– but it’s important not

to visit them twice!

24