2. Before we can display anything, we should address the issues like:
1. In what colors are we drawing?
2. Where on the display does our image appear?
3. How large will the image be?
4. How do we create an area of the display—a window—for our
image?
5. How much of our infinite drawing surface will appear on the
display?
6. How long will the image remain on the display?
7. • A graphics system performs multiple tasks to produce output and handle user
input
• An API for interfacing with this system can contain hundreds of individual
functions
• It will be helpful to divide these functions into seven major groups:
1. Primitive functions
2. Attribute functions
3. Viewing functions
4. Transformation functions
5. Input functions
6. Control functions
7. Query functions
8. Primitives and Attributes
• The primitive functions define the low-level objects or atomic entities that our system
can display
• Depending on the API, the primitives can include points, line segments, polygons,
pixels, text, and various types of curves and surfaces
• OpenGL supports a very limited set of primitives directly, only points, line segments,
and triangles
• If primitives are the what of an API—the primitive objects that can be displayed—
then attributes are the how
• Attribute functions allow us to perform operations ranging from choosing the color
with which we display a line segment, to picking a pattern with which to fill the inside
of a polygon, to selecting a typeface for the titles on a graph
9. •Our synthetic camera must be described if we are to create an image
•Must describe the camera’s position and orientation in our world and
must select the equivalent of a lens
•This process will not only fix the view but also allow us to clip out
objects that are too close or too far away
•The viewing functions allow us to specify various views, although APIs
differ in the degree of flexibility they provide in choosing a view
•OpenGL does not provide any viewing functions but relies on the use
of transformations in the shaders to provide the desired view
10. • A good API provides the user with a set of transformation functions that allows her to
carry out transformations of objects, such as rotation, translation, and scaling
• For interactive applications, an API must provide a set of input functions to allow us to
deal with the diverse forms of input that characterize modern graphics systems. We
need functions to deal with devices such as keyboards, mice, and data tablets
• In any real application, we also have to worry about handling the complexities of
working in a multiprocessing, multiwindow environment—usually an environment
where we are connected to a network and there are other users
• The control functions enable us to communicate with the window system, to initialize
our programs, and to deal with any errors that take place during the execution of our
programs
• To write device-independent programs, the API has to take care of differences between
devices
such as how many colors are supported
or the size of the display
A good API provides this information through a set of query functions
12. • OpenGL functions are in a single library named GL (or OpenGL in Windows)
• Function names begin with the letters gl
• Shaders are written in the OpenGL Shading Language (GLSL), which has a separate
specification from OpenGL
• To interface with the window system and to get input from external devices into our
programs, we need at least one more library
• For each major window system there is a system-specific library that provides the “glue”
between the window system and OpenGL
• For the X Window System, this library is called GLX, for Windows, it is wgl, and for the
Macintosh, it is agl
• Rather than using a different library for each system, we use two readily available libraries,
the OpenGL Extension Wrangler (GLEW) and the OpenGL Utility Toolkit (GLUT)
14. PRIMITIVES AND ATTRIBUTES
• Geometric primitives
• Image, or raster, primitives
• Geometric primitives are specified in the problem domain and include points, line segments,
polygons, curves, and surfaces
17. Text
• There are two forms of text: stroke and raster
Stroke text: Constructed as other geometric objects
• We use vertices to specify line segments or curves that outline each character
Raster text is simple and fast
• Characters are defined as rectangles of bits called bit blocks
• Each block defines a single character by the pattern of 0 and 1 bits in the block
• A raster character can be placed in the frame buffer rapidly by a bit-block-
transfer (bitblt) operation, which moves the block of bits using a single function
call
• You can increase the size of raster characters by replicating, or duplicating, pixels
20. Two different approaches
• RGB-color model: Has become the norm
• IndexedColor Model: Easier to support in hardware because of its lower memory
requirements and the limited colors available on displays