So you want to be a computer graphics programmer? Computer graphics is a huge subject, and sometimes the hardest part of learning about it is knowing where to start. Fortunately there are vast numbers of books, periodicals, professional associations, web sites and other resources devoted to computer graphics, from general introductions to very narrow specializations. This bounty has its downside, though -- which of these is most suitable for various stages of a computer graphics programmer's development?
Here, I'll present a variety of resources that provide a solid foundation in the major areas of computer graphics. Most of these are taken from my own bookshelf, though a few were recommended by other computer graphics professionals.
Computer graphics is math and if anyone tries to tell you otherwise, well, just don't buy any real estate from him. Fortunately, the math requirements to get started are manageable, and much of the rest you can learn as you go. At a minimum, you ought to be comfortable with college algebra and trigonometry. You'll also want to brush up on basic numerical methods, paying particular attention to techniques for dealing with loss of precision and optimization. If you don't know what numerical integration is, you should find out.
While computer graphics can be coded in any language, you'll be way ahead if you're well acquainted with your language's facilities for structured or object-oriented programming. Most computer-graphics techniques are deceptively simple in concept (I've heard that computer scientist Paul Heckbert has the source code for a ray tracer printed on his business cards) but can quickly achieve mind-numbing complexity as features, fidelity, and optimizations are added.
Of course, you'll want to become comfortable with the graphics functions you'll be coding with -- whether low-level libraries like Xlib and the Windows GDI, or higher-level libraries like OpenGL and HOOPS.
There are many good introductory computer graphics texts. All of these give an introduction to many aspects of computer graphics, including points, lines, and transformations in 2D and 3D; graphics devices; rasterization and scan conversion; surfaces; color; hidden-line and surface removal; and lighting and shading. Some will include chapters on rendering techniques like ray-tracing, 3D modeling, animation, multi-media, and other specialized techniques. Some good introductory references include:
Computer Graphics, Principles and Practice, Second Edition, by James D. Foley, Andries van Dam, Steven K. Feiner, John F. Hughes (Addison- Wesley, 1990).
Often referred to as simply "Foley and van Dam," this venerable text (and its predecessor) is certainly the most popular computer graphics text -- and deservedly so. Its nearly 1200 pages are packed solid with clear explanations and Pascal-like pseudocode examples, from simple 2D transforms to radiosity rendering. There's no code disk so you'll have to hand-translate equations and pseudocode into your language of choice -- not a bad way to learn it, actually.
High Resolution Computer Graphics using Pascal/C, by Ian O. Angell and Gareth Griffith (John Wiley & Sons, 1988).
The Pascal version of this has a special place on my bookshelf--this was the first "real" computer graphics book I owned, and it still serves me well. Unlike Foley and van Dam, you can pretty much work this book front to back, accumulating a code library along the way. While the Pascal version is probably out of print, and despite the unfortunate title (there's nothing particularly resolution-dependent about the information), this would be a valuable addition to your library.
Computer Graphics (C Version), by Donald Hearn and M. Pauline Baker (Prentice Hall, 1997).
Although presented as the second edition of their original text, Computer Graphics is a complete rewrite of the original. This book distinguishes itself by covering (albeit briefly) quaternions as an alternative to rotation matrices.
Advanced Animation and Rendering Techniques, Theory and Practice, by Alan Watt and Mark Watt (ACM Press/Addison-Wesley, 1992).
Advanced Animation and Rendering Techniques, Theory and Practice covers in some detail parametric surfaces and patch rendering techniques (ray tracing and radiosity) as well as volume rendering, texture mapping, and articulated and "soft-object" animation. Preface this book with Alan Watt's Fundamentals of Three-Dimensional Computer Graphics (Addison-Wesley, 1989). While there's a bit of redundancy in the material, Fundamentals is a somewhat more accessible presentation.
An Introduction to Ray Tracing, edited by Andrew Glassner (Academic Press, 1989).
If you have any interest at all in photorealistic image synthesis you must add this volume to your library. The chapters were originally presented as a SIGGRAPH short course more than 11 years ago, but never mind -- this information is timeless. Just about everything you need to know to build your own ray tracer is there, including Paul Heckbert's classic, brilliant chapter, "Writing a Ray Tracer."
Radiosity, A Programmer's Perspective, by Ian Ashdown (John Wiley & Sons, 1994).
I have to confess I'm not usually keen on books that include scads of source code, as so often explanation and understanding are sacrificed in favor of source-code listings. Radiosity distinguishes itself by presenting clear and detailed information augmented by fully- functional radiosity rendering programs.
Encyclopedia of Graphics File Formats, Second Edition, by James D. Murray & William vanRyper (O'Reilly & Associates, 1996).
Once you start generating computer graphics you're probably going to want to be able to save and retrieve data. Murray and vanRyper's volume contains detailed information on over 100 common graphics formats, including lots of additional details and code examples on the accompanying CD-ROM. From the CD-ROM you can link to the Graphics File Format web site (http://www.ora.com/centers/gff/) for updates, new formats, FAQs and other information.
Graphics Gems I-V, various authors, (Academic Press).
When you actually start writing graphics code, and running into head-scratching problems, the first place you'll want to look for answers is the Graphics Gems books. Each of these is a collection of techniques submitted by computer- graphics programmers and researchers that solve specific problems in computer graphics applications. Each contains a collection of tips in many different areas -- from 2D shapes to rendering optimizations to image processing to numerical techniques. Source code is often included. The earlier books in the series may be hard to find.