If you've ever had a chemistry class (and probably even if you haven't), you know that all matter consists of atoms and that all atoms consist of only three things: protons, neutrons, and electrons. All the materials and substances you have ever come into contact withfrom the petals of a rose to the sand on the beachare just different arrangements of these three fundamental building blocks. Although this explanation is a little oversimplified for almost anyone beyond the third or fourth grade, it demonstrates a powerful principle: With just a few simple building blocks, you can create highly complex and beautiful structures.

The connection is fairly obvious. Objects and scenes that you create with OpenGL also consist of smaller, simpler shapes, arranged and combined in various and unique ways. This chapter explores these building blocks of 3D objects, called primitives. All primitives in OpenGL are one- or two-dimensional objects, ranging from single points to lines and complex polygons. In this chapter, you learn everything you need to know to draw objects in three dimensions from these simpler shapes.

Drawing Points in 3D

When you first learned to draw any kind of graphics on any computer system,
you probably started with pixels. A pixel is the smallest element on your
computer monitor, and on color systems, that pixel can be any one of many
available colors. This is computer graphics at its simplest: Draw a point
somewhere on the screen, and make it a specific color. Then build on this simple
concept, using your favorite computer language to produce lines, polygons,
circles, and other shapes and graphics. Perhaps even a GUI...

With OpenGL, however, drawing on the computer screen is fundamentally
different. You're not concerned with physical screen coordinates and
pixels, but rather positional coordinates in your viewing volume. You let OpenGL
worry about how to get your points, lines, and everything else projected from
your established 3D space to the 2D image made by your computer screen.

This chapter and the next cover the most fundamental concepts of OpenGL or
any 3D graphics toolkit. In the upcoming chapter, we provide substantial detail
about how this transformation from 3D space to the 2D landscape of your computer
monitor takes place, as well as how to transform (rotate, translate, and scale)
your objects. For now, we take this ability for granted to focus on plotting and
drawing in a 3D coordinate system. This approach might seem backward, but if you
first know how to draw something and then worry about all the ways to manipulate
your drawings, the material in Chapter 4, "Geometric Transformations: The
Pipeline," is more interesting and easier to learn. When you have a solid
understanding of graphics primitives and coordinate transformations, you will be
able to quickly master any 3D graphics language or API.