The book:

    title: Graphics Gems IV
    editor: Paul S. Heckbert
    published: AP Professional (Academic Press), Boston, 1994
    price: $49.95
    575 pages, comes with either MAC or IBM floppy disk
    ISBN 0-12-336156-7 with MAC floppy
    ISBN 0-12-336155-9 with IBM (DOS) floppy (5.25")

Below are two things:
  * the preface to the book, to explain what it is about
  * the table of contents


This book is a cookbook for computer graphics programmers, a kind of
``Numerical Recipes'' for graphics.  It contains practical techniques
that can help you do 2D and 3D modeling, animation, rendering, and
image processing.  The 52 articles, written by 54 authors worldwide,
have been selected for their usefulness, novelty, and simplicity.  Each
article, or ``Gem'', presents a technique in words and formulas, and
also, for most of the articles, in C or C++ code as well.  The code is
available in electronic form on the IBM or Macintosh floppy disk in the
back pocket of the book, and is available on the Internet via FTP (see
address below).  The floppy disk also contains all of the code from the
previous volumes: Graphics Gems I, II, and III.  You are free to use
and modify this code in any way you like.

A few of the Gems in this book deserve special mention because they
provide implementations of particularly useful, but non-trivial
algorithms.  Gems IV.6 and IV.8 give very general, modular code to
polygonize parametric and implicit surfaces, respectively.  With these
two and a polygon renderer, you could probably display 95% of all
computer graphics models!  Gem I.5 finds 2D Voronoi diagrams or
Delaunay triangulations.  These data structures are very widely used
for mesh generation and other geometric operations.  In the area of
interaction, Gem III.1 provides code for control of orientation in
3-D.  This could be used in interactive 3-D modelers.  Finally, Gem I.8
gives code to find collisions of polyhedra, an important task in
physically-based modeling and animation.

This book, like the previous three volumes in the Graphics Gems series,
lies somewhere between the media of textbook, journal, and computer
bulletin board.  Textbooks explain algorithms very well, but if you are
doing computer graphics programming, then they may not provide what you
need: an implementation.  Similarly, technical journals seldom present
implementations, and they are often much more theoretical than a
programmer cares for.  The third alternative, computer bulletin boards
such as the USENET news group, occasionally
contain good code, but because they are unmoderated and unedited, they
are so flooded with queries that it is tedious to find useful
information.  The Graphics Gems series is an attempt at a middle
ground, where programmers worldwide can contribute graphics techniques
that they have found useful, and the best of these get published.  Most
of the articles are written by the inventors of the techniques, so you
will learn their motivations and see their programming techniques
firsthand.  Also, the implementations have been selected for their
portability; they are not limited to UNIX, IBM, or Macintosh systems.
Most of them will compile and run, perhaps with minor modifications, on
any computer with a C or C++ compiler.

Assembling this book has been a collaborative process involving many
people.  In the Spring of 1993, a call for contributions was
distributed worldwide via electronic mail and word of mouth.
Submissions arrived in the Summer of 1993.  These were read by me and
many were also read by one or more of my outside reviewers:  Eric
Haines, Andrew Glassner, Chandrajit Bajaj, Tom Duff, Ron Goldman, Tom
Sederberg, David Baraff, Jules Bloomenthal, Ken Shoemake, Mike Kass,
Don Mitchell, and Greg Ward.

Of the 155 articles submitted, 52 were accepted for publication.  These
were revised and, in most cases, formatted into Latex by the authors.
Coordinating the project at Academic Press in Cambridge, Massachusetts,
were Jenifer Niles and Brian Miller.  Book composition was done by Rena
Wells at Rosenlaui Publishing Services in Houston, Texas, and the cover
image was made by Eben Ostby of Pixar, in Richmond, California.  I am
very thankful to all of these people and to the others who worked on
this book for helping to make it a reality.  Great thanks also to the
"Graphics Gems" series editor, Andrew Glassner, for inviting me to be
editor for this volume, and to my wife, Bridget Johnson-Heckbert, for
her patience.

There are a few differences between this book and the previous volumes
of the series.  Organizationally, the code and bibliographies are not
collected at the back of the book, but appear with the text of the
corresponding article.  These changes make each Gem more
self-contained.  The book also differs in emphasis.  Relative to the
previous volumes, I have probably stressed novelty more, and simplicity
less, preferring an implementation of a complex computer graphics
algorithm over formulas from analytic geometry, for example.

In addition to the "Graphics Gems" series, there are several other good
sources for practical computer graphics techniques.  One of these is
the column ``Jim Blinn's Corner'' that appears in the journal "IEEE
Computer Graphics and Applications".  Another is the book "A
Programmer's Geometry", by Adrian Bowyer and John Woodwark
(Butterworth's, London, 1983), which is full of analytic geometry
formulas.  A mix of analytic geometry and basic computer graphics
formulas is contained in the book "Computer Graphics Handbook:
Geometry and Mathematics" by Michael E. Mortensen (Industrial Press,
New York, 1990).  Another excellent source is, of course, graphics

Code in this book is available on the World Wide Web at .
Or by anonymous FTP from in the directory
pub/Graphics/GraphicsGems/GemsIV.  [Note: in 1994 the correct ftp
machine was].  The code for other "Graphics Gems" books
is also available nearby.  Bug reports should be submitted as described
in the README file there.

Paul Heckbert, March 1994, updated May 1998.


Below is the table of contents for "Graphics Gems IV".  This table also
serves as an index to the code in the FTP collection.  Note that every
article has text that appears in the book but not in the FTP archive,
and some articles contain no C or C++ code.

file or		book	chapter title and author
directory      chapter


centroid.c	I.1	Centroid of a Polygon
			Gerard Bashein and Paul R. Detmer

convex_test/	I.2	Testing the Convexity of a Polygon
			Peter Schorn and Frederick Fisher

ptpoly_weiler/	I.3	An Incremental Angle Point in Polygon Test
			Kevin Weiler

ptpoly_haines/	I.4	Point in Polygon Strategies
			Eric Haines

delaunay/	I.5	Incremental Delaunay Triangulation
			Dani Lischinski

vert_norm/	I.6	Building Vertex Normals from an Unstructured Polygon
			Andrew Glassner

		I.7	Detecting Intersection of a Rectangular Solid and a
			Convex Polyhedron
			Ned Greene

collide.c	I.8	Fast Collision Detection of Moving Convex Polyhedra
			Rich Rabbitz


		II.1	Distance to an Ellipsoid
			John C. Hart

dist_fast.c	II.2	Fast Linear Approximations of Euclidean Distance in
			Higher Dimensions
			Yoshikazu Ohashi

outcode/	II.3	Direct Outcode Calculation for Faster Clip Testing
			Walt Donovan and Tim Van Hook

sph_poly.c	II.4	Computing the Area of a Spherical Polygon
			Robert D. Miller

		II.5	The Pleasures of `Perp Dot' Products
			F. S. Hill, Jr.

		II.6	Geometry for N-Dimensional Graphics
			Andrew J. Hanson


arcball/	III.1	Arcball Rotation Control
			Ken Shoemake

		III.2	Efficient Eigenvalues for Visualization
			Robert L. Cromwell

inv_fast.c	III.3	Fast Inversion of Length- and Angle-Preserving Matrices
			Kevin Wu

polar_decomp/	III.4	Polar Matrix Decomposition
			Ken Shoemake

euler_angle/	III.5	Euler Angle Conversion
			Ken Shoemake

		III.6	Fiber Bundle Twist Reduction
			Ken Shoemake


data_smooth/	IV.1	Smoothing and Interpolation with Finite Differences
			Paul H. C. Eilers

		IV.2	Knot Insertion using Forward Differences
			Phillip Barry and Ron Goldman

		IV.3	Converting a Rational Curve to a Standard Rational
			Bernstein-Bezier Representation
			Chandrajit Bajaj and Guoliang Xu

curve_isect/	IV.4	Intersecting Parametric Cubic Curves by Midpoint
			R. Victor Klassen

patch_conv.C	IV.5	Converting Rectangular Patches into Bezier Triangles
			Dani Lischinski

nurb_polyg/	IV.6	Tessellation of NURB Surfaces
			John W. Peterson

		IV.7	Equations of Cylinders and Cones
			Ching-Kuang Shene

implicit.c	IV.8	An Implicit Surface Polygonizer
			Jules Bloomenthal


		V.1	Computing the Intersection of a Line and a Cylinder
			Ching-Kuang Shene

ray_cyl.c	V.2	Intersecting a Ray with a Cylinder
			Joseph M. Cychosz and Warren N. Waggenspack, Jr.

vox_traverse.c	V.3	Voxel Traversal along a 3D Line
			Daniel Cohen

multi_jitter/	V.4	Multi-Jittered Sampling
			Kenneth Chiu, Peter Shirley, and Changyaw Wang

minray/		V.5	A Minimal Ray Tracer
			Paul S. Heckbert


		VI.1	A Fast Alternative to Phong's Specular Model
			Christophe Schlick

		VI.2	R.E versus N.H Specular Highlights
			Frederick Fisher and Andrew Woo

		VI.3	Fast Alternatives to Perlin's Bias and Gain Functions
			Christophe Schlick

		VI.4	Fence Shading
			Uwe Behrens


		VII.1	XOR-Drawing with Guaranteed Contrast
			Manfred Kopp and Michael Gervautz

		VII.2	A Contrast-Based Scalefactor for Luminance Display
			Greg Ward

dyn_range/	VII.3	High Dynamic Range Pixels
			Christophe Schlick


emboss.c	VIII.1	Fast Embossing Effects on Raster Image Data
			John Schlag

coons_warp.c	VIII.2	Bilinear Coons Patch Image Warping
			Paul S. Heckbert

convolve.c	VIII.3	Fast Convolution with Packed Lookup Tables
			George Wolberg and Henry Massalin

thin_image.c	VIII.4	Efficient Binary Image Thinning using Neighborhood Maps
			Joseph M. Cychosz

clahe.c		VIII.5	Contrast Limited Adaptive Histogram Equalization
			Karel Zuiderveld	VIII.6	Ideal Tiles for Shading and Halftoning
			Alan Wm Paeth


		IX.1	Placing Text Labels on Maps and Diagrams
			Jon Christensen, Joe Marks, and Stuart Shieber

graph_layout/	IX.2	Dynamic Layout Algorithm to Display General Graphs
			Laszlo Szirmay-Kalos


trilerp.c	X.1	Tri-linear Interpolation
			Steve Hill

interp_fast.c	X.2	Faster Linear Interpolation
			Steven Eker

vec_mat/	X.3	C++ Vector and Matrix Algebra Routines
			Jean-Francois Doue

GraphicsGems.c	X.4	C Header File and Vector Library
GraphicsGems.h		Andrew Glassner and Eric Haines


Paul Heckbert
Computer Science Dept., Carnegie Mellon University
5000 Forbes Ave, Pittsburgh PA 15213-3891, USA
more about Graphics Gems IV book