Visible Surface Determination CS418 Computer Graphics John C. Hart - - PowerPoint PPT Presentation

visible surface determination
SMART_READER_LITE
LIVE PREVIEW

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


slide-1
SLIDE 1

Visible Surface Determination

CS418 Computer Graphics John C. Hart

slide-2
SLIDE 2

Painter’s Algorithm

  • Display polygons in

back-to-front order

  • Sort polygons by z-value

– Which vertex? – O(n log n)

  • Problems…
  • z
slide-3
SLIDE 3

Quadtree Algorithm

  • Sort polygons
  • Subdivide screen until each region

contains one or zero edges

  • Invented by John Warnock in 1969
slide-4
SLIDE 4

Quadtree Algorithm

  • Sort polygons
  • Subdivide screen until each region

contains one or zero edges

  • Invented by John Warnock in 1969
slide-5
SLIDE 5

Quadtree Algorithm

  • Sort polygons
  • Subdivide screen until each region

contains one or zero edges

  • Invented by John Warnock in 1969
slide-6
SLIDE 6

Quadtree Algorithm

  • Sort polygons
  • Subdivide screen until each region

contains one or zero edges

  • Invented by John Warnock in 1969
slide-7
SLIDE 7

Quadtree Algorithm

  • Sort polygons
  • Subdivide screen until each region

contains one or zero edges

  • Invented by John Warnock in 1969
slide-8
SLIDE 8

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

slide-9
SLIDE 9

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

slide-10
SLIDE 10

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

slide-11
SLIDE 11

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

slide-12
SLIDE 12

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

slide-13
SLIDE 13

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                                                             

slide-14
SLIDE 14

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                                                                         

slide-15
SLIDE 15

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
slide-16
SLIDE 16

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

slide-17
SLIDE 17

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