We covered a lot of ground in this chapter. In fact if you are brand new to OpenGL or 3D graphics programming in general, this may well be the most important foundational chapter in the book. Beginning with an explanation of how today's programmable hardware renders with shaders, we covered how to set up your 3D coordinate space, organize your vertices and other attributes into primitive batches, and render them with the appropriate shader and uniform values.
Front and back face winding and face culling are an important part of a great many graphics rendering algorithms, as well as an important part of your performance tuning efforts. You saw how depth testing is almost a prerequisite for most 3D scenes, and even how to use it to speed up fill performance, or fib to it by adding a small offset to fragments you need to be coincident with other geometry. A huge number of special effects and techniques make use of blending, and this topic is revisited again in the next chapter where we show a more dramatic use of blending to create a simple reflection effect. Finally, you saw how antialiasing and multisampling can add a significant quality improvement to computer-generated images.
We encourage you to experiment with what you have learned in this chapter. Use your imagination and create some of your own 3D objects before moving on to the rest of the book. You'll then have some personal samples to work with and enhance as you learn and explore new techniques throughout the book. In the next chapter, we are really going to bring your objects to life!