CS 352: Computer Graphics
Chapter 5:
Viewing
Interactive Computer Graphics
Chapter 5

2
Overview
Specifying the viewpoint
Specifying the projection
Types of projections
Viewing APIs
Walking through a scene
Projections and shadows
How do cameras work?
Interactive Computer Graphics
Chapter 5

3
Synthentic
camera model
1. Camera is placed at a location, pointed in
a direction (modeling matrix)
2. 3D points are flattened onto the viewing
plane (projection matrix)
What do we need to know about the camera
(real or synthetic)?
Interactive Computer Graphics
Chapter 5

4
Synthetic camera parameters
Position of camera
Direction it is pointed [look vector]
Angle of film to look vector [view plane normal]
Rotation around viewing direction [up vector]
Height angle (zoom setting) [
fovy
]
Aspect ratio of "film" (width/height)
Front and back
clipping planes
Focal length
Field of view
Shutter speed
Interactive Computer Graphics
Chapter 5

5
Interactive Computer Graphics
Chapter 5

6
Perspective distortion
How would you film dizziness?
Vertigo effect
[
2
]
Interactive Computer Graphics
Chapter 5

7
Interactive Computer Graphics
Chapter 5

8
Projections
Basic Elements:
Objects, viewer
Projection plane
Projectors
Center of projection
Direction of
projection (DOP)
Basic Types
Perspective
Parallel (COP
at infinity)
Interactive Computer Graphics
Chapter 5

9
Classical viewing
Interactive Computer Graphics
Chapter 5

10
Orthographic projection
Orthographic
: parallel
projection with projectors
perpendicular to the
projection plane.
Often used as front,
side, top views for 3D
design
Importance: preservation
of distance and angle
Often used for top, front,
and size views, e.g. in a
modeling
program or
working drawing
Interactive Computer Graphics
Chapter 5

11
Perspective projection
Perspective projections: projectors converge at COP
Classical
perspective views: 1, 2, and 3

point (1, 2,
or 3 vanishing points)
Difference: how many of the principle
axes of
the
object are parallel to projection plane
(I.e., depends
on relationship of object to viewing frame)
Interactive Computer Graphics
Chapter 5

12
1. Position the camera
By default, camera
is at origin, looking in
–
z dir
To
“move
the
camera”, set up a
modelview
matrix
that moves
objects
that are drawn
Ignore Z

coordinate when drawing
E.g
.
dimetric
view?
modelview
= identity
translate(0,0,

d)
rotate(

45,<0,1,0>)
;
Interactive Computer Graphics
Chapter 5

13
Exercise: look from +x axis
How would you change the camera to
generate a view down the +x axis to origin?
Do this before displaying objects:
modelview = identity;
translate(0, 0,

d);
rotate(

90, [0, 1, 0]);
Interactive Computer Graphics
Chapter 5

14
Exercise: front/top view
How would you change the camera to
generate a view from (0, 10, 10) to origin?
Do this before displaying objects:
modelview
= identity;
translate(
0,0,

14.14)
;
rotate(45, [1, 0, 0]);
Interactive Computer Graphics
Chapter 5

15
Helper function:
lookAt
Most 3D toolkits let you position the camera
by setting
eyepoint
,
lookpoint
,
and
up
direction
lookAt
(X
eye
,
Y
eye
,
Z
eye
,
X
at
,
Y
at
,
Z
at
,
X
up
, Y
up
,
Z
up
)
:
Effect: set the
modelview
matrix
Rolling your own
lookAt
How could you write your own
lookAt
function?
lookAt
(
X
eye
,
Y
eye
,
Z
eye
,
X
at
,
Y
at
,
Z
at
,
X
up
, Y
up
,
Z
up
):
Interactive Computer Graphics
Chapter 5

16
Defining a
lookAt
function
lookAt
(
X
eye
,
Y
eye
,
Z
eye
,
X
at
,
Y
at
,
Z
at
,
X
up
, Y
up
,
Z
up
):
translate <
X
at
,
Y
at
,
Z
at
> to origin
rotate so that <
X
eye
,
Y
eye
,
Z
eye
>
points in the Z direction
normalize <
X
eye
,
Y
eye
,
Z
eye
>
trackball

like rotation to <0,0,1>
rotate so <
X
up
, Y
up
,
Z
up
> is <0,1,0>
trackball

like rotation
Interactive Computer Graphics
Chapter 5

17
Interactive Computer Graphics
Chapter 5

18
Camera API 2:
uvn
frame
Camera parameters:
VRP: view reference point,
a point on the image plane
VPN: view plane normal (n)
VUP: vector in up direction
(also need viewing direction, if not VPN)
Result: viewing coordinate system, u

v

n.
v = projection of VUP onto image plane
u = v x n
u, v axes: coordinates in the image plane
n axis: normal to image plane
Interactive Computer Graphics
Chapter 5

19
Camera API 3: roll, pitch, yaw
Specify location + orientation:
roll
,
pitch
,
yaw
2. Specify projection
Interactive Computer Graphics
Chapter 5

20
Once we have located and pointed the
camera along the
–
z axis,
we still need to
specify the lens (
projection)
.
Parallel projection
We’re already looking along the
–
z axis
Set z=0 for all points (or ignore z coordinate
when rendering)
Interactive Computer Graphics
Chapter 5

21
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
Interactive Computer Graphics
Chapter 5

22
Parallel
projection
View volume is generally specified with
clipping planes: e.g.
glOrtho
(
xmin
,
xmax
,
ymin
,
ymax
, near, far)
Z
clipping planes at
–
near and
–
far
Perspective projection
Need to build appropriate perspective
projection matrix into vertex
shader
What kind of transformation would this be?
Interactive Computer Graphics
Chapter 5

23
Interactive Computer Graphics
Chapter 5

24
Perspective projections
COP at origin
Looking in
–
z
direction
Projection plane in front of origin at
z
=
d
Interactive Computer Graphics
Chapter 5

25
Foreshortening
By similar triangles in previous image, we see
that
and similarly for y.
Using the perspective matrix
we get p’ =
Adding divide

by

w to the graphics pipeline
gives the correct result.
d
z
p
x
x
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
1
d
T
d
z
z
y
x
Perspective Frustum
Perspective viewing region is a “frustum”:
Viewplane
normally coincides
with front clip plane
Interactive Computer Graphics
Chapter 5

26
Interactive Computer Graphics
Chapter 5

27
Camera APIs
In raw OpenGL ES, you “position the
camera” by programming a vertex
shader
to
apply a
modelview
matrix
Frameworks provide functions to build a
viewing matrix for you, using a “camera API”
Example:
perspectiveCamera
(FOV, aspect, near, far)
Perspective projection
3D graphics toolkits provide tools for
specifying a perspective projection, e.g.
Interactive Computer Graphics
Chapter 5

28
Interactive Computer Graphics
Chapter 5

29
Shadows
How can one generate
shadows
in a
scene
using interactive graphics techniques?
In general it's hard, not supported in
standard graphics pipeline
—
you need to
know where everything is globally to render
a point locally
Special techniques let you “fake it”
Interactive Computer Graphics
Chapter 5

30
Projections and shadows
Projections can be used to generate simple
shadow polygons
Light (x
l
, y
l
, z
l
)
Translate light to origin
Project down y axis [M]
Translate back
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
1
l
y
Interactive Computer Graphics
Chapter 5

31
Simple Shadow in OpenGL
GLfloat m[16];
//projection matrix
for (int i=0; i<16; i++) m[i]=0;
m[0]=m[5]=m[10]=1;
m[7] =

1/yl;
glBegin(); [draw polygon normally]; glEnd();
glMatrixMode(GL_MODELVIEW);
glPushMatrix;
//save state
glTranslatef(xl, yl, zl);
glMultMatrix(m);
glTranslatef(

xl,

yl,

zl);
glColor3fv(shadow_color);
[draw polygon]
glEnd();
glPopMatrix();
Interactive Computer Graphics
Chapter 5

32
Stereo Viewing
In our stereo setup, we
need two images (4x3
size ratio), side

by

side
We want to render perspective views from
viewpoints (say) 3 inches apart
How to set up the views?*
* “Simple, Low

Cost Stereographics: VR for Everyone,” J. Zelle & C. Figura, Proc.
SIGCSE 2004 p. 348.
Interactive Computer Graphics
Chapter 5

33
Direct both eyes at the same point?
Interactive Computer Graphics
Chapter 5

34
Direct both eyes in parallel?
Interactive Computer Graphics
Chapter 5

35
Parallel views and asymmetric frustum
Interactive Computer Graphics
Chapter 5

36
Stereo viewing:
// set up the projection transformation
// focalLength is distance to screen (objects
// closer will float in front of screen)
top = eyeSeparation / 2.0 * (near / focalLength);
glFrustum(

right+off, right+off,

top, top,
near, far);
// now set up the model

view transformation
// right is a unit vector in right direction
viewpoint = viewpoint
–
right * eyeOffset;
center = center
–
right * eyeOffset;
gluLookAt(viewpoint[X],viewpoint[Y],viewpoint[Z],
center[X], center[Y], center[Z],
up[x], up[y], up[z]);
Interactive Computer Graphics
Chapter 5

37
Drawing left and right views
//create window
int width=400; int height=300;
glutInitWindowSize(2*width, height);
//

// draw left image
glViewport (0, 0, width, height);
// set up projection and modeling matrices
// render image
// draw right image
glViewport (width, 0, width, height);
// set up projection and modeling matrices
// render image
Interactive Computer Graphics
Chapter 5

38
Walking through a scene
How to animate viewer motion through a
scene
? [
Demo
]
Assume viewer’s height is fixed; looking
direction is in
y
=6 plane
Store viewer’s location (x,6,z) and orientation
(
θ
). Update appropriately with user
commands
LookAt
(
x
, y, z,
x
+
cos
(
θ
), y, z + sin(
θ
),
0
, 1, 0);
Credits
1. (Pinhole camera): Wikipedia.
5. Synthetic camera parameters: Liz
Marai
, Pitt
Demos
Musical solar system
Interactive Computer Graphics
Chapter 5

39
Comments 0
Log in to post a comment