As we have observed, the purpose of our display handler is to define a virtual world that will be rendered to the client area
of our program’s window. When this world is three dimensional, as we will start seeing in chapter 7, OpenGL must “flatten” it to
2 dimensions. The flattening process is accomplished through mathematical computations that project the 3D world onto a
2D plane called the projection plane. The actual computation that OpenGL applies depends on the type of projection,
either orthographic or perspective, that we set through an OpenGL function call. Of course, only a rectangular region
within the projection plane will appear on the actual screen. For OpenGL to be device independent,
the rectangular region is not that of the client area but a virtual window in the projection plane which we call the projection window.
It is through GLUT that the projection window gets drawn onto the client area.
The process of converting our virtual world to a screen image is part of the OpenGL rendering pipeline.
Although we set the initial size of the client area through a call to glutInitWindowSize, we do not have to use the entire
area for our rendering. Like a photographer who may want to leave a border around her printed image, we can select a portion
of the client area for our image. We select a rectangular region by selecting a viewport. In turn, the contents of the projection
window are displayed in the selected viewport.