Clipping Jian Huang, CS594 This set of slides reference slides devised

advertisement
Clipping
Jian Huang, CS594
This set of slides reference slides devised
at Ohio State and MIT.
Viewing Pipeline Revisited
Object
Space
World
Space
Eye
Space
Clipping
Space
Canonical
view volume
Screen
Space
– 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 (-1:1,-1:1,0,1). Objects distorted.
– Screen space: x and y mapped to screen pixel coordinates
May 29, 2016
2
Why 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
May 29, 2016
3
What 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.
May 29, 2016
4
Point Clipping
Ymax
Ymin
Xmin
(x, y)
Xmax
is inside iff
Xmin  x  Xmax AND Y
min  y  Ymax
May 29, 2016
5
Line 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)

=
ymax
interior
ymin
xmin
May 29, 2016
xmax
y < ymax
x > xmin
y > ymin
x < xmax
6
Line 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
•
•
•
May 29, 2016
Both endpoints inside:
trivial accept
One inside: find
intersection and clip
Both outside: either clip or
reject (tricky case)
7
Cohen-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.
May 29, 2016
8
Cohen-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
May 29, 2016
9
The 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
May 29, 2016
10
The Maybe case
May 29, 2016
11
The Maybe Case
May 29, 2016
12
One 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.
May 29, 2016
13
Sutherland-Hodgman
Polygon 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
May 29, 2016
14
Polygon Clipping At Work
May 29, 2016
15
Sutherland-Hodgman
SHclippedge(var: ilist, olist: list; ilen, olen, edge : integer)
s = ilist[ilen];
olen = 0;
for i = 1 to ilen do
d := ilist[i];
if (inside(d, edge) then
if (inside(s, edge) then
addlist(d, olist);
-- case 1
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;
May 29, 2016
16
Sutherland-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);
May 29, 2016
17
With Pictures
May 29, 2016
18
Sutherland-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
May 29, 2016
19
Interpolating Parameters
May 29, 2016
20
3D Clipping (Planes)
y
x
z
image plane
near
far
Red Polygon – Clip
Transform into 4D Clipping space (canonical
viewing volume) Homogenous co-ordinates
May 29, 2016
21
Naïve 3D Euclidean Space
Clipping
After perspective projection, Euclidean space is not
linear!!
May 29, 2016
22
Difficulty 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
May 29, 2016
23
4DPolygonClip
 Use Sutherland Hodgman algorithm
 Use arrays for input and output lists
 There are six planes of course !
May 29, 2016
24
4D Clipping



OpenGL uses -1<=x<=1, -1<=y<=1, -1<=z<=1
We use: -1<=x<=1, -1<=y<=1, -1<=z <=0
Must clip in homogeneous coordinates:
 w>0: -w<=x<=w, -w<=y<=w, -w<=z<=0
 w<0: -w>=x>=w, -w>=y>=w, -w>=z>=0


Consider each case separately
What issues arise ?
May 29, 2016
25
4D 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. (x–w=0);
w-x = Aw – Ax + t(Bw – Aw – Bx + Ax) = 0
Solve for t.
May 29, 2016
26
Still have issues with 4D Clipping
W=-X
W=X
P1=[1,2,3,4]
W=1
P2=[-1,-2,-3,-4]
P1 and P2 map to same physical point !
Solution:
Clip against both regions
Negate points with negative W
May 29, 2016
27
Still have issues with 4D Clipping
P1
-Inf
W=1
Inf
P2
 Line straddles both regions
 After projection one gets two line segments
 How to do this? Only before the perspective division
May 29, 2016
28
More 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
May 29, 2016
29
More on perspective transforms
May 29, 2016
30
More on Perspective Transform

Perspective projections categorized by the
number of axis the view plane cuts (ie 1point, 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.
May 29, 2016
31
More on Homogeneous
Coordinates
To 4D: (x,y,z) -> (x,y,z,1)
 Back to 3D: (x,y,z,w) -> (x/w, y/w, z/w)
 A point is on a plane if the point satisfies
0 == A*x + B*y + C*z + 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

May 29, 2016
32
Transforming Normals
May 29, 2016
33
Transforming Normals
Transform P to P’ -> P’ = M * P (M is known)
 and transform N to N’ -> 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, N’T * P’ = 0
 We get:
N’T * P’ = (Q * N)T * (M * P) = NT * QT * M * P = 0
May 29, 2016
34
Transforming Normals
So, need QT *M = Identity
T
–1
 Then, Q = M
 Still, we want N’ = Q * N.
–1 T
 Q = (M )

May 29, 2016
35
Viewing Pipeline Revisited
Object
Space
World
Space
Eye
Space
Clipping
Space
Canonical
view volume
Screen
Space
– 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 (-1:1,-1:1,0,1). Objects distorted.
– Screen space: x and y mapped to screen pixel coordinates
May 29, 2016
36
Right-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)

May 29, 2016
37
How 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?

May 29, 2016
38
Download