opengl geometric transformations. opengl matrix stacks stack processing –the top of the stack is...
TRANSCRIPT
OpenGLGeometric Transformations
OpenGL Matrix Stacks
• Stack processing– The top of the stack is the “current” matrix– glPushMatrix(); // Duplicate the current matrix at the top
– glPopMatrix(); // Remove the matrix at the top
로보트 팔 만들기
Hierarchical Modeling
• A hierarchical model is created by nesting the descriptions of subparts into one another to form a tree organization
Homework #2
• 다각형을 이용하여 움직이는 2 차원 아름다운 애니메이션 만들기
• Push/Pop Matrix 를 사용하여 2 단계 이상의 계층적인 움직임 디자인을 할 것– Ex): 태양계 시스템 ( 태양지구달 )
사람의 움직임 ( 몸어깨팔꿈치손목손 )
• 숙제제출 : 이메일 제출 (Screenshot, code, report)• 숙제마감 : 4 월 28 일 수요일 23 시 59 분까지
Viewing Part I: Two-Dimensional Viewing
Sang Il Park
Sejong University
Lots of slides are stolen from Jehee Lee’s
Two-Dimensional Viewing
• Two dimensional viewing transformation– From world coordinate scene description to device
(screen) coordinates
Normalization and Viewport Transformation
• World coordinate clipping window• Normalization square: usually [-1,1]x[-1,1]• Device coordinate viewport
OpenGL 2D Viewing
• Projection Mode– glMatrixMode(GL_PROJECTION);
• GLU clipping-window function– gluOrtho2D(xwmin,xwmax,ywmin,ywmax);– Normalized to [-1,1]x[-1,1]
• OpenGL viewport function– glViewport(xvmin,xvmax,yvmin,yvmax);
GLUT window Functions:
• glutInitWindowPosition• glutInitWindowSize• glutCreateWindow• glutDestroyWindow• glutSetWindow/glutGetWindow• ….. And more!
• See the text book pp 346~354
Clipping
• Remove portion of output primitives outside clipping window
• Two approaches– Clip during scan conversion: Per-pixel bounds check– Clip analytically, then scan-convert the
modified primitives
Two-Dimensional Clipping
• Point clipping – trivial• Line clipping
– Cohen-Sutherland– Cyrus-beck– Liang-Barsky
• Fill-area clipping– Sutherland-Hodgeman– Weiler-Atherton
• Curve clipping• Text clipping
Line Clipping
• Basic calculations:– Is an endpoint inside or outside the clipping window?– Find the point of intersection, if any, between a line
segment and an edge of the clipping window.
Both endpoints inside:
trivial accept
One inside: find
intersection and clip
Both outside: either
clip or reject
Cohen-Sutherland Line Clipping
• One of the earliest algorithms for fast line clipping• Identify trivial accepts and rejects by bit operations
< Region code for each endpoint >
above below right leftBit 4 3 2 1
0000
10001001
0001
0101 0100 0110
0010
1010Clipping window
Cohen-Sutherland Line Clipping
• Compute region codes for two endpoints• If (both codes = 0000 ) trivially accepted• If (bitwise AND of both codes 0000) trivially rejected• Otherwise, divide line into two segments
– test intersection edges in a fixed order.
(e.g., top-to-bottom, right-to-left)
0000
10001001
0001
0101 0100 0110
0010
1010Clipping window
Cohen-Sutherland Line Clipping
• Fixed order testing and clipping cause needless clipping (external intersection)
Cohen-Sutherland Line Clipping
• This algorithm can be very efficient if it can accept and reject primitives trivially– Clip window is much larger than scene data
• Most primitives are accepted trivially– Clip window is much smaller than scene data
• Most primitives are rejected trivially
• Good for hardware implementation
Cyrus-Beck Line Clipping
• Use a parametric line equation
• Reduce the number of calculating intersections by exploiting the parametric form
• Notations– Ei : edge of the clipping window
– Ni : outward normal of Ei
– An arbitrary point PEi on edge Ei
10 ),()( 010 tPPtPtP
Cyrus-Beck Line Clipping
halfplane outside in thepoint a0))((
edge thecontaining line on thepoint a0))((
halfplane inside in thepoint a0))((
i
i
i
Ei
Ei
Ei
PtPN
PtPN
PtPN
Cyrus-Beck Line Clipping
• Solve for the value of t at the intersection of P0P1 with the edge– Ni · [P(t) - PEi] = 0 and P(t) = P0 + t(P1 - P0)
– letting D = (P1 - P0),
– Where
• Ni 0
• D 0 (that is, P0 P1)
• Ni · D 0 (if not, no intersection)
DN
PPNt
i
Eii
][ 0
Cyrus-Beck Line Clipping• Given a line segment P0P1, find intersection
points against four edges– Discard an intersection point if t [0,1] – Label each intersection point either PE
(potentially entering) or PL (potentially leaving)– Choose the smallest (PE, PL) pair that defines the
clipped line
PL0
PE0
10
10
PPN
PPN
i
i
Liang-Barsky Line Clipping
• Liang-Barsky optimized Cyrus-Beck for upright rectangular clip windows
),(1
),(0
22
11
yxQt
yxPt
tdyyyytyy
tdxxxxtxx
1121
1121
)(
)(
P(x1,y1)
Q(x2.y2)
tB
tT
tR
tL
Liang-Barsky Line Clipping
T
B
RL
tT
tB
Cyrus-Beck Line Clipping
• Cyrus-Beck is efficient when many line segments need to be clipped
• Can be extended easily to convex polygon (rather than upright rectangle) clip windows
Nicholl-Lee-Nicholl Line Clipping
• Divide more cases and reduce the computation.
(1)
(2)(3)
General Clipping Window
• Line clipping using nonrectangular polygon clip windows– Convex polygon
• Cyrus-Beck algorithm can be readily extended– Concave polygon
• Split the concave polygon into convex polygons
Vector Method for Concave Splitting
• Calculate edge-vector cross products in a counterclockwise order
• If any z component turns out to be negative, the polygon is concave
Polygon Fill-Area Clipping
• Polyline vs polygon fill-area
• Early rejection is useful
Clipping Window
Bounding box of polygon fill area
Sutherland-Hodgman Polygon Clipping
• Clip against 4 infinite clip edges in succession
Sutherland-Hodgman Polygon Clipping
• Accept a series of vertices (polygon) and outputs another series of vertices
• Four possible outputs
Sutherland-Hodgman Polygon Clipping
• The algorithm correctly clips convex polygons, but may display extraneous lines for concave polygons
Weiler-Atherton Polygon Clipping
• For an outside-to-inside pair of vertices, follow the polygon boundary
• For an inside-to-outside pair of vertices, follow the window boundary in a clockwise direction
Weiler-Atherton Polygon Clipping
• Polygon clipping using nonrectangular polygon clip windows
Text Clipping
• All-or-none text clipping– Using boundary box for the entire text
• All-or-non character clipping– Using boundary box for each individual character
• Character clipping– Vector font: Clip boundary polygons or curves– Bitmap font: Clip individual pixels
Three-Dimensional Viewing
Sang Il ParkSejong University
Lots of slides are stolen from Jehee Lee’s
Viewing Pipeline
Virtual Camera Model
• Viewing Transformation– The camera position and orientation is determined
• Projection Transformation– The selected view of a 3D scene is projected onto a
view plane
General 3D Viewing Pipeline
• Modeling coordinates (MC)• World coordinates (WC)• Viewing coordinates (VC)• Projection coordinates (PC)• Normalized coordinates (NC)• Device coordinates (DC)
Viewing-Coordinate Parameters
• View point (eye point or viewing position)
• View-plane normal vector N
),,( 0000 zyxP
Viewing-Coordinate Parameters
• Look-at point Pref
• View-up vector V– N and V are specified in the world coordinates– V should be perpendicular to N, but it can be difficult
to a direction for V that is precisely perpendicular to N
refPPN 0
Viewing-Coordinate Reference Frame
• The camera orientation is determined by the uvn reference frame
),,(
),,(
),,(
zyx
zyx
zyx
vvv
uuu
nnn
unv
V
nVu
N
Nn
u
nv
World-to-Viewing Transformation
• Transformation from world to viewing coordinates– Translate the viewing-coordinate origin to the world-
coordinate origin– Apply rotations to align the u, v, n axes with the world
xw, yw, zw axes, respectively
u
nv
World-to-Viewing Transformation
1000
100
010
001
1000
0
0
0
0
0
0
z
y
x
nnn
vvv
uuu
zyx
zyx
zyx
TR
10000
0
0
, Pn
Pv
Pu
TRMzyx
zyx
zyx
vcwc nnn
vvv
uuu
Perspective Projection
• Pin-hold camera model– Put the optical center (Center Of Projection) at the origin– Put the image plane (Projection Plane) in front of the COP– The camera looks down the negative z axis
• we need this if we want right-handed-coordinates
Parallel Projection
• Special case of perspective projection– Distance from the COP to the PP is infinite
– Also called “parallel projection”
– What’s the projection matrix?
Image World
Slide by Steve Seitz
Taxonomy of Geometric Projections
geometric projections
parallel perspective
orthographic axonometric oblique
trimetric
dimetric
isometric
cavalier cabinet
single-point two-point three-point
Orthographic Transformation
• Preserves relative dimension• The center of projection at infinity• The direction of projection is parallel to a principle axis• Architectural and engineering drawings
Axonometric Transformation
• Orthogonal projection that displays more than one face of an object– Projection plane is not normal to a principal axis, but
DOP is perpendicular to the projection plane– Isometric, dimetric, trimetric
Oblique Parallel Projections
• Projection plane is not normal to a principal axis, but DOP is perpendicular to the projection plane
• Only faces of the object parallel to the projection plane are shown true size and shape
Oblique Parallel Projections
www.maptopia.com
Oblique Parallel Projections
Oblique Parallel Projections
• Typically, is either 30˚ or 45˚• L1 is the length of the projected side edge
– Cavalier projections• L1 is the same as the original length
– Cabinet projections• L1 is the half of the original length
Oblique Parallel Projections
• Cavalier projections
• Cabinet projections
Perspective Projection
• Pin-hold camera model– Put the optical center (Center Of Projection) at the origin– Put the image plane (Projection Plane) in front of the COP– The camera looks down the negative z axis
• we need this if we want right-handed-coordinates
Perspective Projection
• Projection equations– Compute intersection with PP of ray from (x,y,z) to COP– Derived using similar triangles (on board)
– We get the projection by throwing out the last coordinate:
Homogeneous coordinates
• Is this a linear transformation?
Homogeneous coordinates
• Trick: add one more coordinate:
• Converting from homogeneous coordinates
homogeneous projection coordinates
homogeneous viewing coordinates
Perspective Projection• Projection is a matrix multiply using homogeneous coordinates:
divide by third coordinate
• This is known as perspective projection– The matrix is the projection matrix– Can also formulate as a 4x4
divide by fourth coordinate
Perspective Projection
• The projection matrix can be much involved, if the COP is different from the origin of the uvn coordinates– See the textbook for the detailed matrix
Traditional Classification of Projections
• Three principle axes of the object is assumed– The front, top, and side face of the scene is apparent
Traditional Classification of Projections
Perspective-Projection View Volume
• Viewing frustum– Why do we need near and far clipping plane ?
Normalizing Transformation
• Transform an arbitrary perspective-projection view volume into the canonical view volume
• Step 1: from frustum to parallelepiped
Normalizing Transformation
• Transform an arbitrary perspective-projection view volume into the canonical view volume
• Step 2: from parallelepiped to normalized
OpenGL 3D Viewing Functions
• Viewing-transformation function– glMatrixMode(GL_MODELVIEW);– gluLookAt(x0,y0,z0,xref,yref,zref,vx,vy,vz);– Default: gluLookAt(0,0,0, 0,0,-1, 0,1,0);
• OpenGL orthogonal-projection function– glMatrixMode(GL_PROJECTION);– gluOrtho(xwmin,xwmax, ywmin,ywmax, dnear,dfar);– Default: gluOrtho(-1,1, -1,1, -1,1);– Note that
• dnear and dfar must be assigned positive values• znear=-dnear and zfar=-dfar• The near clipping plane is the view plane
OpenGL 3D Viewing Functions
• OpenGL perspective-projection function– The projection reference point is the viewing-coordinate origin– The near clipping plane is the view plane– Symmetric: gluPerspective(theta,aspect,dnear,dfar)– General: glFrustum(xwmin,xwmax,ywmin,ywmax,dnear,dfar)