350 likes | 369 Views
CSCE 441: Computer Graphics Hidden Surface Removal (Cont.). Jinxiang Chai. Outline. Backface Culling Painter’s algorithm BSP Z-buffer Ray casting Reading: section 16-1 to 16-11, 16-14,16-15. Depth (“Z”) Buffer. Simple modification to scan-conversion
E N D
CSCE 441: Computer Graphics Hidden Surface Removal (Cont.) Jinxiang Chai
Outline • Backface Culling • Painter’s algorithm • BSP • Z-buffer • Ray casting • Reading: section 16-1 to 16-11, 16-14,16-15
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]
z = 0.7 z = 0.7 z = 0.3 z = 0.1 z = 0.1 z = 0.1 z = 1.0 z = 0.3 z = 0.3 z = 1.0 z = 1.0 z = 0.3 z = 1.0 Z-Buffering Example NOTE: Can draw these shapes in any order
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);
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
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]
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]
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]
Scanline Conversion Normalized project space view direction
How to Calculate “z”? • Solution: update “z” values using scan line conversion algorithm p=[x,y,z]
How to Calculate “z”? • Update “z” values using scan line conversion algorithm
How to Calculate “z”? • Update “z” values using scan line conversion algorithm Plane equation: Ax+By+Cz+D=0
How to Calculate “z”? • Update “z” values using scan line conversion algorithm Plane equation: Ax+By+Cz+D=0
How to Calculate “z”? • Update “z” values using scan line conversion algorithm Plane equation: Ax+By+Cz+D=0
How to Calculate “z”? • Update “z” values using scan line conversion algorithm Plane equation: Ax+By+Cz+D=0
How to Calculate “z”? • Update “z” values using scan line conversion algorithm Plane equation: Ax+By+Cz+D=0
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?
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?
Depth (“Z”) Buffer • Advantages • 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 • Still lots of overdraw
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)
Hidden Surface Removal: opengl • Backface culling - glEnable(GL_CULL_FACE), glDisable(GL_CULL_FACE) - glCullFace(GL_BACK) , cull polygon view direction
Outline • Backface Culling • Painter’s algorithm • BSP • Z-buffer • Ray casting • Reading: section 9-1 to 9-11, 9-14,9-15
Ray Casting • Key idea: for every pixel, cast a ray, find the closest point on the object and draw the point
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
Ray Casting • Implementation - Might parameterize each ray as - Each object Ok returns tk>0 such that first intersection with ok occurs at r(tk)
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 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!
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!
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!
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!
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?
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?
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
Summary • Backface Culling • Painter’s algorithm • BSP • Z-buffer • Ray casting