The subspeciality of computer graphics programming is a craft, an art,
a science, and (for some) a bit of a religious avocation as well. It's hard
to think of any other niche in our industry that can appeal to practioners
with such a wide range of backgrounds, levels of training, or native talent.
Computer scientists and mathematicians develop ever-bigger-and-better algorithms
for transformations, ray-tracing, and solid-modeling; the Silicon Valley
engineers design ever-faster graphics coprocessors; the Far-Eastern manufacturers
crank out ever-cheaper color CRTs with ever-higher resolutions; the systems
software people develop graphical user interfaces to soak up the pixels
and CPU cycles as fast as they appear; and self-taught teenagers can write
video games that make some of them wealthy before they are old enough to
drive.
When I first became involved with personal computers, the computer graphics
market was defined by incredibly expensive workstations on the high end
and the Apple II on the low end. Most of the readily available graphics
terminals were vector-based, because serial lines simply didn't have the
bandwidth to support raster graphics, and the generation of a few minutes
of high-resolution raster animation required days of mainframe computer
time. There was little in the way of hardware between these extremes that
the average programmer could play with, and the trade press reflected this
situation. Most books on computer graphics that I could lay my hands on
were stiflingly formal, academic texts with a heavy emphasis on mathematical
proofs and floating point, and a surprising paucity of quality illustrations.
Both the release of the original IBM PC in 1981 and the appearance of Foley
and van Dam's Fundamentals of Interactive Computer Graphics in 1982
foreshadowed the enormous changes that were about to sweep the field of
computing. The PC was the first representative of a standardized hardware
platform that would put 80386-based, 640 x 480, 16-color graphics capabilities
(or better) and sophisticated tools within the financial reach of nearly
every programmer by the end of the decade. Similarly, Foley and van Dam's
book made graphics software technology accessible to the programming masses.
The book was of manageable length and highly readable, yet it covered an
enormous range of graphical issues -- from plotting bar graphs to three-dimensional
transformations and chromatic color models -- and discussed them in sufficient
detail for the needs of all but the most advanced practitioners. My own
copy, which is always within easy reach of the keyboard, has become tattered
and stained from use.
But although the first edition of Foley and van Dam achieved "classic"
status almost immediately, the passing years and the inexorable march of
technology have not treated the book kindly. The amount of space it devoted
to raster graphics seems hopelessly inadequate no . (The description of
an important raster flood-fill algorithm, for example, is limited to a single
diagram and caption.) The book's treatment of menus and user interactions
has long since been outstripped by evolution in modern graphical user interfaces
such as the Macintosh's System 7, Unix's Motif, and DOS's Windows. And its
selection of color plates, many of which were based on Atari game computers
or Evans and Sutherland flight simulators, appear severely dated in our
era of inexpensive RISC workstations, photorealistic rendering, and shrink-wrapped
mass-market software like Autodesk Animator.
Fortunately, 1990 brought us a new edition of Foley and van Dam, which seems
likely to be even more important than the original volume. The book now
has four authors instead of two (Feiner and Hughes joined the team), a different
title (Computer Graphics: Principles and Practice), and a massive
amount of new material -- the number of pages has almost doubled. The printed
material has been fortified with an impressive number of dazzling full-color
illustrations -- several times as many as in the first edition -- that reflect
the very latest presentation technology. The subject matter has been reoriented
toward raster graphics and gives equal time to both integer and floating-point
graphics toolboxes. The algorithms have been recast in a Pascal-like structured
pseudocode. In short, the book has been revamped so drastically that the
most puzzling aspect is why Addison-Wesley chose to call it a 2nd Edition.
In its new incarnation, Computer Graphics: Principles and Practice
is divided into five main sections or groups of chapters. The first section
includes some historical perspective, basic graphics hardware concepts,
a simple integer graphics package that resembles Quick-Draw, 2-D and 3-D
transformations, and a 3-D floating-point graphics package that supports
hierarchies of graphic objects. The second section is devoted to user interfaces
and is completely up to date with authoritative discussions of Open Look,
Motif, the Macintosh, Next-Step, the latest arcade games, and even the cutting-edge
experiments in virtual reality. The third group embraces the topics of curves,
surfaces, modeling, and color systems. The fourth set of chapters talks
about image synthesis and surveys a gamut of complex issues, ranging from
ray tracing to the projection of textures and reflections onto contoured
surfaces. The last few chapters are concerned with page description languages,
animation, and finally with state-of-the-art products and research -- the
most sophisticated graphics hardware and software that man has yet devised
and/or that money can buy.
I should warn you that Foley and van Dam's new opus has a high intimidation
factor compared to its predecessor. Whereas the first edition was just about
the right length and had the right tone to be browsed from beginning to
end, the second edition is encyclopedic in its appearance and considerably
more demanding in its nature. Although the writing is excellent, and the
explanations are admirably lucid, you would hardly be any more inclined
to read this book straight through than you would be tempted to make a project
of devouring Knuth's three-volume Art of Computer Programming during
your summer vacation. The depth and breadth is simply too great, even if
you've got the mathematical background to handle the most advanced material
(as it happens, I don't).
Nevertheless, this is one of the finest reference works on the bookstore
shelves today, and sooner or later you're going to need one of the pearls
this book has to offer. Buy it now to read the delightful chapters on design
and implementation of user interfaces, and keep it nearby for those graphical
emergencies of the future.