0% found this document useful (0 votes)
38 views

Tutorial 3

The document describes viewing and projection transformations in 3D computer graphics. It defines: 1) The modelview matrix, which transforms points from world coordinates to camera coordinates based on the camera's position, reference point, and up vector. This orients the virtual camera in the 3D world. 2) The projection matrix, which maps points from camera coordinates to normalized device coordinates, projecting the 3D scene onto a 2D viewport or screen. OpenGL provides functions like gluPerspective and glFrustum to generate common projection matrices. 3) An example calculation of the modelview and projection matrices for a sample camera configuration. Key vectors and matrices are defined to demonstrate the viewing and projection transformations.

Uploaded by

sureshSubramani
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
38 views

Tutorial 3

The document describes viewing and projection transformations in 3D computer graphics. It defines: 1) The modelview matrix, which transforms points from world coordinates to camera coordinates based on the camera's position, reference point, and up vector. This orients the virtual camera in the 3D world. 2) The projection matrix, which maps points from camera coordinates to normalized device coordinates, projecting the 3D scene onto a 2D viewport or screen. OpenGL provides functions like gluPerspective and glFrustum to generate common projection matrices. 3) An example calculation of the modelview and projection matrices for a sample camera configuration. Key vectors and matrices are defined to demonstrate the viewing and projection transformations.

Uploaded by

sureshSubramani
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

CSC 418/2504 Computer Graphics, Fall 2003

Tutorial 3. Viewing Transformations

1. Viewing and Modeling Transformation modelview matrix


Derivation

to express points in world coordinates (WCS) in terms of camera (VCS)


defined by:
o an eye point Peye
o a reference point Pref
o an up vector Vup
unit vectors of VCS (call them i, j, k if you prefer)
Peye - Pref
n = ---------------
| Peye - Pref |

Vup n
u = -----------
| Vup n |

v = n u

intuition
o suppose Peye is fixed
o to pan the camera (like shaking your head left and right)

move Pref "horizontally"


corresponds to rotating the VCS along the y axis
o to tilt the camera (like nodding your head up and down)
move Pref "vertically"
corresponds to rotating the VCS along the x axis
o to rock the camera (like tilting your head left and right)

let Peye - Pref be the normal vector of a plane A


change Vup so that its projection onto A "rotates" left and right
corresponds to rotating the VCS along the z axis
o Vup represents a general "upwardness" for the camera
view matrix
o first express camera in terms of world:
o [ 1 0 0 Peye,x ] [ ux vx nx 0 ]
o Mcam = [ 0 1 0 Peye,y ] [ uy vy ny 0 ]
o [ 0 0 1 Peye,z ] [ uz vz nz 0 ]
o [ 0 0 0 1 ] [ 0 0 0 1 ]

o then invert Mcam to express world in terms of camera:


o [ ux uy uz 0 ] [ 1 0 0 -Peye,x ]
o Mcam-1 = [ vx vy vz 0 ] [ 0 1 0 -Peye,y ]
o [ nx ny nz 0 ] [ 0 0 1 -Peye,z ]
o [ 0 0 0 1 ] [ 0 0 0 1 ]

so PVCS = Mcam-1 PWCS

OpenGL
performs these calculations internally with a call to gluLookAt()
code:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(Peye,x, Peye,y, Peye,z, Pref,x, Pref,y, Pref,z, Vup,x, Vup,y, Vup,z );

Example
scene with camera at (4,4,4), pointed at (0,1,4), with up vector (0,1,0)
(4,4,4) - (0,1,4) (4,3,0)
n = --------------------- = ----------- = (4/5,3/5,0)
| (4,4,4) - (0,1,4) | | (4,3,0) |

(0,1,0) (4/5,3/5,0) (0,0,-4/5)
u = ------------------------- = -------------- = (0,0,-1)
| (0,1,0) (4/5,3/5,0) | | (0,0,-4/5) |

v = (4/5,3/5,0) (0,0,-1) = (-3/5,4/5,0)

[ 0 0 -1 0 ] [ 1 0 0 -4 ] [ 0 0 -1 4 ]
Mcam-1 = [ -3/5 4/5 0 0 ] [ 0 1 0 -4 ] = [ -3/5 4/5 0 -4/5 ]
[ 4/5 3/5 0 0 ] [ 0 0 1 -4 ] [ 4/5 3/5 0 -28/5 ]
[ 0 0 0 1 ] [ 0 0 0 1 ] [ 0 0 0 1 ]

check
[ 4 ] [ 0 ] [ 4 ] [ 1 ]
Mcam-1 [ 4 ] = [ 0 ], Mcam-1 [ 4 ] = [ 0 ]
[ 4 ] [ 0 ] [ 3 ] [ 0 ]
[ 1 ] [ 1 ] [ 1 ] [ 1 ]

2. Projection Transformation projection matrix


Derivation
maps points in VCS to NDCS
see Hill, lecture notes for derivation
o [ x ] [ 1 0 0 0 ] [ x ]
o [ y ] = [ 0 1 0 0 ] [ y ]
o [ z ] [ 0 0 1 0 ] [ z ]
o [ -z/d ] [ 0 0 -1/d 0 ] [ 1 ]

OpenGL

code for perspective projection:


glMatrixMode(GL_PROJECTION);
glLoadIdentity();

gluPerspective(fovy, aspect, near, far);


or
glFrustum(left, right, bottom, top, near, far);

gluPerspective()
o fovy
field of view in the y-direction, centered about y = 0
in degrees
o aspect

aspect ratio that determines the field of view in the x direction


ratio of x (width) to y (height)
o near
in camera coordinates
close to 0 (but not 0)
o far

in camera coordinates
glFrustum()
o left, right, bottom, top, near, far
specifies the clipping planes of the view volume explicitly
in camera coordinates

You might also like