0% found this document useful (0 votes)
90 views

Triangle Fill

This document discusses triangle rasterization and interpolation techniques in computer graphics. It covers triangle filling using barycentric coordinates for containment testing and interpolation. Barycentric coordinates represent a point's position within a triangle based on relative distances to the triangle vertices. The document also discusses scanline filling and interpolation methods like flat, Gouraud, and Phong shading. It notes the need for perspective correction when linearly interpolating attributes transformed by perspective.

Uploaded by

Guntan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
90 views

Triangle Fill

This document discusses triangle rasterization and interpolation techniques in computer graphics. It covers triangle filling using barycentric coordinates for containment testing and interpolation. Barycentric coordinates represent a point's position within a triangle based on relative distances to the triangle vertices. The document also discusses scanline filling and interpolation methods like flat, Gouraud, and Phong shading. It notes the need for perspective correction when linearly interpolating attributes transformed by perspective.

Uploaded by

Guntan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 24

CSSE 351

Computer Graphics
Triangle fill & interpolation

1
Session schedule

• Review
• Triangle fill
• Barycentric coordinates
• Interpolation
• Scanline fill
2
Review

• Rasterization
• DDAs
• Line drawing

3
Triangle fill
• Test if each pixel is
inside each triangle

for x, y
if inside(tri, x, y)
draw(x, y)

4
Triangle fill
• Better to bound fill

maxX = tri.maxX
minX = tri.minX
maxY = tri.maxY
minY = tri.minY
for y = minY to maxY
for x = minX to maxX
if inside(tri, x, y)
draw(x, y)

5
Barycentric coordinates

• In graphics, we need to
• interpolate over triangle surface
• test if a point is inside a triangle

• Barycentric coordinates can do both!


6
Barycentric coordinates

• Relation of distances from vertices


• Defined over triangle plane

• Can be used for interpolation


• Can be used for containment test
7
Barycentric coordinates
• Given triangle of a, b, c

• Compute barycentric
basis

• Can then locate point p


in triangle’s barycentric
coordinates

8
Barycentric coordinates
• Pick triangle point as
origin (a)

• Form bases vectors


(c-a), (b-a)

• Compute point p offsets


from basis origin
α, β, ɣ

9
Barycentric coordinates
• So, p can be defined:

• Rearrange:

• Rename a coefficient:

• Final form:

10
Barycentric coordinates
• Nice properties
• Components sum to 1

• Inside triangle, components bound (0,1)


• On edge, components bound [0,1]
• Varies smoothly over surface
11
Barycentric coordinates
• Similarities to implicit line equation

• 0 on line
• Smoothly vary +/- off line

• Can compute barycentric coordinate coefficients using line


equation
• Define line through triangle points
• Measure point’s offset from line
• Normalize to triangle size

12
Barycentric coordinates
• Computing for point p
• Use line equation f(x , y )
p p

13
Barycentric fill
• Inside test
• Check if all coefficients in range [0,1]
• Interpolate
• Use barycentric coordinates

14
Barycentric fill example
• For colors c1, c2, c3
for y = minY to maxY
for x = minX to maxX
a, b, c = tri.computeBarycentric(x,y)
if a in [0,1] and b in [0,1] and c in [0,1]
color = a*c0 + b*c1 + c*c2
draw(x, y, color)

15
Scanline fill

• Similar to line drawing


• Instead of drawing line
• Compute interpolation values along lines
• Fill in middle by interpolating horizontal
lines

16
Scanline fill

• Order vertices conveniently


• Often sort by vertical height Sort & reorder

• Interpolate along edges


• Fill interior by horizontal rows

17
Interpolation
• Flat shading
• Interpolate nothing, just fill with color
• Gouraud shading
• Compute color at vertices
• Interpolate color over surface
• Phong shading
• Compute normals at vertices
• Interpolate normals over surface
• Compute lighting for each fragment

18
Interpolation

• For general shaders


• Interpolate whatever desired
varying output from vertex
varying input to fragment

19
One small problem...

20
Perspective Correction

• Perspective is a non-linear transform!


linear x=Az+B
perspective x=x’z

nonlinear result! z=B/(x’-A)

21
Perspective Correction
• Can’t use linear interpolation!
perspective line z = B / (x’ - A)

take inverse
1/z = x(1/B) - A/B

• Linear in terms of 1/z


22
Perspective Correction
• So, ‘homogenize’ all attributes (1/z)
• Now linear in screen space
• Then, interpolate over triangle face
• Homogenized attributes
• 1/z factor
• Finally, divide all homogenized attributes by 1/z
• Undoes the perspective transform

23
Perspective Correction
• Book has example of correct interpolation
using barycentric coordinate fill

• Can make scanline fill very fast


• Compute 1/z gradient for x,y
• Compute attribute gradient for x,y
• Increment gradient along for each fragment
24

You might also like