Introduction to Computer Graphics CS 445 / 645 Lecture 4 OpenGL OpenGL OpenGL Programming Guide.
OpenGL Geometric Transformations. OpenGL Matrix Stacks Stack processing –The top of the stack is...
Transcript of OpenGL Geometric Transformations. OpenGL Matrix Stacks Stack processing –The top of the stack is...
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)