Hidden Surfaces - TAMU Computer Science Faculty Pages

advertisement
Hidden Surfaces
Dr. Scott Schaefer
1
Hidden Surfaces
2/62
Hidden Surfaces
3/62
Hidden Surfaces
4/62
Backface Culling
5/62
Backface Culling
view direction
v
6/62
Backface Culling
n
view direction
v
7/62
Backface Culling
n v  0, draw polygon
n
view direction
v
8/62
Backface Culling
n v  0, cull polygon
n
view direction
v
9/62
Backface Culling
10/62
Backface Culling
1
3
2
counter clock-wise
orientation, draw polygon
11/62
Backface Culling
1
2
3
clock-wise orientation,
cull polygon
12/62
Backface Culling
Advantages
 Improves rendering speed by removing
roughly half of polygons from scan
conversion
 Disadvantages
 Assumes closed surface with consistently
oriented polygons
 NOT a true hidden surface algorithm!!!

13/62
Backface Culling

Is this all we have to do?
14/62
Backface Culling

Is this all we have to do? No!
-
Can still have 2 (or more) front faces that map to
the same screen pixel
15/62
Backface Culling

Is this all we have to do? No!
-
-
Can still have 2 (or more) front faces that map to
the same screen pixel
Which actually gets drawn?
16/62
Painter’s Algorithm
Sort polygons according to distance from
viewer
 Draw from back to front


How do we sort polygons?
17/62
Painter’s Example
z = 0.7
z = 0.3
z = 0.1
Sort by depth:
Green rect
Red circle
Blue tri
z=0
18/62
Painter’s Algorithm
19/62
Painter’s Algorithm

Sometimes there is NO ordering that
produces correct results!!!
20/62
Painter’s Algorithm
1. Sort all objects’ zmin and zmax
21/62
Painter’s Algorithm
1. Sort all objects’ zmin and zmax
2. If an object is uninterrupted (its zmin and zmax are
adjacent in the sorted list), it is fine
22/62
Painter’s Algorithm
1. Sort all objects’ zmin and zmax
2. If an object is uninterrupted (its zmin and zmax are
adjacent in the sorted list), it is fine
3. If 2 objects DO overlap
3.1 Check if they overlap in x
- If not, they are fine
3.2 Check if they overlap in y
- If not, they are fine
- If yes, need to split one
23/62
Painter’s Algorithm

The splitting step is the tough one
- Need to find a plane to split one polygon by so
that each new polygon is entirely in front of or
entirely behind the other
- Polygons may actually intersect, so then need to
split each polygon by the other
24/62
Painter’s Algorithm

The splitting step is the tough one
- Need to find a plane to split one polygon by so
that each new polygon is entirely in front of or
entirely behind the other
- Polygons may actually intersect, so then need to
split each polygon by the other

After splitting, you can resort the list and
should be fine
25/62
Painter’s Algorithm-Summary
Advantages
 Simple algorithm for ordering polygons
 Disadvantages
 Sorting criteria difficult to produce
 Redraws same pixel many times
 Sorting can also be expensive

26/62
Depth (“Z”) Buffer
Simple modification to scan-conversion
 Maintain a separate buffer storing the closest
“z” value for each pixel
 Only draw pixel if depth value is closer than
stored “z” value
 Update buffer with closest depth value

27/62
Depth (“Z”) Buffer
Advantages
 Simple to implement
 Allows for a streaming approach to
polygon drawing
 Disadvantages
 Requires extra storage space
 Still lots of overdraw

28/62
Binary Space Partitioning Trees

BSP tree: organize all of space (hence
partition) into a binary tree
- Preprocess: overlay a binary tree on objects in the scene
- Runtime: correctly traversing this tree enumerates objects
from back to front
- Idea: divide space recursively into half-spaces by choosing
splitting planes
 Splitting planes can be arbitrarily oriented
29/62
BSP Trees: Objects
9
6
8
7
5
4
1
2
3
30/62
BSP Trees: Objects
9
6
-
8
7
+
5
4
1
2
3
31/62
BSP Trees: Objects
Put front objects in the left branch
+
9
6
-
8
7
-
+
1
2
3
4
5
6
7
8
9
5
4
1
2
3
32/62
BSP Trees: Objects
Put front objects in the left branch
+
9
6
-
8
7
-
+
+
5
4
1
2
1
2
3
4
5
6
7
8
9
3
33/62
BSP Trees: Objects
Put front objects in the left branch
+
9
6
-
8
7
-
+
+
5
4
1
2
-
1
+
3
2
4
-
+
3
5
6
-
+
7
9
8
34/62
BSP Trees: Objects
Put front objects in the left branch
+
9
6
-
8
7
-
+
+
5
4
1
2
-
1
+
3
2
+
2
4
-
+
3
5
-
-
+
6
6
8
+ 7
9
35/62
BSP Trees: Objects
Put front objects in the left branch
+
9
6
-
8
7
-
+
+
5
4
1
2
-
1
+
3
2
+
2
4
-
+
3
5
-
-
+
6
6
8
+ 7
9
When to stop the recursion?
36/62
Object Splitting
No bunnies were harmed in my example
 But what if a splitting plane passes through
an object?

- Split the object; give half to each node:
- Worst case: can create up to O(n3) objects!
Ouch
37/62
Building a BSP Tree






Choose a splitting polygon
Sort all other polygons as
 Front
 Behind
 Crossing
 On
Add “front” polygons to front child, “behind” to
back child
Split “crossing” polygons with infinite plane
Add “on” polygons to root
Recur
38/62
Building a BSP Tree
6
7
3
1
2
5
4
39/62
Building a BSP Tree
6
7
3
1
2
5
4
1
b
2,3,4,5,6,7
40/62
Building a BSP Tree
6
7-2
5-2
7-1
5-1
3
1
2
4
1
b
f
7-2,6, 5-2
3
b
2,4,5-1,7-1
41/62
Building a BSP Tree
6
7-2
5-2
7-1
5-1
3
1
2
4
1
b
f
7-2,6, 5-2
3
f
2
b
7-1
b
4, 5-1
42/62
Building a BSP Tree
6
7-2
5-2
7-1
5-1
3
1
2
4
1
b
f
7-2,6, 5-2
3
f
2
b
7-1
b
4
b
5-1
43/62
Building a BSP Tree
6
7-2
5-2
7-1
5-1
3
1
2
4
1
b
f
7-2,6, 5-2
3
f
2
b
7-1
b
4
b
5-1
44/62
Building a BSP Tree
6
7-2
5-2
7-1
5-1
3
1
2
4
1
b
f
7-2,6, 5-2
3
f
2
b
7-1
b
4
b
5-1
45/62
Building a BSP Tree
6
7-2
5-2
7-1
5-1
3
1
2
4
1
b
f
7-2
b
3
f
6, 5-2 2
b
7-1
b
4
b
5-1
46/62
Building a BSP Tree
6
7-2
5-2
7-1
5-1
3
1
2
4
1
b
3
f
7-2
b
6
b
5-2
f
2
b
7-1
b
4
b
5-1
47/62
Building a BSP Tree
6
7-2
5-2
7-1
5-1
3
1
2
4
1
b
3
f
7-2
b
6
b
5-2
f
2
b
7-1
b
4
b
5-1
48/62
Building a BSP Tree
6
7-2
5-2
7-1
5-1
3
1
2
4
1
b
3
f
7-2
b
6
b
5-2
f
2
b
7-1
b
4
b
5-1
49/62
Rendering with a BSP Tree



If eye is in front of plane
 Draw “back” polygons
 Draw “on” polygons
 Draw “front” polygons
If eye is behind plane
 Draw “front” polygons
 Draw “on” polygons
 Draw “back” polygons
Else eye is on plane
 Draw “front” polygons
 Draw “back” polygons
50/62
BSP Trees: Objects
Correctly traversing this tree enumerates objects from back to front
+
9
6
-
8
7
-
+
+
5
4
1
2
-
1
+
3
2
+
2
4
-
+
3
5
-
-
+
6
6
8
+ 7
9
Traversal order?
51/62
BSP Trees: Objects
Correctly traversing this tree enumerates objects from back to front
+
9
6
-
8
7
-
+
+
5
4
1
2
-
1
+
3
2
+
2
4
-
+
3
5
-
-
+
6
6
8
+ 7
9
Traversal order:
8->9->7->6->5->3->4->2->1
52/62
Building a BSP Tree
6
7-2
5-2
7-1
5-1
3
1
2
4
1
b
3
f
7-2
Traversal order:
b
6
b
5-2
f
2
b
7-1
b
4
b
5-1
53/62
Building a BSP Tree
6
7-2
5-2
7-1
5-1
3
1
2
4
1
b
3
f
7-2
Traversal order:
6->(5-2)->(7-2)->3->(5-1)->4->(7-1)->2->1
b
6
b
5-2
f
2
b
7-1
b
4
b
5-1
54/62
Building a BSP Tree
6
7-2
5-2
7-1
5-1
3
1
2
4
1
b
3
f
7-2
Traversal order:
b
6
b
5-2
f
2
b
7-1
b
4
b
5-1
55/62
Building a BSP Tree
6
7-2
5-2
7-1
5-1
3
1
2
4
1
b
3
f
7-2
Traversal order:
1->2->(7-1)->4->(5-1)->3->(7-2)->(5-2)->6
b
6
b
5-2
f
2
b
7-1
b
4
b
5-1
56/62
Building a BSP Tree
6
7-2
5-2
7-1
5-1
3
1
2
4
1
b
3
f
7-2
Traversal order?
b
6
b
5-2
f
2
b
7-1
b
4
b
5-1
57/62
Rendering with a BSP Tree


Advantages
 No depth comparisons needed
 Polygons split and ordered automatically
Disadvantages
 Computationally intense preprocess stage
restricts algorithm to static scenes
 Splitting increases polygon count
 Redraws same pixel many times
 Choosing splitting plane not an exact science
58/62
Improved BSP Rendering

Take advantage of view direction to cull
away polygons behind viewer
59/62
Improved BSP Rendering

Take advantage of view direction to cull
away polygons behind viewer
View frustum
60/62
Improved BSP Rendering

Take advantage of view direction to cull
away polygons behind viewer
61/62
OpenGL and Hidden Surfaces
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glClear(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT );
glCullFace ( GL_BACK );
62/62
63/62
Scan Line Algorithm
Assume for each line of screen, we have
scan-lines for all polygons intersecting that
line
 For each polygon, keep track of extents of
scan line
 Whenever the x-extents of two scan lines
overlap, determine ordering of two polygons

64/62
Scan Line Algorithm
65/62
Scan Line Algorithm
66/62
Scan Line Algorithm
67/62
Scan Line Algorithm
Advantages
 Takes advantage of coherence resulting in
fast algorithm
 Does not require as much storage as depth
buffer
 Disadvantages
 More complex algorithm
 Requires all polygons sent to GPU before
drawing

68/62
Download