Chapter 3
Viewing
Chapter Objectives
After reading this chapter, you'll be able to do the following:
 View a geometric model in any orientation by transforming
it in threedimensional space
 Control the location in threedimensional space from which
the model is viewed
 Clip undesired portions of the model out of the scene
that's to be viewed
 Manipulate the appropriate matrix stacks that control
model transformation for viewing and project the model onto the screen
 Combine multiple transformations to mimic sophisticated
systems in motion, such as a solar system or an articulated robot arm
 Reverse or mimic the operations of the geometric
processing pipeline
Chapter 2 explained how to instruct OpenGL to draw the geometric models you
want displayed in your scene. Now you must decide how you want to position the
models in the scene, and you must choose a vantage point from which to view
the scene. You can use the default positioning and vantage point, but most likely
you want to specify them.
Look at the image on the cover of this book. The program that
produced that image contained a single geometric description of a building block.
Each block was carefully positioned in the scene: Some blocks were scattered
on the floor, some were stacked on top of each other on the table, and some
were assembled to make the globe. Also, a particular viewpoint had to be chosen.
Obviously, we wanted to look at the corner of the room containing the globe.
But how far away from the scene  and where exactly  should the viewer be?
We wanted to make sure that the final image of the scene contained a good view
out the window, that a portion of the floor was visible, and that all the objects
in the scene were not only visible but presented in an interesting arrangement.
This chapter explains how to use OpenGL to accomplish these tasks: how to position
and orient models in threedimensional space and how to establish the location
 also in threedimensional space  of the viewpoint. All of these factors help
determine exactly what image appears on the screen.
You want to remember that the point of computer graphics is
to create a twodimensional image of threedimensional objects (it has to be
twodimensional because it's drawn on a flat screen), but you need to think
in threedimensional coordinates while making many of the decisions that determine
what gets drawn on the screen. A common mistake people make when creating threedimensional
graphics is to start thinking too soon that the final image appears on a flat,
twodimensional screen. Avoid thinking about which pixels need to be drawn,
and instead try to visualize threedimensional space. Create your models in
some threedimensional universe that lies deep inside your computer, and let
the computer do its job of calculating which pixels to color.
A series of three computer operations convert an object's
threedimensional coordinates to pixel positions on the screen.
 Transformations, which are represented by matrix multiplication,
include modeling, viewing, and projection operations. Such operations include
rotation, translation, scaling, reflecting, orthographic projection, and perspective
projection. Generally, you use a combination of several transformations to
draw a scene.
 Since the scene is rendered on a rectangular window, objects
(or parts of objects) that lie outside the window must be clipped. In threedimensional
computer graphics, clipping occurs by throwing out objects on one side of
a clipping plane.
 Finally, a correspondence must be established
between the transformed coordinates and screen pixels. This is known as a
viewport transformation.
This chapter describes all of these operations, and how to
control them, in the following major sections:
 "Overview: The Camera Analogy"
gives an overview of the transformation process by describing the analogy
of taking a photograph with a camera, presents a simple example program that
transforms an object, and briefly describes the basic OpenGL transformation
commands.
 "Viewing and Modeling Transformations"
explains in detail how to specify and to imagine the effect of viewing and
modeling transformations. These transformations orient the model and the camera
relative to each other to obtain the desired final image.
 "Projection Transformations"
describes how to specify the shape and orientation of the viewing volume.
The viewing volume determines how a scene is projected onto the screen (with
a perspective or orthographic projection) and which objects or parts of objects
are clipped out of the scene.
 "Viewport Transformation"
explains how to control the conversion of threedimensional model coordinates
to screen coordinates.
 "Troubleshooting Transformations"
presents some tips for discovering why you might not be getting the desired
effect from your modeling, viewing, projection, and viewport transformations.
 "Manipulating the Matrix Stacks"
discusses how to save and restore certain transformations. This is particularly
useful when you're drawing complicated objects that are built up from simpler
ones.
 "Additional Clipping Planes"
describes how to specify additional clipping planes beyond those defined by
the viewing volume.
 "Examples of Composing Several Transformations"
walks you through a couple of more complicated uses for transformations.
 "Reversing or Mimicking Transformations"
shows you how to take a transformed point in window coordinates and reverse
the transformation to obtain its original object coordinates. The transformation
itself (without reversal) can also be emulated
