Viewing and Projection
Viewing and Projection
Sheelagh Carpendale
Camera metaphor
1. choose camera position 2. set up and organize objects 3. choose a lens 4. take the picture
1 View Volumes
• what gets into the scene
perspective view volume orthographic view volume y=top y=top x=left x=left y y z z x=right VCS VCS y=bottom z=-near x x z=-far z=-far x=right y=bottom z=-near
Projective Rendering Pipeline
object world viewing/camera OCS WCS VCS Projection matrix modeling viewing projection transformation transformation transformation clipping CCS Model view matrix clipping normalized OCS - object coordinate system device WCS - world coordinate system NDCS VCS - viewing coordinate system / w CCS - clipping coordinate system Viewport matrix NDCS - normalized device coordinate system viewport transformation DCS - device coordinate system device DCS
2 Viewing Transformation
object world viewing OCS WCS VCS modeling viewing transformation transformation
M mod M cam
OpenGL ModelView matrix
Arbitrary Viewing Position
• General situation for camera • Keep view frame unchanged • Map object with the inverse of the frame transformation
y v
z n eye -n z u
3 Deriving the model view matrix
• eye point P = (x, y, z, 1)
• viewplane normal n = (nx, ny, nz, 0)
• up vector v = (vx, vy, vz, 0) • u = v x n • unit vectors u’, v’, n’
y v
z eye n -n z
u
Model view matrix details
• Rotation matrix: M éu'x u'y u'z 0ù ê ú êv'x v'y v'z 0ú • Object rotations: R = M-1 = MT = ên' n' n' 0ú ê x y z ú ë0 0 0 1û
é0 0 0 -xù • Translation T = ê ú ê0 0 0 -yú ê0 0 0 -zú ê ú • V = RT ë0 0 0 0 û
4 Arbitrary Viewing Position
• rotate/translate/scale not intuitive • convenient formulation • eye point, lookat direction, up vector
Look-at function
• Input • p: eye point • q: look at point • v’: approximation of up vector • n = p – q • v = v’ – (v’. n) .n • u = v x n • Normalize • OpenGL utility function gluLookAt(ex, ey, ez, lx, ly, lz, ux, uy, uz)
5 Viewing Transformation
• OpenGL • gluLookAt(ex,ey,ez,lx,ly,lz,ux,uy,uz)
usually use as follows:
glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(ex,ey,ez,lx,ly,lz,ux,uy,uz) // now ok to do model transformations
Field-of-View Formulation
• FOV in one direction + aspect ratio (w/h) • determines FOV in other direction • also set near, far (reasonably intuitive) x w
Frustum fovx/2 h a -z fovy/2
z=-n z=-f
6 Viewing and Projection • Standard situation • camera at origin, pointing in –z direction, orthogonal projection • Map camera to a general situation
Or
• Map all objects in to the standard situation of camera
Canonical view volume
• transform an arbitrary orthogonal to • canonical view volume x = +/- 1, y = +/- 1, z = +/- 1 • translate centre • scale • matrix?
7 Orthographic Derivation • scale, translate, reflect for new coord sys
VCS NDCS
y=top y x=left (1,1,1) y z z (-1,-1,-1) x=right x
x z=-far y=bottom z=-near
Orthographic Derivation
y'= a × y + b y = top ® y'= 1 y = bot ® y'= -1 solving for a and b gives: 2 - (top + bot) a = b = top - bot top - bot
same idea for right/left, far/near
8 Orthographic Derivation • scale, translate, reflect for new coord sys
é 2 right +left ù 0 0 - ê - - ú êright left right left ú 2 top + bot ê 0 0 - ú P'= ê top -bot top - bot úP ê - 2 far + nearú ê 0 0 - ú ê far - near far - nearú ëê 0 0 0 1 ûú
Perspective normalization
• simple case • COP at origin • projection plane at z = -1 x = +/- 1, y = +/- 1 • matrix?
9 Projective Transformations
• transformation of space • center of projection moves to infinity • viewing frustum transformed into a parallelepiped x x
Frustum -z -z
Projective Transformations
• can express as homogeneous 4x4 matrices! • 16 matrix entries • multiples of same matrix all describe same transformation • 15 degrees of freedom • mapping of 5 points uniquely determines transformation
10 Projective Transformations
• determining the matrix representation • need to observe 5 points in general position, e.g. • [left,0,0,1] T®[1,0,0,1] T • [0,top,0,1] T®[0,1,0,1] T • [0,0,-f,1] T®[0,0,1,1] T • [0,0,-n,1]T®[0,0,0,1] T • [left*f/n,top*f/n,-f,1]T®[1,1,1,1] T • solve resulting equation system to obtain matrix
Perspective Derivation
VCS y=top NDCS
x=left y (1,1,1) y z (-1,-1,-1) z x y=bottom z=-near x z=-far x=right
11 Normalized Device Coordinates left/right x =+/- 1, top/bottom y =+/- 1, near/far z =+/- 1
Camera coordinates NDC
x x x=1 right Frustum -z z left x= -1 z= -1 z=1
z=-n z=-f
Perspective Derivation
é x ù é1 0 0 0ùéxù earlier: ê y ú ê0 1 0 0úêyú ê ú = ê úê ú ê z ú ê0 0 1 0úêzú ê ú ê úê ú ëz / dû ë0 0 1/ d 0ûë1û complete: shear, scale, projection-normalization éx'ù éE 0 A 0 ùéxù êy'ú ê0 F B 0 úêyú ê ú = ê úê ú êz'ú ê0 0 C Dúêzú ê ú ê úê ú ëh'û ë0 0 -1 0 ûë1û
12 Perspective Derivation • similarly for other 5 planes • 6 planes, 6 unknowns
é 2n r + l ù ê 0 0 ú r - l r - l ê 2n t + b ú ê 0 0 ú ê t - b t - b ú ê - ( f + n) - 2 fn ú 0 0 ê f - n f - n ú ê ú ë 0 0 -1 0 û
13 Perspective Example
view volume • left = -1, right = 1 • bot = -1, top = 1 • near = 1, far = 4
é 2n r + l ù 0 0 é1 0 0 0 ù êr - l r - l ú ê 2n t + b ú ê ú ê 0 0 ú ê0 1 0 0 ú ê t - b t - b ú ê - ( f + n) - 2 fnú ê - - ú 0 0 0 0 5/ 3 8/ 3 ê f - n f - n ú ê ú ê ú - ë 0 0 - 1 0 û ë0 0 1 0 û
Perspective Example
view volume tracks in VCS: left = -1, right = 1 left x=-1, y=-1 bot = -1, top = 1 right x=1, y=-1 near = 1, far = 4
x=-1 x=1 1 ymax-1 z=-4 real z=-1 midpoint -1 -1 1 0 xmax-1 x -1 0 NDCS DCS (z not shown) (z not shown) z VCS top view
14 Viewport Transformation • generate pixel coordinates • map x, y from range –1…1 (normalized device coordinates) to pixel coordinates on the display • involves 2D scaling and translation
y display
x viewport
Holbein the younger 1497-1543 First discussed by da Vinci as ‘Anamorphosis’ From Greek word meaning to transform
15 Holbein the younger 1497-1543
No record or any mention of this skull until 1873
Portrait of Prince Edward VI
William Scrots 1546
16 Portrait of Prince Edward VI
William Scrots 1546
17