Visible Surface Determination CS418 Computer Graphics John C. Hart - - PowerPoint PPT Presentation
Visible Surface Determination CS418 Computer Graphics John C. Hart - - PowerPoint PPT Presentation
Visible Surface Determination CS418 Computer Graphics John C. Hart Painters Algorithm Display polygons in back-to-front order Sort polygons by z-value -z Which vertex? O ( n log n ) Problems Quadtree Algorithm Sort
Painter’s Algorithm
- Display polygons in
back-to-front order
- Sort polygons by z-value
– Which vertex? – O(n log n)
- Problems…
- z
Quadtree Algorithm
- Sort polygons
- Subdivide screen until each region
contains one or zero edges
- Invented by John Warnock in 1969
Quadtree Algorithm
- Sort polygons
- Subdivide screen until each region
contains one or zero edges
- Invented by John Warnock in 1969
Quadtree Algorithm
- Sort polygons
- Subdivide screen until each region
contains one or zero edges
- Invented by John Warnock in 1969
Quadtree Algorithm
- Sort polygons
- Subdivide screen until each region
contains one or zero edges
- Invented by John Warnock in 1969
Quadtree Algorithm
- Sort polygons
- Subdivide screen until each region
contains one or zero edges
- Invented by John Warnock in 1969
Z-Buffer
Key Observation: Each pixel displays color of only one triangle, ignores everything behind it
- Don’t need to sort triangles, just find
for each pixel the closest triangle
- Z-buffer: one fixed or floating point
value per pixel
- Algorithm:
For each rasterized fragment (x,y) If z > zbuffer(x,y) then framebuffer(x,y) = fragment color zbuffer(x,y) = z
- far
- far
- far
- far
- far
- far
- far
- far
- far
- far
- far
- far
framebuffer zbuffer
Z-Buffer
Key Observation: Each pixel displays color of only one triangle, ignores everything behind it
- Don’t need to sort triangles, just find
for each pixel the closest triangle
- Z-buffer: one fixed or floating point
value per pixel
- Algorithm:
For each rasterized fragment (x,y) If z > zbuffer(x,y) then framebuffer(x,y) = fragment color zbuffer(x,y) = z
- far
- .1
- .2
- .3
- .4
- .5
- .6
- .7
- .8
- far
- far
- far
framebuffer zbuffer
Z-Buffer
Key Observation: Each pixel displays color of only one triangle, ignores everything behind it
- Don’t need to sort triangles, just find
for each pixel the closest triangle
- Z-buffer: one fixed or floating point
value per pixel
- Algorithm:
For each rasterized fragment (x,y) If z > zbuffer(x,y) then framebuffer(x,y) = fragment color zbuffer(x,y) = z
- far
- .1
- .2
- .3
- .4
- .3
- .1
- .7
- .8
- far
- far
- far
framebuffer zbuffer
Z-Buffer
- Get fragment z-values by interpolating
z-values at vertices during rasterization
- Perspective projection destroys
z-values, setting them all to –d
- Need a perspective distortion that
preserves at least the ordering of z-values
- far
- .1
- .2
- .3
- .4
- .3
- .1
- .7
- .8
- far
- far
- far
framebuffer zbuffer
Normalized View Volume
x y z x y z
W2V Model View Persp
Model Coords World Coords Viewing Coords Clip Coords Screen Coords
(0,0,-far)
glFrustum(left,right,bottom,top,near,far)
(-1,1,1) z 1
- 1
x 1
- 1
y
- 1
1
Perspective Projection
screen
- z
y zview yview d yclip
clip view view view clip view /
y y d z y y z d
view view view view view view view view view view view
/ 1 1 / 1 / 1/ 1 1 x z d x x y y y z d z z d z d d
Perspective Distortion
screen
- z
y zview yview 1 yclip
view clip view
y y z
view view view view view view view view view view view view
1 1 1 1 1 x z x x y y y z z z z z
Distorted z-Values
view clip view
y y z
view view view view view view view view view view view view
1 1 1 1 1 x z x x y y y z z z z z
- z
- – /z
-
1/-z curve z1 z2
- – /z2
- – /z1
if z1 > z2 then
- – /z1 > - – /z2
Normalized Perspective Distortion
2 near right left right left right left 2 near top bottom top bottom top bottom far near 2 far near far near far near 1
x y z x y z
(0,0,-far) (-1,1,1) z 1
- 1
x 1
- 1
y
- 1
1
Hierarchical Z-Buffer
- Invented by Ned Green in 1994
- Creates a MIP-map of the z-buffer
– z-value equal to farthest z-value of its four children
- Before rasterizing a triangle…
– Check z-value of its nearest vertex against z-value of the smallest quadtree cell containing the triangle – If z-test fails, then the entire triangle is hidden and need not be rasterized
- Works best when displaying
front-to-back
- .2
- .3
- .4
- .5
- .6
- .7
- .8
- far
framebuffer hierarchical zbuffer
- .3
- .5
- .7
- far
- .5
- far
- far