CS-184: Computer GraphicsLecture #10: Clipping and
Hidden Surfaces
Prof. James O’BrienUniversity of California, Berkeley
V2015-S-10-1.0
1
2
Today
• Clipping • Clipping to view volume• Clipping arbitrary polygons
• Hidden Surface Removal• Z-Buffer• BSP Trees• Others
2
10-ClippingAndHidden.key - October 12, 2016
3
Clipping• Stuff outside view volume should not be drawn
• Too close: obscures view
3
4
Clipping• Stuff outside view volume should not be drawn
• Too close: obscures view• Too far :
• Complexity• Z-buffer problems
• Too high/low/right/left:• Memory errors• Broken algorithms• Complexity
4
10-ClippingAndHidden.key - October 12, 2016
5
Clipping Line to Line/Plane
a
bn̂
Line segment to be clipped
Line/plane that clips it r
x(t) = a+ t(b�a)
n̂ ·x� n̂ · r= 0
5
6
Clipping Line to Line/Plane
a
bn̂
Line segment to be clipped
Line/plane that clips it
x(t) = a+ t(b�a)
n̂ ·x� f = 0
}
n̂ · (a+ t(b�a))� f = 0n̂ ·a+ t(n̂ · (b�a))� f = 0
t =f � n̂ ·an̂ ·d
6
10-ClippingAndHidden.key - October 12, 2016
7
Clipping Line to Line/Plane
a
bn̂
t =f � n̂ ·an̂ ·d
• Segment may be on one side
• Lines may be parallel
t 62 [0 . . .1]
n̂ ·d= 0|n̂ ·d| ε (Recall comments about numerical issues)
7
Triangle Clip/Split
8
a
b
c
-
+
-a
b
c
-
+
-a
b
c
-
+
-
Double vertices if you want separation...
8
10-ClippingAndHidden.key - October 12, 2016
9
Polygon Clip to Convex Domain
• Convex domain defined by collection of planes (or lines or hyper-planes)
• Planes have outward pointing normals• Clip against each plane in turn• Check for early/trivial rejection
9
Polygon Clipping• Find the part of a polygon inside the clip window?
Before Clipping
10
10-ClippingAndHidden.key - October 12, 2016
Polygon Clipping• Find the part of a polygon inside the clip window?
After Clipping
11
• Clip to each window boundary one at a time
Sutherland-Hodgman Clipping 12
10-ClippingAndHidden.key - October 12, 2016
• Clip to each window boundary one at a time
Sutherland-Hodgman Clipping 13
• Clip to each window boundary one at a time
Sutherland-Hodgman Clipping 14
10-ClippingAndHidden.key - October 12, 2016
Sutherland-Hodgman Clipping• Clip to each window boundary one at a time
15
Sutherland-Hodgman Clipping• Clip to each window boundary one at a time
16
10-ClippingAndHidden.key - October 12, 2016
Polygon Clip to Convex Domain
17
Note double edges.
17
18
Polygon Clip to Convex Domain
Inside Outside
s
p
Output p
Inside Outside
sp
Output i
Inside Outside
s
p
No output
Inside Outside
sp
Output i and p
i
i
18
10-ClippingAndHidden.key - October 12, 2016
19
Polygon Clip to Convex Domain
• Sutherland-Hodgman algorithm• Basically edge walking
• Clipping done often... should be efficient• Liang-Barsky parametric space algorithm• See text for clipping in 4D homogenized coordinates
19
20
General Polygon Clipping
A B A�B
B�A
A\B
A[B
20
10-ClippingAndHidden.key - October 12, 2016
21
• Weiler Algorithm• Double edges
General Polygon Clipping 21
22
Hidden Surface Removal• True 3D to 2D projection would put every thing
overlapping into the view plane.• We need to determine what’s in front and display only
that.
22
10-ClippingAndHidden.key - October 12, 2016
23
Z-Buffers• Add extra depth channel to image• Write Z values when writing pixels• Test Z values before writing
Images from Okan Arikan
23
24
Z-Buffers
• Benefits• Easy to implement• Works for most any geometric primitive• Parallel operation in hardware
• Limitations• Quantization and aliasing artifacts• Overfill• Transparency does not work well
24
10-ClippingAndHidden.key - October 12, 2016
25
Z-Buffers• Transparency requires partial sorting:
Partiallytransparent
Opaque
Opaque 1st
2nd
3rdFront
Good
Partiallytransparent
Opaque
Opaque 2nd
3rd
1st
Not Good
25
26
Z-BuffersRecall depth-value distortions.
It’s a feature...More resolution near viewerBest use of limited precision
26
10-ClippingAndHidden.key - October 12, 2016
27
A-Buffers
• Store sorted list of “fragments” at each pixel• Draw all opaque stuff first then transparent• Stuff behind full opacity gets ignored
• Nice for antialiasing...
27
28
Scan-line Algorithm• Assume polygons don’t intersect• Each time an edge is crossed determine who’s on top
28
10-ClippingAndHidden.key - October 12, 2016
29
Painter’s Algorithm• Sort Polygons Front-to-Back
• Draw in order• Back-to-Front works also, but wasteful
• How to sort quickly?• Intersecting polygons?• Cycles?
29
30
BSP-Trees
• Binary Space Partition Trees• Split space along planes• Allows fast queries of some spatial relations
• Draw Front-to-Back• Draw same-side polygons first• Draw root node polygon (if any)• Draw other-side polygons last
30
10-ClippingAndHidden.key - October 12, 2016