Viewing/Projections I Week 3, Fri Jan 25
description
Transcript of Viewing/Projections I Week 3, Fri Jan 25
![Page 1: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/1.jpg)
University of British ColumbiaCPSC 314 Computer Graphics
Jan-Apr 2008
Tamara Munzner
http://www.ugrad.cs.ubc.ca/~cs314/Vjan2008
Viewing/Projections I
Week 3, Fri Jan 25
![Page 2: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/2.jpg)
2
Reading for This and Next 2 Lectures
• FCG Chapter 7 Viewing
• FCG Section 6.3.1 Windowing Transforms
• RB rest of Chap Viewing
• RB rest of App Homogeneous Coords
![Page 3: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/3.jpg)
3
Review: Display Lists
• precompile/cache block of OpenGL code for reuse• usually more efficient than immediate mode
• exact optimizations depend on driver
• good for multiple instances of same object• but cannot change contents, not parametrizable
• good for static objects redrawn often• display lists persist across multiple frames• interactive graphics: objects redrawn every frame from new
viewpoint from moving camera
• can be nested hierarchically• snowman example: 3x performance improvement, 36K polys
![Page 4: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/4.jpg)
4
Review: Computing Normals
• normal• direction specifying orientation of polygon
• w=0 means direction with homogeneous coords• vs. w=1 for points/vectors of object vertices
• used for lighting• must be normalized to unit length
• can compute if not supplied with object
1P
N
2P
3P)()( 1312 PPPPN −×−=
N
![Page 5: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/5.jpg)
5
Review: Transforming Normals
• cannot transform normals using same matrix as points• nonuniform scaling would cause to be not
perpendicular to desired plane!
MPP ='PN QNN ='
given M,given M,what should Q be?what should Q be?
( )T1MQ −= inverse transpose of the modelling transformation
![Page 6: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/6.jpg)
6
Viewing
![Page 7: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/7.jpg)
7
Using Transformations
• three ways• modelling transforms
• place objects within scene (shared world)• affine transformations
• viewing transforms• place camera• rigid body transformations: rotate, translate
• projection transforms • change type of camera• projective transformation
![Page 8: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/8.jpg)
8
Rendering Pipeline
Scene graphObject geometry
ModellingTransforms
ViewingTransform
ProjectionTransform
![Page 9: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/9.jpg)
9
Scene graphObject geometry
ModellingTransforms
ViewingTransform
ProjectionTransform
Rendering Pipeline
• result• all vertices of scene in shared
3D world coordinate system
![Page 10: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/10.jpg)
10
Scene graphObject geometry
ModellingTransforms
ViewingTransform
ProjectionTransform
Rendering Pipeline
• result• scene vertices in 3D view
(camera) coordinate system
![Page 11: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/11.jpg)
11
Scene graphObject geometry
ModellingTransforms
ViewingTransform
ProjectionTransform
Rendering Pipeline
• result• 2D screen coordinates of
clipped vertices
![Page 12: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/12.jpg)
12
Viewing and Projection
• need to get from 3D world to 2D image
• projection: geometric abstraction• what eyes or cameras do
• two pieces• viewing transform:
• where is the camera, what is it pointing at?
• perspective transform: 3D to 2D• flatten to image
![Page 13: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/13.jpg)
13
Rendering Pipeline
GeometryDatabaseGeometryDatabase
Model/ViewTransform.Model/ViewTransform. LightingLighting Perspective
Transform.PerspectiveTransform. ClippingClipping
ScanConversion
ScanConversion
DepthTest
DepthTest
TexturingTexturing BlendingBlendingFrame-buffer
Frame-buffer
![Page 14: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/14.jpg)
14
Rendering Pipeline
GeometryDatabaseGeometryDatabase
Model/ViewTransform.Model/ViewTransform. LightingLighting Perspective
Transform.PerspectiveTransform. ClippingClipping
ScanConversion
ScanConversion
DepthTest
DepthTest
TexturingTexturing BlendingBlendingFrame-buffer
Frame-buffer
![Page 15: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/15.jpg)
15
OpenGL Transformation Storage
• modeling and viewing stored together• possible because no intervening operations
• perspective stored in separate matrix
• specify which matrix is target of operations• common practice: return to default modelview
mode after doing projection operations
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_PROJECTION);
![Page 16: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/16.jpg)
16
Coordinate Systems
• result of a transformation• names
• convenience• mouse: leg, head, tail
• standard conventions in graphics pipeline• object/modelling• world• camera/viewing/eye• screen/window• raster/device
![Page 17: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/17.jpg)
17
Projective Rendering Pipeline
OCS - object/model coordinate system
WCS - world coordinate system
VCS - viewing/camera/eye coordinate system
CCS - clipping coordinate system
NDCS - normalized device coordinate system
DCS - device/display/screen coordinate system
OCSOCS O2WO2W VCSVCS
CCSCCS
NDCSNDCS
DCSDCS
modelingmodelingtransformationtransformation
viewingviewingtransformationtransformation
projectionprojectiontransformationtransformation
viewportviewporttransformationtransformation
perspectiveperspectivedividedivide
object world viewing
device
normalizeddevice
clipping
W2VW2V V2CV2C
N2DN2D
C2NC2N
WCSWCS
![Page 18: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/18.jpg)
18
Viewing Transformation
OCSOCS WCSWCS VCSVCSmodelingmodeling
transformationtransformationviewingviewing
transformationtransformation
OpenGL ModelView matrix
object world viewing
y
x
VCS
Peye
z
y xWCS
y
zOCS
imageplane
MMmodmod MMcamcam
![Page 19: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/19.jpg)
19
Basic Viewing
• starting spot - OpenGL• camera at world origin
• probably inside an object
• y axis is up• looking down negative z axis
• why? RHS with x horizontal, y vertical, z out of screen
• translate backward so scene is visible• move distance d = focal length
• where is camera in P1 template code?• 5 units back, looking down -z axis
![Page 20: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/20.jpg)
20
Convenient Camera Motion
• rotate/translate/scale versus• eye point, gaze/lookat direction, up vector
• demo: Robins transformation, projection
![Page 21: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/21.jpg)
21
OpenGL Viewing Transformation
gluLookAt(ex,ey,ez,lx,ly,lz,ux,uy,uz)
• postmultiplies current matrix, so to be safe:
glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(ex,ey,ez,lx,ly,lz,ux,uy,uz)// now ok to do model transformations
• demo: Nate Robins tutorial projection
![Page 22: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/22.jpg)
22
Convenient Camera Motion
• rotate/translate/scale versus• eye point, gaze/lookat direction, up vector
Peye
Pref
upview
eye
lookaty
z
xWCS
![Page 23: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/23.jpg)
23
From World to View Coordinates: W2V
• translate eye to origin
• rotate view vector (lookat – eye) to w axis
• rotate around w to bring up into vw-plane
y
z
xWCS
v
u
VCS
Peyew
Pref
upview
eye
lookat
![Page 24: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/24.jpg)
24
Deriving W2V Transformation
• translate eye to origin
€
T =
1 0 0 ex
0 1 0 ey
0 0 1 ez
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
y
z
xWCS
v
u
VCS
Peyew
Pref
upview
eye
lookat
![Page 25: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/25.jpg)
25
Deriving W2V Transformation
• rotate view vector (lookat – eye) to w axis• w: normalized opposite of view/gaze vector g
€
w = −ˆ g = −g
g
y
z
xWCS
v
u
VCS
Peyew
Pref
upview
eye
lookat
![Page 26: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/26.jpg)
26
Deriving W2V Transformation
• rotate around w to bring up into vw-plane• u should be perpendicular to vw-plane, thus
perpendicular to w and up vector t• v should be perpendicular to u and w
€
u =t × w
t × w
€
v = w × uy
z
xWCS
v
u
VCS
Peyew
Pref
upview
eye
lookat
![Page 27: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/27.jpg)
27
Deriving W2V Transformation
• rotate from WCS xyz into uvw coordinate system with matrix that has columns u, v, w
• reminder: rotate from uvw to xyz coord sys with matrix M that has columns u,v,w
€
u =t × w
t × w
€
v = w × u
€
w = −ˆ g = −g
g
€
R =
ux vx wx 0
uy vy wy 0
uz vz wz 0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
MW2V=TR
€
T =
1 0 0 ex
0 1 0 ey
0 0 1 ez
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
![Page 28: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/28.jpg)
28
W2V vs. V2W
• MW2V=TR
• we derived position of camera in world• invert for world with respect to camera
• MV2W=(MW2V)-1=R-1T-1
• inverse is transpose for orthonormal matrices• inverse is negative for translations€
T−1 =
1 0 0 −ex
0 1 0 −ey
0 0 1 −ez
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
€
R−1 =
ux uy uz 0
vx vy vz 0
wx wy wz 0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
€
T =
1 0 0 ex
0 1 0 ey
0 0 1 ez
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
€
R =
ux vx wx 0
uy vy wy 0
uz vz wz 0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
![Page 29: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/29.jpg)
29
W2V vs. V2W
• MW2V=TR
• we derived position of camera in world• invert for world with respect to camera
• MV2W=(MW2V)-1=R-1T-1
€
T =
1 0 0 ex
0 1 0 ey
0 0 1 ez
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
€
R =
ux vx wx 0
uy vy wy 0
uz vz wz 0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
€
Mview2world
=
ux uy uz 0
vx vy vz 0
wx wy wz 0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
1 0 0 −ex0 1 0 −ey0 0 1 −ez0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
=
ux uy uz −exvx vy vz −eywx wy wz −ez0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
![Page 30: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/30.jpg)
30
Moving the Camera or the World?
• two equivalent operations• move camera one way vs. move world other way
• example• initial OpenGL camera: at origin, looking along -z axis
• create a unit square parallel to camera at z = -10
• translate in z by 3 possible in two ways• camera moves to z = -3
• Note OpenGL models viewing in left-hand coordinates
• camera stays put, but world moves to -7
• resulting image same either way• possible difference: are lights specified in world or view
coordinates?
![Page 31: Viewing/Projections I Week 3, Fri Jan 25](https://reader034.fdocuments.net/reader034/viewer/2022051516/56813d58550346895da71d6c/html5/thumbnails/31.jpg)
31
World vs. Camera Coordinates Example
WW
a = (1,1)a = (1,1)WW
aa
b = (1,1)b = (1,1)C1 C1 = (5,3)= (5,3)WW
c = (1,1)c = (1,1)C2C2= = (1,3)(1,3)C1C1 = (5,5)= (5,5)WW
C1C1
bb
C2C2
cc