2d viewing - biuu.cs.biu.ac.il/~kapaho/cg/05_view2d.pdf · cg-idc 3 • objects are given in world...
TRANSCRIPT
CG-IDC 1
2D ViewingChapt. 3 in FVD, Chapt. 6 in HB
Viewing Transformation pipe-line.
Clipping:
Line Clipping
Polygon Clipping
CG-IDC 2
3D Viewing Transformation Pipeline
Device Coordinates
Viewport
World CoordinatesObject in World
Viewing coordinates
2D:2D mapping
CG-IDC 3
• Objects are given in world coordinates.
• The world is viewed through a window.
• The window is mapped onto a device
viewport.
A scene in World-
Coordinates
World-Coordinates to
Viewing Coordinates
Viewing Coordinates to
Normalized Device
Coordinates
Normalized Device
Coordinates to Device
Coordinates
WC
VC
NDC
DC
Clipping
CG-IDC 4
Viewing Trans. in 2D
x world
y world
World and Viewing
Coordinates
Normalized Device
Coordinates
1
1
Clipping
Device Coordinates
CG-IDC 5
World to Viewing
Coordinates
• In order to define the viewing window
we have to specify:
– Windowing-coordinate origin P0=(x0,y0).
– View vector up v=(vx,vy).
• Using v, we can find u: u=v x (0,0,1)
• Transformation from World coordinates
to Viewing coordinates is:
x world
y world
(x0,y0)
(vx,vy).
(ux,uy).
100
10
01
100
0
0
0
0
y
x
vv
uu
M yx
yx
vcwc
CG-IDC 6
Window to Viewport
Transformation
(xmin,ymin)
(xmax,ymax)
Window is Viewing
coordinatesWindow translated
to origin
Window scaled to
Normalized
Viewport size
Window scaled and
translated to Viewport
location in device
coordinates
(umin,vmin)
(umaxn,vmaxn)
100
10
01
100
010
001
100
00
00
100
10
01
min
min
minmax
minmax
minmax
minmax
min
min
y
x
yy
xx
vv
uu
v
u
M dcvc
Normalized Device Coord.
CG-IDC 7
The problem:
Given a set of 2D lines or
polygons and a window, clip the
lines or polygons to their regions
that are inside the window.
Line / Polygon Clipping(Chapt 6 in HB, Chapt. 3 in FVD)
CG-IDC 8
Motivation
• Efficiency.
• Display in portion of a screen.
• Occlusions.
clip rectangle
CG-IDC 9
Clipping (cont.)
• We will deal only with lines
(segments).
• Our window can be described by
two extreme points:
(xmin,ymin) and (xmax,ymax)
• A point (x,y) is in the window iff:
xmin x xmax and ymin y ymax
CG-IDC 10
Analytic Solution
• The intersection of two convex regions is
always convex (why?).
• Since both W and S are convex, their
intersection is convex, i.e a single
connected segment of S.
• Question: Can the boundary of two
convex shapes intersect more than twice?
0, 1, or 2 intersections between a line and a window
W W W
S S S
CG-IDC 11
Cohen-Sutherland for Line
Clipping
• Clipping is performed by the
computation of the intersections with
four boundary segments of the window:
Li, i=1,2,3,4
• Purpose: Fast treatment of lines that are
trivially inside/outside the window.
• Let P=(x,y) be a point to be classified
against window W.
• Idea: Assign P a binary code consisting
of a bit for each edge of W, whose value
is determined according to the following
table:
CG-IDC 12
bit 1 0
1
2
3
y < ymin
y > ymax
x > xmax
y ymin
y ymax
x xmax
4 x < xmin x xmin
0101
0001
01100100
1001
0010
1010
0000
1000
ymin
ymax
xmin xmax
1
2
34
CG-IDC 13
Cohen-Sutherland (cont.)
• Given a line segment S from p0=(x0,y0)
to p1=(x1,y1) to be clipped against a
window W.
• If code(p0) AND code(p1) is not zero -
then S is trivially rejected.
• If code(p0) OR code(p1) is zero - then
S is trivially accepted.
0101
0001
01100100
1001
0010
1010
0000
1000
CG-IDC 14
• Otherwise: let assume w.l.o.g. that p0 is
outside the window W.
– Find the intersection of S with the
edge corresponding to the MSB in
code(p0) that equal to 1. Call the
intersection point p2.
– Rerun the procedure for the new
segment (p1 , p2).
A
BC
D
E
F
GH
I
1
2
34
CG-IDC 15
V0
V1
Background: Inside/Outside Test
inside
• Assume WLOG that V=(V1-V0) is the
border vector where "inside" is to its
right.
• If V=(Vx,Vy), N is a vector pointing
outside, where we define:
N=(-Vy,Vx)
• Vector U points "outside" if
• Otherwise U points "inside".
N
U
0UN
CG-IDC 16
Background: Segment-Line Intersection
• The parametric line P(t)=P0+(P1-P0)t
• The parametric vector V(t)=P(t)-Q
• The segment P0P1 intersects the line L at t0
satisfying V(t0)·N=0.
• The intersection point is P(t0).
• The vector =P1-P0 points "inside" if (P1-
P0)·N<0. Otherwise it points "outside".
• If L is vertical, intersection can be
computed using the explicit equation.
P0
inside
NQ
P1V(t)
L
CG-IDC 17
Cyrus-Beck Line Clipping
• Denote p(t)=p0+(p1-p0)t t[0..1]
• Let Qi be a point on the edge Li with
outside pointing normal Ni.
• V(t) = p(t)-Qi is a parameterized
vector from Qi to the segment P(t).
• Ni· V(t) = 0 iff V(t) Ni
• We are looking for t satisfying the
above equation:
p0
p1
Ni Qi
CG-IDC 18
Cyrus-Beck Clipping (cont.)
0 = Ni· V(t)
= Ni· (p(t)-Qi)
= Ni· (p0+(p1-p0)t-Qi)
= Ni· (p0-Qi) + Ni· (p1-p0)t
Solving for t we get:
where =(p1-p0)
• Comment: If Ni· =0, t has no
solution. However, in this case V(t) Ni
and there is no intersection.
Ni· (p0-Qi)
-Ni· (p1-p0)t =
Ni· (p0-Qi)
-Ni· =
CG-IDC 19
Cyrus-Beck Algorithm:
• The intersection of p(t) with all four
edges Li is computed, resulting in up to
four ti values.
• If ti<0 or ti>1 , ti can be discarded.
• Based on the sign of Ni· , each
intersection point is classified as PE
(potentially entering) or PL
(potentially leaving).
• PE with the largest t and PL with the
smallest t provide the domain of p(t)
inside W.
• The domain, if inverted, signals that
p(t) is totally outside.
CG-IDC 20
p1
p0
PL
PE
p0
p1
PE
PE
PL
PL
p1
PL
PEp0
CG-IDC 21
Polygon Clipping
CG-IDC 22
Sutherland-Hodgman
Polygon-Clipping Algorithm
Clip a polygon by successively clipping
against each (infinite) clip edge.
After each clipping a new set of vertices is
produced.
right clip boundary bottom clip boundary
left clip boundary top clip boundary
CG-IDC 23
For each clip edge - scan the polygon and
consider the relation between successive
vertices of the polygon:
Assume vertex s has been dealt with, vertex
p follows:
clip boundary
inside outsides
p
clip boundary
inside outside
s
p
clip boundary
inside outsidep si
s
clip boundary
inside outside
pi
p added tooutput list
i added tooutput list no output i and p added to
output list
CG-IDC 24
Window
V3
V'2
V”2
V1
V’3
V2
V’1
Right
Clipping
Bottom
Clipping
Top
Clipping
Left
Clipping
V1
V2
V3
V1
V2
V’2
V’3
Example:
V1
V2
V’2
V’3
V’1
V2
V’2
V”2
V’1
V2
V’2
V”2