Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 1
Computer Viewing
Ed Angel
Professor of Computer Science, Electrical and Computer
Engineering, and Media Arts University of New Mexico
Objectives
• Introduce the mathematics of projection
• Introduce OpenGL viewing functions
• Look at alternate viewing APIs
Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 3
Computer Viewing
• There are three aspects of the viewing process, all of which are implemented in the pipeline,
- Positioning the camera
• Setting the model-view matrix
- Selecting a lens
• Setting the projection matrix
- Clipping
• Setting the view volume
The OpenGL Camera
• In OpenGL, initially the object and camera frames are the same
- Default model-view matrix is an identity
• The camera is located at origin and points in the negative z direction
• OpenGL also specifies a default view
volume that is a cube with sides of length 2 centered at the origin
- Default projection matrix is an identity
Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 5
Default Projection
Default projection is orthogonal
clipped out
z=0 2
Moving the Camera Frame
• If we want to visualize object with both positive and negative z values we can either
- Move the camera in the positive z direction
• Translate the camera frame
- Move the objects in the negative z direction
• Translate the world frame
• Both of these views are equivalent and are determined by the model-view matrix
- Want a translation (glTranslatef(0.0,0.0,-d);)
-d > 0
Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 7
Moving Camera back from Origin
default frames
frames after translation by –d d > 0
Moving the Camera
• We can move the camera to any desired position by a sequence of rotations and translations
• Example: side view
- Rotate the camera
- Move it away from origin - Model-view matrix C = TR
Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 9
OpenGL code
• Remember that last transformation specified is first to be applied
glMatrixMode(GL_MODELVIEW) glLoadIdentity();
glTranslatef(0.0, 0.0, -d);
glRotatef(90.0, 0.0, 1.0, 0.0);
The LookAt Function
• The GLU library contains the function gluLookAt to form the required modelview matrix through a simple interface
• Note the need for setting an up direction
• Still need to initialize
- Can concatenate with modeling transformations
• Example: isometric view of cube aligned with axes
glMatrixMode(GL_MODELVIEW):
glLoadIdentity();
gluLookAt(1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0., 1.0. 0.0);
Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 11
gluLookAt
gluLookAt(eyex, eyey, eyez, atx, aty,
atz, upx, upy, upz)
Other Viewing APIs
• The LookAt function is only one possible API for positioning the camera
• Others include
- View reference point, view plane normal, view up (PHIGS, GKS-3D)
- Yaw, pitch, roll
- Elevation, azimuth, twist - Direction angles
Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 13
Projections and Normalization
• The default projection in the eye (camera) frame is orthogonal
• For points within the default view volume
• Most graphics systems use view normalization
- All other views are converted to the default view by transformations that determine the projection matrix - Allows use of the same pipeline for all views
xp = x yp = y zp = 0
Homogeneous Coordinate Representation
xp = x yp = y zp = 0 wp = 1
pp = Mp
M =
!!
!!
"
#
$$
$$
%
&
1 0
0 0
0 0
0 0
0 0
1 0
0 0
0 1
In practice, we can let M = I and set the z term to zero later
default orthographic projection
Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 15
Simple Perspective
• Center of projection at the origin
• Projection plane z = d, d < 0
Perspective Equations
Consider top and side views
xp =
d z
x /
d z
x
/ yp = z d
y
/ zp = d
Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 17
Homogeneous Coordinate Form
M =
!!
!!
"
#
$$
$$
%
&
0 /
1 0
0
0 1
0 0
0 0
1 0
0 0
0 1
d
consider q = Mp where
! !
! !
"
#
$ $
$ $
%
&
1 z y x
!!
!!
"
#
$$
$$
%
&
d z
z y x
/
q = ⇒ p =
Perspective Division
• However w ≠ 1, so we must divide by w to return from homogeneous coordinates
• This perspective division yields
the desired perspective equations
• We will consider the corresponding clipping volume with the OpenGL functions
xp =
d z
x
/ yp = z d
y
/ zp = d
Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 19
OpenGL Orthogonal Viewing
glOrtho(left,right,bottom,top,near,far)
near and far measured from camera
OpenGL Perspective
glFrustum(left,right,bottom,top,near,far)
Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 21
Using Field of View
• With glFrustum it is often difficult to get the desired view
•gluPerpective(fovy, aspect, near, far)
often provides a better interface
aspect = w/h
front plane