Presentation is loading. Please wait.

Presentation is loading. Please wait.

CSCE 441: Computer Graphics Hidden Surface Removal (Cont.)

Similar presentations


Presentation on theme: "CSCE 441: Computer Graphics Hidden Surface Removal (Cont.)"— Presentation transcript:

1 CSCE 441: Computer Graphics Hidden Surface Removal (Cont.)
Jinxiang Chai

2 Outline Backface Culling Painter’s algorithm BSP Z-buffer Ray casting
Reading: section 16-1 to 16-11, 16-14,16-15

3 Depth (“Z”) Buffer Simple modification to scan-conversion
Maintain a separate buffer storing the closest “z” value for each pixel—depth buffer Only draw pixel if depth value is closer than stored “z” value Update buffer with closest depth value Work in normalized coordinate space [0.0…1.0]

4 NOTE: Can draw these shapes in any order
Z-Buffering Example z = 1.0 z = 1.0 z = 0.3 z = 0.7 z = 0.3 z = 0.1 z = 1.0 z = 0.3 z = 0.1 z = 1.0 z = 0.7 z = 0.3 z = 0.1 NOTE: Can draw these shapes in any order

5 Depth Buffer Algorithm
Initialize the depth buffer and frame buffer for every pixel - depthBuff(x,y)=1.0; - frameBuff(x,y)=backgndColor; Process each polygon in a scene, one at a time. - for each pixel (x,y), calculate the depth z (if not already known). - if z <depthBuff(x,y), compute the surface color at (x,y) and set depthBuff(x,y)=z; frameBuff(x,y)=surfColor(x,y);

6 How to Calculate “z”? This is easy to implement for polygon surfaces
v0 p=[x,y,z] v1 v2 Given the pixel coordinates (x,y), how to calculate the z value? use plane normal

7 How to Calculate “z”? This is easy to implement for polygon surfaces
v0 p=[x,y,z] v1 v2 Plane normal (p-v0)∙((v2-v0)x(v1-v0))=0 Plane equation: Ax+By+Cz+D=0 P=[x,y,z]

8 How to Calculate “z”? This is easy to implement for polygon surfaces
How can we speed up the calculation? Plane equation: Ax+By+Cz+D=0 p=[x,y,z]

9 How to Calculate “z”? This is easy to implement for polygon surfaces
How can we speed up the calculation? - scan line conversion Plane equation: Ax+By+Cz+D=0 p=[x,y,z]

10 How to Calculate “z”? Update “z” values using scan line conversion algorithm

11 How to Calculate “z”? Update “z” values using scan line conversion algorithm Plane equation: Ax+By+Cz+D=0

12 How to Calculate “z”? Update “z” values using scan line conversion algorithm Plane equation: Ax+By+Cz+D=0

13 How to Calculate “z”? Update “z” values using scan line conversion algorithm Plane equation: Ax+By+Cz+D=0

14 How to Calculate “z”? Update “z” values using scan line conversion algorithm Plane equation: Ax+By+Cz+D=0

15 How to Calculate “z”? Update “z” values using scan line conversion algorithm Plane equation: Ax+By+Cz+D=0

16 How to Calculate “z”? Update “z” values using scan line conversion algorithm Plane equation: Ax+By+Cz+D=0 What’s the x,y,z value for this pixel?

17 How to Calculate “z”? Update “z” values using scan line conversion algorithm Plane equation: Ax+By+Cz+D=0 What’s the xk+1,yk+1,zk+1 values for the next horizontal pixel?

18 Depth (“Z”) Buffer Advantages Disadvantages
Always works. The nearest object always determines the color of a pixel Polygon drawn in any order Commonly in hardware Disadvantages Needs a whole extra buffer (depth buffer) Requires extra storage space (How big?) Still lots of overdraw

19 Depth (“Z”) Buffer Advantages Disadvantages
Always works. The nearest object always determines the color of a pixel Polygon drawn in any order Commonly in hardware Disadvantages Needs a whole extra buffer Requires extra storage space (How big?) (1k*1k*24bits) Still lots of overdraw

20 Ray Casting For each pixel enter Pij
- Send a ray from eye point, c, through pij into scene - Intersect ray with each object - Select the nearest intersection Effective for scenes with curved surfaces, particularly sphere

21 Ray Casting Implementation - Might parameterize each ray as
- Each object Ok returns tk>0 such that first intersection with ok occurs at r(tk)

22 Ray Casting Implementation - Might parameterize each ray as
- Each object Ok returns tk>0 such that first intersection with ok occurs at r(tk) Intersection with polygons?

23 Ray Casting Implementation - Might parameterize each ray as
- Each object Ok returns tk>0 such that first intersection with ok occurs at r(tk) Intersection with polygons? Ray equation: Plane equation: Ax+By+Cz+D=0 Plug in and calculate the parameter value t!

24 Ray Casting Implementation - Might parameterize each ray as
- Each object Ok returns tk>0 such that first intersection with ok occurs at r(tk) Intersection with spheres? Plug in and calculate the parameter value t!

25 Ray Casting Implementation - Might parameterize each ray as
- Each object Ok returns tk>0 such that first intersection with ok occurs at r(tk) Intersection with spheres? Ray equation: Sphere equation: (x-x0)2+(y-y0)2+(z-z0)2=r2 Plug in and calculate the parameter value t!

26 Ray Casting Implementation - Might parameterize each ray as
- Each object Ok returns tk>0 such that first intersection with ok occurs at r(tk) Intersection with curved surfaces? Ray equation: Curved surface equation: f(x,y,z)=0 Plug in and calculate the parameter value t!

27 Ray Casting Implementation - Might parameterize each ray as
- Each object Ok returns tk>0 such that first intersection with ok occurs at r(tk) - Q: given the set {tk}, what is the first intersection point?

28 Ray Casting Implementation - Might parameterize each ray as
- Each object Ok returns tk>0 such that first intersection with ok occurs at r(tk) - Q: given the set {tk}, what is the first intersection point?

29 Ray Casting Ray casting properties: - process pixels one at a time
- draw each visible pixel once - efficient algorithm needed for ray-object intersection - may (not) use pixel coherence - simple but generally not used

30 Hidden Surface Removal: opengl
Backface culling - glEnable(GL_CULL_FACE), glDisable(GL_CULL_FACE) - glCullFace(GL_BACK) , cull polygon view direction

31 Z-buffer: opengl In opengl, depth values are normalized to [0.0,1.0]
- Specify depth-buffer operations glutInitDisplayMode // with argument GLUT_DEPTH - Specify initial depth-buffer value glClear(GL_DEPTH_BUFFER_BIT) // initialize depth-buffer values to 1.0 glClearDepth (depth) // specify an initial depth-buffer value - Activate depth-testing operations glEnable (GL_DEPTH_TEST)

32 Summary Backface Culling Painter’s algorithm BSP Z-buffer Ray casting


Download ppt "CSCE 441: Computer Graphics Hidden Surface Removal (Cont.)"

Similar presentations


Ads by Google