Title: Clipping
1Clipping
- Jian Huang, CS594
- This set of slides reference slides devised at
Ohio State and MIT.
2Viewing Pipeline Revisited
Canonical view volume
- Object space coordinate where each component is
defined - World space all components put together via
affine transformation. (camera, lighting defined
in this space) - Eye space camera at the origin, view direction
coincides with the z axis. Hither and Yon
perpendicular to the z axis - Clipping space All point is in homogeneous
coordinate. Perspective division gets everything
into 3D image space. - 3D image space (Canonical view volume) a
parallelpipied shape defined by (-11,-11,0,1).
Objects distorted. - Screen space x and y mapped to screen pixel
coordinates
3Why do clipping
- Clipping is a visibility preprocess. In
real-world scenes clipping can remove a
substantial percentage of the environment from
consideration. - Clipping offers an important optimization
4What is clipping, two views
- Clipping is to spatially partition geometric
primitives, according to their containment within
some region. Clipping can be used to - Distinguish whether geometric primitives are
inside or outside of a viewing frustum or picking
frustum - Detecting intersections between primitives
- Clipping is to subdivide geometric primitives.
Several other potential applications. - Binning geometric primitives into spatial data
structures - computing analytical shadows.
5Point Clipping
(x, y)
is inside iff
AND
6Line Clipping - Half Plane Tests
- Modify endpoints to lie in rectangle
- Interior of rectangle?
- Answer intersection of 4 half-planes
- 3D ? (intersection of 6 half-planes)
7Line Clipping
- Is end-point inside a clip region? - half-plane
test - If outside, calculate intersection betwee line
and the clipping rectangle and make this the new
end point
- Both endpoints inside trivial accept
- One inside find intersection and clip
- Both outside either clip or reject (tricky case)
8Cohen-Sutherland Algorithm (Outcode clipping)
- Classifies each vertex of a primitive, by
generating an outcode. An outcode identifies the
appropriate half space location of each vertex
relative to all of the clipping planes. Outcodes
are usually stored as bit vectors.
9Cohen-Sutherland Algorithm (Outcode clipping)
if (outcode1 '0000' and outcode2 0000)
then line segment is inside else if
((outcode1 AND outcode2) 0000) then
line segment potentially crosses clip region
else line is entirely outside of clip
region endif endif
10The Maybe cases?
- If neither trivial accept nor reject
- Pick an outside endpoint (with nonzero outcode)
- Pick an edge that is crossed (nonzero bit of
outcode) - Find line's intersection with that edge
- Replace outside endpoint with intersection point
- Repeat outcode test until trivial accept or reject
11The Maybe case
12The Maybe Case
13One Plane At a Time Clipping(a.k.a.
Sutherland-Hodgeman Clipping)
- The Sutherland-Hodgeman triangle clipping
algorithm uses a divide-and-conquer strategy. - Clip a triangle against a single plane. Each of
the clipping planes are applied in succession to
every triangle. - There is minimal storage requirements for this
algorithm, and it is well suited to pipelining. - It is often used in hardware implementations.
14Sutherland-HodgmanPolygon Clipping Algorithm
- Subproblem
- clip a polygon (input vertex list) against a
single clip edges - output the vertex list(s) for the resulting
clipped polygon(s) - Clip against all four planes
- generalizes to 3D (6 planes)
- generalizes to any convex clip polygon/polyhedron
- Used in viewing transforms
15Polygon Clipping At Work
16Sutherland-Hodgman SHclippedge(var ilist, olist
list ilen, olen, edge integer) s
ilistilen olen 0 for i 1 to ilen do
d ilisti if (inside(d, edge)
then if (inside(s, edge) then
-- case 1 addlist(d, olist) olen
olen 1 else
-- case 4 n
intersect(s, d, edge) addlist(n, olist)
addlist(d, olist) olen olen 2 else
if (inside(s, edge) then -- case 2
n intersect(s, d, edge) addlist(n, olist)
olen s d end_for
17Sutherland-Hodgman SHclip(var ilist, olist
list ilen, olen integer) SHclippedge(ilist,
tmplist1, ilen, tlen1, RIGHT)
SHclippedge(tmplist1, tmplist2, tlen1, tlen2,
BOTTOM) SHclippedge(tmplist2, tmplist1, tlen2,
tlen1, LEFT) SHclippedge(tmplist1, olist,
tlen1, olen, TOP)
18With Pictures
19Sutherland-Hodgman
- Advantages
- Elegant (few special cases)
- Robust (handles boundary and edge conditions
well) - Well suited to hardware
- Canonical clipping makes fixed-point
- implementations manageable
- Disadvantages
- Only works for convex clipping volumes
- Often generates more than the minimum number of
triangles needed - Requires a divide per edge
20Interpolating Parameters
213D Clipping (Planes)
- Red Polygon Clip
- Transform into 4D Clipping space (canonical
viewing volume) Homogenous co-ordinates
22Naïve 3D Euclidean Space Clipping
After perspective projection, Euclidean space is
not linear!!
23Difficulty with Euclidean Space Clipping
- Clipping will handle most cases. However, there
is one case in general that cannot be handled
this way. - Parts of a primitive lie both in front of and
behind the viewpoint. This complication is caused
by our projection stage. - It has the nasty habit of mapping objects in
behind the viewpoint to positions in front of it. - Solution clip in homogeneous coordinate
244DPolygonClip
- Use Sutherland Hodgman algorithm
- Use arrays for input and output lists
- There are six planes of course !
254D Clipping
- OpenGL uses -1ltxlt1, -1ltylt1, -1ltzlt1
- We use -1ltxlt1, -1ltylt1, -1ltz lt0
- Must clip in homogeneous coordinates
- wgt0 -wltxltw, -wltyltw, -wltzlt0
- wlt0 -wgtxgtw, -wgtygtw, -wgtzgt0
- Consider each case separately
- What issues arise ?
264D Clipping
- Point A is inside, Point B is outside. Clip edge
AB - x Ax t(Bx Ax)
- y Ay t(By Ay)
- z Az t(Bz Az)
- w Aw t(Bw Aw)
- Clip boundary x/w 1 i.e. (xw0)
- w-x Aw Ax t(Bw Aw Bx Ax) 0
- Solve for t.
27Still have issues with 4D Clipping
- P1 and P2 map to same physical point !
- Solution
- Clip against both regions
- Negate points with negative W
28Still have issues with 4D Clipping
P2
- Line straddles both regions
- After projection one gets two line segments
- How to do this? Only before the perspective
division
29More on Perspective Transform
- There are a number of perspective matrices
depending on the field of view desired, and the
near and far plane. But same essential idea a
perspective matrix moves the depth value z into
the fourth column, where it will used to divide
through the x and y values - when the final homogeneous coordinate is
translated back into a 3D point (3D image space),
z is usually referred to as depth of the point
30More on perspective transforms
31More on Perspective Transform
- Perspective projections categorized by the number
of axis the view plane cuts (ie 1-point, 2-point
or 3-point perspective) - the plane cuts the z axis, lines parallel to the
z meets at infinity lines parallel to the x or y
axis will not meet at infinity. 1-point
perspective. - the plane cuts the x and z axis, lines parallel
to the x/z axis meet at infinity lines parallel
to the y axis will not meet at infinity. 2-point
perspective. - if the plane cuts the x, y, and z axis then lines
parallel to the x, y, or z axis will meet at
infinity. This is 3-point perspective.
32More on Homogeneous Coordinates
- To 4D (x,y,z) -gt (x,y,z,1)
- Back to 3D (x,y,z,w) -gt (x/w, y/w, z/w)
- A point is on a plane if the point satisfies 0
Ax By Cz D - Point P (x,y,z,1).
- Representing a plane N (A,B,C,D). Point P is on
the plane, if P dot N 0
33Transforming Normals
34Transforming Normals
- Transform P to P -gt P M P (M is known)
- and transform N to N -gt N Q N
- Let Q be our transformation matrix for N.
- We want to make sure that after transformation,
N is the normal of the transformed plane. That
is, NT P 0 - We get
- NT P (Q N)T (M P) NT QT
M P 0
35Transforming Normals
- So, need QT M Identity
- Then, QT M 1
- Still, we want N Q N.
- Q (M 1)T
36Viewing Pipeline Revisited
Canonical view volume
- Object space coordinate where each component is
defined - World space all components put together via
affine transformation. (camera, lighting defined
in this space) - Eye space camera at the origin, view direction
coincides with the z axis. Hither and Yon
perpendicular to the z axis - Clipping space All point is in homogeneous
coordinate. Perspective division gets everything
into 3D image space. - 3D image space (Canonical view volume) a
parallelpipied shape defined by (-11,-11,0,1).
Objects distorted. - Screen space x and y mapped to screen pixel
coordinates
37Right-Handed Or Left-Handed
- Usually use right-handed coordinate (convention
in math) - Left-handed good for screen
- To convert, just flip x or y or z. (any one of
the three)
38How about the viewing pipeline?
- The range of z for the canonical view volume is
0,1. x and y still remain the same. - Is converting back and forth (flipping) a major
issue?