Graphics Gems, by Book

Listed by book, in order.

return to main page


Graphics Gems

Glassner, Andrew, Useful 2D Geometry, p. 3-11.
Glassner, Andrew, Useful Trigonometry, p. 13-17.
Paeth, Alan W., Trigonometric Functions at Select Points, p. 18-19.
Goldman, Ronald, Triangles, p. 20-23.
Turk, Greg, Generating Random Points in Triangles, p. 24-28, code: p. 649-650, TriPoints.c.
Shapira, Andrew, Fast Line-Edge Intersections on a Uniform Grid, p. 29-36, code: p. 651-653, LineEdge.c.
Thompson, Kelvin, Area of Intersection: Circle and a Half-Plane, p. 38-39.
Thompson, Kelvin, Area of Intersection: Circle and a Thick Line, p. 40-42.
Thompson, Kelvin, Area of Intersection: Two Circles, p. 43-46.
Thompson, Kelvin, Vertical Distance from a Point to a Line, p. 47-48.
Paeth, Alan W., A Fast 2D Point-on-line Test, p. 49-50, code: p. 654-655, PntOnLine.c.
Shaffer, Clifford A., Fast Circle-Rectangle Intersection Checking, p. 51-53, code: p. 656, CircleRect.c.
Paeth, Alan W., Circles of Integral Radius on Integer Lattices, p. 57-60.
Heckbert, Paul S., Nice Numbers for Graph Labels, p. 61-63, code: p. 657-659, Label.c.
Cychosz, Joseph M., Efficient Generation of Sampling Jitter Using Look-up Tables, p. 64-74, code: p. 660-661, FastJitter.c.
Morrison, Jack C., Fast Anti-Aliasing Polygon Scan Conversion, p. 76-83, code: p. 662-666, AAPolyScan.c.
Heckbert, Paul S., Generic Convex Polygon Scan Conversion and Clipping, p. 84-86, code: p. 667-680, PolyScan/.
Heckbert, Paul S., Concave Polygon Scan Conversion, p. 87-91, code: p. 681-684, ConcaveScan.c.
Wallis, Bob, Fast Scan Conversion of Arbitrary Polygons, p. 92-97.
Heckbert, Paul S., Digital Line Drawing, p. 99-100, code: p. 685, DigitalLine.c.
Wyvill, Brian, Symmetric Double Step Line Algorithm, p. 101-104, code: p. 686-689, DoubleLine.c.
Thompson, Kelvin, Rendering Anti-Aliased Lines, p. 105-106, code: p. 690-693, AALines/.
Ritter, Jack, An Algorithm for Filling in 2D Wide Line Bevel Joints, p. 107-113.
Wallis, Bob, Rendering Fat Lines on a Raster Grid, p. 114-120.
Spoelder, Hans J.W., and Ullings, Fons H., Two-Dimensional Clipping: A Vector-Based Approach, p. 121-128, code: p. 694-710, 2DClip/.
Lee, Greg, Penk, Mike, and Wallis, Bob, Periodic Tilings of the Plane on a Raster Grid, p. 129-139.
Pavicic, Mark J., Anti-Aliasing Filters that Minimize "Bumpy" Sampling, p. 144-146.
Turkowski, Ken, Filters for Common Resampling Tasks, p. 147-165.
Olsen, John, Smoothing Enlarged Monochrome Images, p. 166-170.
Paeth, Alan W., Median Finding on a 3-by-3 Grid, p. 171-175, code: p. 711-712, Median.c.
Hawley, Stephen, Ordered Dithering, p. 176-178, code: p. 713-714, OrderDither.c.
Paeth, Alan W., A Fast Algorithm for General Raster Rotation, p. 179-195.
Schumacher, Dale A., Useful 1-to-1 Pixel Transforms, p. 196-209.
Thompson, Kelvin, Alpha Blending, p. 210-211.
Glassner, Andrew, Frame Buffers and Color Maps, p. 215-218.
Paeth, Alan W., Reading a Write-Only Write Mask, p. 219-220.
Morton, Mike, A Digital "Dissolve" Effect, p. 221-232, code: p. 715-717, Dissolve.c.
Paeth, Alan W., Mapping RGB Triples Onto Four Bits, p. 233-245, code: p. 718, RGBTo4Bits.c.
Heckbert, Paul S., What Are the Coordinates of a Pixel?, p. 246-248.
Paeth, Alan W., Proper Treatment of Pixels as Integers, p. 249-256, code: p. 719, PixelInteger.c.
Glassner, Andrew, Normal Coding, p. 257-264.
Heckbert, Paul S., Recording Animation in Binary Order for Progressive Temporal Refinement, p. 265-269, code: p. 720, BinRec.c.
Schumacher, Dale A., 1-to-1 Pixel Transforms Optimized Through Color-Map Manipulation, p. 270-274.
Heckbert, Paul S., A Seed Fill Algorithm, p. 275-277, code: p. 721-722, SeedFill.c.
Fishkin, Ken, Filling a Region in a Frame Buffer, p. 278-284.
Wallace, Bill, Precalculating Addresses for Fast Fills, Circles, and Lines, p. 285-286.
Gervautz, Michael, and Purgathofer, Werner, A Simple Method for Color Quantization: Octree Quantization, p. 287-293.
Glassner, Andrew, Useful 3D Geometry, p. 297-300.
Ritter, Jack, An Efficient Bounding Sphere, p. 301-303, code: p. 723-725, BoundSphere.c.
Goldman, Ronald, Intersection of Two Lines in Three-Space, p. 304.
Goldman, Ronald, Intersection of Three Planes, p. 305.
Paeth, Alan W., Digital Cartography for Computer Graphics, p. 307-320.
Bame, Paul D., Albers Equal-Area Conic Map Projection, p. 321-325, code: p. 726-729, Albers.c.
Montani, Claudio, and Scopigno, Roberto, Spheres-to-Voxels Conversion, p. 327-334.
Arvo, James, A Simple Method for Box-Sphere Intersection Testing, p. 335-339, code: p. 730-732, BoxSphere.c.
Wyvill, Brian, 3D Grid Hashing Function, p. 343-345, code: p. 733-734, Hash3D.c.
Hultquist, Jeff, Backface Culling, p. 346-347.
Lee, Mark E., Fast Dot Products for Shading, p. 348-360.
Thompson, Kelvin, Scanline Depth Gradient of a Z-Buffered Triangle, p. 361-363.
Glassner, Andrew, Simulating Fog and Haze, p. 364-365.
Glassner, Andrew, Interpretation of Texture Map Indices, p. 366-375.
Glassner, Andrew, Multidimensional Sum Tables, p. 376-381.
Ritter, Jack, A Simple Ray Rejection Test, p. 385-386.
Hultquist, Jeff, Intersection of a Ray with a Sphere, p. 388-389.
Badouel, Didier, An Efficient Ray-Polygon Intersection, p. 390-393, code: p. 735, RayPolygon.c.
Woo, Andrew, Fast Ray-Polygon Intersection, p. 394.
Woo, Andrew, Fast Ray-Box Intersection, p. 395-396, code: p. 736-737, RayBox.c.
Pearce, Andrew, Shadow Attenuation for Ray Tracing Transparent Objects, p. 397-399.
Schwarze, Jochen, Cubic and Quartic Roots, p. 404-407, code: p. 738-786, Roots3And4.c.
Schneider, Philip J., A Bézier Curve-Based Root-Finder, p. 408-415, code: p. 787, NearestPoint.c.
Hook, D.G., and McAree, P.R., Using Sturm Sequences To Bracket Real Roots of Polynomial Equations, p. 416-423, code: p. 743-755, Sturm/.
Lalonde, Paul, and Dawson, Robert, A High-Speed, Low Precision Square Root, p. 424-426, code: p. 756-757, SquareRoot.c.
Paeth, Alan W., A Fast Approximation To the Hypotenuse, p. 427-431, code: p. 758, HypotApprox.c.
Ritter, Jack, A Fast Approximation To 3D Euclidian Distance, p. 432-433.
Thompson, Kelvin, Full-Precision Constants, p. 434.
Thompson, Kelvin, Converting Between Bits and Digits, p. 435.
Wyvill, Brian, Storage-free Swapping, p. 436-437.
Glassner, Andrew, Generating Random Integers, p. 438-439.
Ritter, Jack, Fast 2D-3D Rotation, p. 440-441.
Shoemake, Ken, Bit Patterns for Encoding Angles, p. 442.
Shaffer, Clifford A., Bit Interleaving for Quad- or Octrees, p. 443-447, code: p. 759-762, Interleave.c.
Fishkin, Ken, A Fast HSL-to-RGB Transform, p. 448-449, code: p. 763-764, HSLtoRGB.c.
Thompson, Kelvin, Matrix Identities, p. 453-454.
Thompson, Kelvin, Transforming Axes, p. 456-459.
Thompson, Kelvin, Fast Matrix Multiplication, p. 460-461.
Hultquist, Jeff, A Virtual Trackball, p. 462-463.
Raible, Eric, Matrix Orthogonalization, p. 464, code: p. 765, MatrixOrtho.c.
Pique, Michael E., Rotation Tools, p. 465-469.
Carling, Richard, Matrix Inversion, p. 470-471, code: p. 766-769, MatrixInvert.c.
Goldman, Ronald, Matrices and Transformations, p. 472-475.
Cychosz, Joseph M., Efficient Post-Concatenation of Transformation Matrices, p. 476-481, code: p. 770-772, MatrixPost.c.
Greene, Ned, Transformation Identities, p. 485-493.
Turkowski, Ken, Fixed-Point Trigonometry with CORDIC Iterations, p. 494-497, code: p. 773-774, FixedTrig.c.
Maillot, Patrick-Gilles, Using Quaternions for Coding 3D Transformations, p. 498-515, code: p. 775-777, Quaternions.c.
Cunningham, Steve, 3D Viewing and Rotation Using Orthonormal Bases, p. 516-521, code: p. 778-779, ViewTrans.c.
Turkowski, Ken, The Use of Coordinate Frames in Computer Graphics, p. 522-532.
Wallis, Bob, Forms, Vectors, and Transforms, p. 533-538, code: p. 780-784, Forms.c.
Turkowski, Ken, Properties of Surface-Normal Transformations, p. 539-547.
Arvo, James, Transforming Axis-Aligned Bounding Boxes, p. 548-550, code: p. 785-786, TransBox.c.
Hall, Mark, Defining Surfaces From Sampled Data, p. 552-557.
Hall, Mark, Defining Surfaces From Contour Data, p. 558-561.
Glassner, Andrew, Computing Surface Normals for 3D Models, p. 562-566.
Bloomenthal, Jules, Calculation of Reference Frames Along a Space Curve, p. 567-571.
Glassner, Andrew, Planar Cubic Curves, p. 575-578.
Rasala, Richard, Explicit Cubic Spline Interpolation Formulas, p. 579-584.
Gomez, Julian, Fast Spline Drawing, p. 585-586.
Goldman, Ronald, Some Properties of Bézier Curves, p. 587-593.
Wallis, Bob, Tutorial on Forward Differencing, p. 594-603.
Goldman, Ronald, Integration of Bernstein Basis Functions, p. 604-606.
Schneider, Philip J., Solving the Nearest-Point-on-Curve Problem, p. 607-611, code: p. 787-796, NearestPoint.c.
Schneider, Philip J., An Algorithm for Automatically Fitting Digitized Curves, p. 612-626, code: p. 797-807, FitCurves.c.
Glassner, Andrew, Graphics Gems Header File, p. 629-632, code: p. 629-632, GraphicsGems.h.
Glassner, Andrew, 2D and 3D Vector C Library, p. 633-642, code: p. 633-642, GGVecLib.c GraphicsGems.h.
Hultquist, Jeff, Memory Allocation in C, p. 643, code: p. 643.
Raible, Eric, Two Useful C Macros, p. 644, code: p. 644.
Thompson, Kelvin, How to Build Circular Structures in C, p. 645, code: p. 645.
Thompson, Kelvin, How to Use C Register Variables to Point to 2D Arrays, p. 646, code: p. 646.

Graphics Gems II

Rokne, Jon, The Area of a Simple Polygon, p. 5-6.
Prasad, Mukesh, Intersection of Line Segments, p. 7-9, code: p. 473-476, xlines.c.
Morrison, Jack C., Distance From a Point To a Line, p. 10-13.
Rokne, Jon, An Easy Bounding Circle, p. 14-16.
Rokne, Jon, The Smallest Circle Containing the Intersection of Two Circles, p. 17-18.
Rokne, Jon, Appolonius's 10th Problem, p. 19-24.
Musgrave, F. Kenton, A Peano Curve Generation Algorithm, p. 25, code: p. 477-484, Peano/.
Voorhies, Douglas, Space-Filling Curves and a Measure of Coherence, p. 26-30, code: p. 485-486, Hilbert.c.
Steinhart, Jonathan E., Scanline Coherent Shape Algebra, p. 31-45, code: p. 487-501.
Schumacher, Dale A., Image Smoothing and Sharpening by Discrete Convolution, p. 50-56.
Schumacher, Dale A., A Comparison of Digital Halftoning Techniques, p. 57-71, code: p. 502-508.
Thomas, Spencer W., and Bogart, Rod G., Color Dithering, p. 72-77, code: p. 509-513, dither/.
Schumacher, Dale A., Fast Anamorphic Image Scaling, p. 78-79.
Ward, Greg, Real Pixels, p. 80-83, code: RealPixels/.
Yap, Sue-Ken, A Fast 90-Degree Bitmap Rotator, p. 84-85, code: p. 514-515, rotate8x8.c.
Holt, Jeff, Rotation of Run-Length Encoded Image Data, p. 86-88, code: p. 516-524.
Glassner, Andrew, Adaptive Run-Length Encoding, p. 89-92.
Paeth, Alan W., Image File Compression Made Easy, p. 93-100.
Max, Nelson L., An Optimal Filter for Image Reconstruction, p. 101-104.
Schlag, John, Noise Thresholding in Edge Images, p. 105-106.
Bieri, Hanspeter, and Kohler, Andreas, Computing the Area, the Circumference, and the Genus of a Binary Digital Image, p. 107-111, code: p. 525-527.
Thomas, Spencer W., Efficient Inverse Color Map Computation, p. 116-125, code: p. 528-535, inv_cmap/.
Wu, Xiaolin, Efficient Statistical Computations for Optimal Color Quantization, p. 126-133, code: quantizer.c.
Musgrave, F. Kenton, A Random Color Map Animation Algorithm, p. 134-137, code: p. 536-541, ran_ramp.c.
Hall, Jim, and Lindgren, Terence, A Fast Approach To PHIGS PLUS Pseudo Color, p. 138-142.
Paeth, Alan W., Mapping RGB Triples Onto 16 Distinct Values, p. 143-146.
Martindale, David, and Paeth, Alan W., Television Color Encoding and "Hot" Broadcast Colors, p. 147-158, code: p. 542-549, hot.c.
Meyer, Gary W., An Inexpensive Method of Setting the Monitor White Point, p. 159-162.
Musgrave, F. Kenton, Some Tips for Making Color Hardcopy, p. 163-165.
Goldman, Ronald, Area of Planar Polygons and Volume of Polyhedra, p. 170-171.
Shaffer, Clifford A., Getting Around on a Sphere, p. 172-173.
Paeth, Alan W., Exact Dihedral Metrics for Common Polyhedra, p. 174-178.
Glassner, Andrew, A Simple Viewing Geometry, p. 179-180.
Bogart, Rod G., View Correlation, p. 181-190, code: p. 550-562, viewcorr/.
Glassner, Andrew, Maintaining Winged-Edge Models, p. 191-201.
Montani, Claudio, and Scopigno, Roberto, Quadtree/Octree-to-Boundary Conversion, p. 202-218.
Maillot, Patrick-Gilles, Three-Dimensional Homogeneous Clipping of Triangle Strips, p. 219-231, code: p. 563-570.
Thalmann, Nadia Magnenat, Thalmann, Daniel, and Minh, Hong Tong, InterPhong Shading, p. 232-241, code: p. 571-574, InterPhong.c.
Haines, Eric, Fast Ray-Convex Polyhedron Intersection, p. 247-250, code: p. 575-576, RayCPhdron.c.
Cychosz, Joseph M., Intersecting a Ray with An Elliptical Torus, p. 251-256, code: p. 577-580, intersect/.
Voorhies, Douglas, and Kirk, David, Ray-Triangle Intersection Using Binary Recursive Subdivision, p. 257-263.
Kirk, David, and Arvo, James, Improved Ray Tagging for Voxel-Based Ray Tracing, p. 264-266.
Haines, Eric, Efficiency Improvements for Hierarchy Traversal in Ray Tracing, p. 267-272.
Pearce, Andrew, A Recursive Shadow Voxel Cache for Ray Tracing, p. 273-274, code: p. 581-582, VoxelCache.c.
Pearce, Andrew, Avoiding Incorrect Shadow Intersections for Ray Tracing, p. 275-276.
Lee, Mark E., and Uselton, Samuel P., A Body Color Model: Absorption Through Translucent Media, p. 277-282.
Lee, Mark E., and Uselton, Samuel P., More Shadow Attenuation for Ray Tracing Transparent or Translucent Objects, p. 283-289.
Chen, Shenchang Eric, Implementing Progressive Radiosity with User-Provided Polygon Display Routines, p. 295-298, code: p. 583-597, radiosity/.
Beran-Koehn, Jeffrey C., and Pavicic, Mark J., A Cubic Tetrahedral Adaptation of the Hemi-Cube Algorithm, p. 299-302.
Tampieri, Filippo, Fast Vertex Radiosity Update, p. 303-305, code: p. 598, FastUpdate.c.
Shirley, Peter, Radiosity via Ray Tracing, p. 306-310.
Sillion, François, Detection of Shadow Boundaries for Adaptive Meshing in Radiosity, p. 311-315.
Thomas, Spencer W., Decomposing a Matrix Into Simple Transformations, p. 320-323, code: p. 599-602, unmatrix.c.
Goldman, Ronald, Recovering the Data From the Transformation Matrix, p. 324-331.
Goldman, Ronald, Transformations as Exponentials, p. 332-337.
Goldman, Ronald, More Matrices and Transforms: Shear and Pseudo-Perspective, p. 338-341.
Wu, Kevin, Fast Matrix Inversion, p. 342-350, code: p. 603-605, inverse.c.
Shoemake, Ken, Quaternions and 4x4 Matrices, p. 351-354.
Arvo, James, Random Rotation Matrices, p. 355-356, code: p. 606-607, rotate.c.
Arvo, James, Classifying Small Sparse Matrices, p. 357-361, code: p. 608-609, sparse.c.
Shoemake, Ken, Bit Picking, p. 366-367.
Shoemake, Ken, Faster Fourier Transform, p. 368-370.
Paeth, Alan W., and Schilling, David, Of Integers, Fields, and Bit Counting, p. 371-376, code: p. 610-611, BitCounting/.
Schlag, John, Using Geometric Constructions to Interpolate Orientation with Quaternions, p. 377-380.
Paeth, Alan W., A Half-Angle Identity for Digital Computation: The Joys of the Halved Tangent, p. 381-386.
Musial, Christopher J., An Integer Square Root Algorithm, p. 387-388, code: p. 612.
Capelli, Ron, Fast Approximation To the Arctangent, p. 389-391.
Ritter, Jack, Fast Sign of Cross Product Calculation, p. 392-393, code: p. 613-614.
Shoemake, Ken, Interval Sampling, p. 394-395.
Ward, Greg, A Recursive Implementation of the Perlin Noise Function, p. 396-401, code: p. 615-616, noise3.c.
Moore, Doug, and Warren, Joseph, Least-Squares Approximations To Bézier Curves and Surfaces, p. 406-411.
Shoemake, Ken, Beyond Bézier Curves, p. 412-416.
Schlag, John, A Simple Formulation for Curve Interpolation with Variable Control Point Approximation, p. 417-419.
Lindgren, Terence, Symmetric Evaluation of Polynomials, p. 420-423.
Seidel, Hans-Peter, Menelaus's Theorem, p. 424-427.
Seidel, Hans-Peter, Geometrically Continuous Cubic Bézier Curves, p. 428-434.
Musial, Christopher J., A Good Straight-Line Approximation of a Circular Arc, p. 435-439, code: p. 617.
Paeth, Alan W., Great Circle Plotting, p. 440-445.
Wu, Xiaolin, Fast Anti-Aliased Circle Generation, p. 446-450.
Glassner, Andrew, Graphics Gems Header File, p. 455-457, code: p. 629-632, GraphicsGems.h.
Glassner, Andrew, and Bogart, Rod G., 2D and 3D Vector C Library, p. 458-466, code: p. 633-642, GGVecLib.c GraphicsGems.h.
Hollasch, Steve, Useful C Macros for Vector Operations, p. 467-469, code: p. 467-469, vector.h.

Graphics Gems III

Möller, Tomas, Fast Bitmap Stretching, p. 4-7, code: p. 411-413, fastBitmap.c.
Schumacher, Dale A., General Filtered Image Rescaling, p. 8-16, code: p. 414-424, filter.c filter_rcg.c.
Schumacher, Dale A., Optimization of Bitmap Scaling Operations, p. 17-19, code: p. 425-428, bitmap.c.
Bragg, Dennis, A Simple Color Reduction Filter, p. 20-22, code: p. 429-431, rgbvary.c rgbvaryW.c.
Moore, Doug, and Warren, Joseph, Compact Isocontours From Sampled Data, p. 23-28.
Feldman, Tim, Generating Iso-value Contours From a Pixmap, p. 29-33, code: p. 432-440, contour.c.
Salesin, David, and Barzel, Ronen, Compositing Black-and-White Bitmaps, p. 34-35.
Scofield, Cary, 2-1/2-d Depth-of-Field Simulation for Computer Animation, p. 36-38.
Furman, Eric, A Fast Boundary Generator for Composited Regions, p. 39-43, code: p. 441-445, scallops8.c.
Hill, Steve, IEEE Fast Square Root, p. 48, code: p. 446-447, sqrt.c.
Hill, Steve, A Simple Fast Memory Allocator, p. 49-50, code: p. 448-451, alloc/.
Hanson, Andrew J., The Rolling Ball, p. 51-60, code: p. 452-453, 3d.c defs.h.
Rokne, Jon, Interval Arithmetic, p. 61-66, code: p. 454-457, interval.C.
Paeth, Alan W., Fast Generation of Cyclic Sequences, p. 67-76, code: p. 458-459, cyclic.c.
Paeth, Alan W., A Generic Pixel Selection Mechanism, p. 77-79.
Shirley, Peter, Nonuniform Random Point Sets, p. 80-83.
Goldman, Ronald, Cross Product in Four Dimensions and Beyond, p. 84-88.
Badouel, Didier, and Wuthrich, Charles A., Face-Connected Line Segment Generation in an n-Dimensional Space, p. 89-91, code: p. 460, ndline.c.
Morrison, Jack C., Quaternion Interpolation with Extra Spins, p. 96-97, code: p. 461-462, quatspin.c.
Goldman, Ronald, Decomposing Projective Transformations, p. 98-107.
Goldman, Ronald, Decomposing Linear and Affine Transformations, p. 108-116.
Arvo, James, Fast Random Rotation Matrices, p. 117-120, code: p. 463-464, rand_rotation.c.
Dana, Paul, Issues and Techniques for Keyframing Transformations, p. 121-123.
Shoemake, Ken, Uniform Random Rotations, p. 124-132, code: p. 465-467, urot.c.
Elber, Gershon, Interpolation Using Bézier Curves, p. 133-136, code: p. 468-471, bzrinter.c.
Barr, A.H., Physically Based Superquadrics, p. 137-159, code: p. 472-477, sqfinal.c.
Van Aken, Jerry, and Simar, Ray, A Parametric Elliptical Arc Algorithm, p. 164-172, code: p. 478-479, parelarc.c.
Rosati, Claudio, A Simple Connection Algorithm for 2-D Drawing, p. 173-181, code: p. 480-486, con2d.c.
Srinivasan, Raman V., A Fast Circle Clipping Algorithm, p. 182-187, code: p. 487-490, circlexc.c.
Shaffer, Clifford A., and Feustel, Charles D., Exact Computation of 2-D Intersections, p. 188-192, code: p. 491-495, Polyintr.c.
Miller, Robert D., Joining Two Lines with a Circular Arc Fillet, p. 193-198, code: p. 496-499, fillet.c.
Antonio, Franklin, Faster Line Segment Intersection, p. 199-202, code: p. 500-501, insectc.c.
Sevici, Constantin A., Solving the Problem of Apollonius and Other Related Problems, p. 203-209.
López-López, Fernando J., Triangles Revisited, p. 215-218.
Chin, Norman, Partitioning a 3-D Convex Polygon with an Arbitrary Plane, p. 219-222, code: p. 502-510, partition3d/.
Georgiades, Príamos, Signed Distance From Point To Plane, p. 223-224, code: p. 511, pt2plane.c.
Salesin, David, and Tampieri, Filippo, Grouping Nearly Coplanar Polygons Into Coplanar Sets, p. 225-230, code: p. 512-516, planeSets.c.
Tampieri, Filippo, Newell's Method for the Plane Equation of a Polygon, p. 231-232, code: p. 517-518, newell.c.
Georgiades, Príamos, Plane-to-Plane Intersection, p. 233-235, code: p. 519-520, pl2plane.c.
Voorhies, Douglas, Triangle-Cube Intersection, p. 236-239, code: p. 521-526, triangleCube.c.
Wanger, Len, and Fusco, Mike, Fast N-Dimensional Extent Overlap Testing, p. 240-243, code: p. 527-533, exttest/.
Moore, Doug, Subdividing Simplices, p. 244-249, code: p. 534-535, simplex/.
Moore, Doug, Understanding Simploids, p. 250-255.
Lischinski, Dani, Converting Bézier Triangles Into Rectangular Patches, p. 256-261, code: p. 536-537, bezierTri.C.
Lindgren, Terence, Sanchez, Juan, and Hall, Jim, Curve Tessellation Criteria Thru Sampling, p. 262-265.
Sung, Kelvin, and Shirley, Peter, Ray Tracing with the BSP Tree, p. 271-274, code: p. 538-546, bsp.c.
Cychosz, Joseph M., and Waggenspack, Warren N., Jr., Intersecting a Ray with a Quadric Surface, p. 275-283, code: p. 547-550, intqdr.c intell.c.
Cychosz, Joseph M., Use of Residency Masks and Object Space Partitioning to Eliminate Ray-Object Intersection Calculations, p. 284-287.
Musgrave, F. Kenton, A Panoramic Virtual Screen for Ray Tracing, p. 288-294, code: p. 551-554, panorama.c.
Trumbore, Ben, Rectangular Bounding Volumes for Popular Primitives, p. 295-300, code: p. 555-561, bounding_volumes.c.
Wu, Xiaolin, A Linear-Time Simple Bounding Volume Algorithm, p. 301-306.
Wang, Changyaw, Physically Correct Direct Lighting for Distribution Ray Tracing, p. 307-313, code: p. 562-568, luminaire/.
Bian, Buming, Hemispherical Projection of a Triangle, p. 314-317, code: p. 569-574, hemis.c.
Max, Nelson L., and Allison, Michael J., Linear Radiosity Approximation Using Vertex-to-Vertex Form Factors, p. 318-323.
Beran-Koehn, Jeffrey C., and Pavicic, Mark J., Delta Form-Factor Calculation for the Cubic Tetrahedral Algorithm, p. 324-328, code: p. 575-576, forfac.c.
Tampieri, Filippo, Accurate Form-Factor Computation, p. 329-333, code: p. 577-581, accForm.c.
Woo, Andrew, The Shadow Depth Map Revisited, p. 338-342, code: p. 582, zdepth.c.
Cheng, Russell C.H., Fast Linear Color Rendering, p. 343-348, code: p. 583-585, fastLinear.c.
Cheng, Russell C.H., Edge and Bit-Mask Calculations for Anti-Aliasing, p. 349-354, code: p. 586-593, edgeCalc.c.
Grace, Thom, Fast Span Conversion: Unrolling Short Loops, p. 355-357, code: p. 594-596, fastSpan.c.
Hollasch, Steve, Progressive Image Refinement via Gridded Sampling, p. 358-361, code: p. 597-598, PIR.c.
Fleischer, Kurt, and Salesin, David, Accurate Polygon Scan Conversion Using Half-Open Intervals, p. 362-365, code: p. 599-605, accurate_scan/.
Glassner, Andrew, Darklights, p. 366-368.
Glassner, Andrew, Anti-Aliasing in Triangular Pixels, p. 369-373.
Snyder, John, Barzel, Ronen, and Gabriel, Steve, Motion Blur on Graphics Workstations, p. 374-382, code: p. 606-609, motblur.c.
Arvo, James, and Scofield, Cary, The Shader Cache: A Rendering Pipeline Accelerator, p. 383-389.
Glassner, Andrew, Graphics Gems Header File, p. 455-457, code: p. 393-395, GraphicsGems.h.
Glassner, Andrew, 2-D and 3-D Vector C Library -- Corrected and Indexed, p. 396-404, code: p. 396-404, GraphicsGems.c.
Hollasch, Steve, Useful C Macros for Vector Operations, p. 405-407, code: p. 405-407, vector.h.

Graphics Gems IV

Bashein, Gerard, and Detmer, Paul R., Centroid of a Polygon, p. 3-6, code: p. 5, centroid.c.
Schorn, Peter, and Fisher, Frederick, Testing the Convexity of a Polygon, p. 7-15, code: p. 11-15, convex_test/.
Weiler, Kevin, An Incremental Angle Point in Polygon Test, p. 16-23, code: p. 17-22, ptpoly_weiler/.
Haines, Eric, Point in Polygon Strategies, p. 24-46, code: p. 34-45, ptpoly_haines/.
Lischinski, Dani, Incremental Delaunay Triangulation, p. 47-59, code: p. 51-58, delaunay/.
Glassner, Andrew, Building Vertex Normals from an Unstructured Polygon List, p. 60-73, code: p. 64-73, vert_norm/.
Greene, Ned, Detecting Intersection of a Rectangular Solid and a Convex Polyhedron, p. 74-82.
Rabbitz, Rich, Fast Collision Detection of Moving Convex Polyhedra, p. 83-109, code: p. 91-108, collide.c.
Hart, John C., Distance to an Ellipsoid, p. 113-119.
Ohashi, Yoshikazu, Fast Linear Approximations of Euclidean Distance in Higher Dimensions, p. 121-124, code: dist_fast.c.
Donovan, Walt, and Van Hook, Tim, Direct Outcode Calculation for Faster Clip Testing, p. 125-131, code: p. 127-131, outcode/.
Miller, Robert D., Computing the Area of a Spherical Polygon, p. 132-137, code: p. 135-136, sph_poly.c.
Hill, F. S., Jr., The Pleasures of `Perp Dot' Products, p. 138-148.
Hanson, Andrew J., Geometry for N-Dimensional Graphics, p. 149-170.
Shoemake, Ken, Arcball Rotation Control, p. 175-192, code: p. 178-191, arcball/.
Cromwell, Robert L., Efficient Eigenvalues for Visualization, p. 193-198.
Wu, Kevin, Fast Inversion of Length- and Angle-Preserving Matrices, p. 199-206, code: p. 204-206, inv_fast.c.
Shoemake, Ken, Polar Matrix Decomposition, p. 207-221, code: p. 211-220, polar_decomp/.
Shoemake, Ken, Euler Angle Conversion, p. 222-229, code: p. 225-228, euler_angle/.
Shoemake, Ken, Fiber Bundle Twist Reduction, p. 230-236.
Eilers, Paul H. C., Smoothing and Interpolation with Finite Differences, p. 241-250, code: p. 246-249, data_smooth/.
Barry, Phillip, and Goldman, Ronald, Knot Insertion using Forward Differences, p. 251-255.
Bajaj, Chandrajit, and Xu, Guoliang, Converting a Rational Curve to a Standard Rational Bernstein-Bézier Representation, p. 256-260.
Klassen, R. Victor, Intersecting Parametric Cubic Curves by Midpoint Subdivision, p. 261-277, code: p. 266-276, curve_isect/.
Lischinski, Dani, Converting Rectangular Patches into Bézier Triangles, p. 278-285, code: p. 281-285, patch_conv.C.
Peterson, John W., Tessellation of NURB Surfaces, p. 286-320, code: p. 294-319, nurb_polyg/.
Shene, Ching-Kuang, Equations of Cylinders and Cones, p. 321-323.
Bloomenthal, Jules, An Implicit Surface Polygonizer, p. 324-349, code: p. 334-349, implicit.c.
Shene, Ching-Kuang, Computing the Intersection of a Line and a Cylinder, p. 353-355.
Cychosz, Joseph M., and Waggenspack, Warren N., Jr., Intersecting a Ray with a Cylinder, p. 356-365, code: p. 361-364, ray_cyl.c.
Cohen, Daniel, Voxel Traversal along a 3D Line, p. 366-369, code: p. 368, vox_traverse.c.
Chiu, Kenneth, Shirley, Peter, and Wang, Changyaw, Multi-Jittered Sampling, p. 370-374, code: p. 373-374, multi_jitter/.
Heckbert, Paul S., A Minimal Ray Tracer, p. 375-381, code: p. 378-380, minray/.
Schlick, Christophe, A Fast Alternative to Phong's Specular Model, p. 385-387.
Fisher, Frederick, and Woo, Andrew, R.E versus N.H Specular Highlights, p. 388-400.
Schlick, Christophe, Fast Alternatives to Perlin's Bias and Gain Functions, p. 401-403.
Behrens, Uwe, Fence Shading, p. 404-409.
Kopp, Manfred, and Gervautz, Michael, XOR-Drawing with Guaranteed Contrast, p. 413-414.
Ward, Greg, A Contrast-Based Scalefactor for Luminance Display, p. 415-421.
Schlick, Christophe, High Dynamic Range Pixels, p. 422-429, code: p. 425-428, dyn_range/.
Schlag, John, Fast Embossing Effects on Raster Image Data, p. 433-437, code: p. 435-436, emboss.c.
Heckbert, Paul S., Bilinear Coons Patch Image Warping, p. 438-446, code: p. 441-444, coons_warp.c.
Wolberg, George, and Massalin, Henry, Fast Convolution with Packed Lookup Tables, p. 447-464, code: p. 455-463, convolve.c.
Cychosz, Joseph M., Efficient Binary Image Thinning using Neighborhood Maps, p. 465-473, code: p. 470-472, thin_image.c.
Zuiderveld, Karel, Contrast Limited Adaptive Histogram Equalization, p. 474-485, code: p. 479-484, clahe.c.
Paeth, Alan W., Ideal Tiles for Shading and Halftoning, p. 486-492.
Christensen, Jon, Marks, Joe, and Shieber, Stuart, Placing Text Labels on Maps and Diagrams, p. 497-504.
Szirmay-Kalos, László, Dynamic Layout Algorithm to Display General Graphs, p. 505-517, code: p. 511-517, graph_layout/.
Hill, Steve, Tri-linear Interpolation, p. 521-525, code: p. 523-524, trilerp.c.
Eker, Steven, Faster Linear Interpolation, p. 526-533, code: p. 532-533, interp_fast.c.
Doué, Jean-François, C++ Vector and Matrix Algebra Routines, p. 534-557, code: p. 535-557, vec_mat/.
Glassner, Andrew, and Haines, Eric, C Header File and Vector Library, p. 558-570, code: p. 558-570, GraphicsGems.c GraphicsGems.h.

Graphics Gems V

Herbison-Evans, Don, Solving Quartics and Cubics for Graphics, p. 3-15, code: ch1-1/.
Turkowski, Ken, Computing the Inverse Square Root, p. 16-21, code: p. 17-19, ch1-2/.
Turkowski, Ken, Fixed Point Square Root, p. 22-24, code: p. 23, ch1-3/.
Shoemake, Ken, Rational Approximation, p. 25-32, code: p. 29-31, ch1-4/.
Van Gelder, Allen, Efficient Computation of Polygon Area and Polyhedron Volume, p. 35-41.
Carvalho, Paulo Cezar Pinto, and Cavalcanti, Paulo Roma, Point in Polyhedron Testing Using Spherical Polygons, p. 42-49, code: p. 46-49, ch2-2/.
Glassner, Andrew, Clipping a Concave Polygon, p. 50-54.
Hanson, Andrew J., Rotations for N-dimensional Graphics, p. 55-64.
Buckley, Robert, Parallelohedra and Uniform Color Quantization, p. 65-71.
Hill, Kenneth J., Matrix-based Ellipse Geometry, p. 72-77, code: ch2-6/.
Paeth, Alan W., Distance Approximations and Bounding Polyhedra, p. 78-87, code: p. 85-86, ch2-7/.
Alciatore, David, and Miranda, Rick, The Best Least-Squares Line Fit, p. 91-97.
Hill, Steve, and Roberts, Jonathan C., Surface Models and the Resolution of N-Dimensional Cell Ambiguity, p. 98-106.
Arata, Louis K., Tri-cubic Interpolation, p. 107-110, code: p. 108-109, ch3-3/.
Miller, Robert D., Transforming Coordinates From One Coordinate Plane To Another, p. 111-120, code: p. 115-120, ch3-4/.
Chin, Norman, A Walk Through BSP Trees, p. 121-138, code: p. 131-138, ch3-5/.
Blanc, Carole, Generic Implementation of Axial Deformation Techniques, p. 139-145, code: p. 141-144, ch3-6/.
Goldman, Ronald, Identities for the Univariate, Bivariate Bernstein Basis Fcns, p. 149-162.
Goldman, Ronald, Identities for the B-Spline Basis Functions, p. 163-167.
Turkowski, Ken, Circular Arc Subdivision, p. 168-172, code: p. 170-171, ch4-3/.
de Figueiredo, Luiz Henrique, Adaptive Sampling of Parametric Curves, p. 173-178, code: p. 177, ch4-4/.
Ahn, Jaewoo, Fast Generation of Ellipsoids, p. 179-190, code: p. 185-190, ch4-5/.
Bajaj, Chandrajit, and Xu, Guoliang, Sparse Smooth Connection Between Bézier/B-Spline Curves, p. 191-198.
Gravesen, Jens, The Length of Bézier Curves, p. 199-205, code: ch4-7/.
Miller, Robert D., Quick and Simple Bézier Curve Drawing, p. 206-209, code: p. 207-209, ch4-8/.
Shoemake, Ken, Linear Form Curves, p. 210-223, code: p. 220-222, ch4-9/.
Shene, Ching-Kuang, Computing the Intersection of a Line and a Cone, p. 227-231.
Schlick, Christophe, and Subrenat, Gilles, Ray Intersection of Tessellated Surfaces: Quad Vs Triangle, p. 232-241, code: p. 237-240, ch5-2/.
Möller, Tomas, Faster Ray Tracing Using Scanline Rejection, p. 242-257, code: p. 249-257, ch5-3/.
Leipelt, Andreas, Ray Tracing a Swept Sphere, p. 258-267, code: p. 261-267, ch5-4/.
Márton, Gábor, Acceleration of Ray Tracing via Voronoi-diagrams, p. 268-284, code: p. 276-283, ch5-5/.
Zimmerman, Kurt, Direct Lighting Models for Ray Tracing with Cylindrical Lamps, p. 285-289.
Feda, Martin, Improving Intermediate Radiosity Using Directional Light, p. 290-293.
Purgathofer, Werner, Tobler, Robert F., and Geiler, Manfred, Improved Threshold Matrices for Ordered Dithering, p. 297-301.
Wong, Tien-tsin, and Hsu, Siu-chi, Halftoning with Selective Precipitation and Adaptive Clustering, p. 302-313, code: p. 306-312, ch6-2/.
Eker, Steven, Faster Pixel-Perfect Line Clipping, p. 314-322, code: p. 319-322, ch6-3/.
Doué, Jean-François, and Rubio, Ruben Gonzalez, Efficient and Robust 2D Shape Vectorization, p. 323-337, code: p. 329-336, ch6-4/.
Hsu, Siu-chi, and Lee, I.H.H., Reversable Straight Line Edge Reconstruction, p. 338-354, code: p. 342-353, ch6-5/.
Sharma, Rajesh, Priority-based Adaptive Image Refinement, p. 355-358.
Cross, Robert A., Sampling Patterns Optimized for Uniform Distribution of Edges, p. 359-363, code: p. 362, ch6-7/.
Schlick, Christophe, Wave Generators for Computer Graphics, p. 367-374, code: p. 371-374, ch7-1/.
Green, Daniel, and Hatch, Don, Fast Polygon-Cube Intersection Testing, p. 375-379, code: ch7-2/.
Bouma, William, and Vanecek, George, Jr., Velocity-based Collision Detection, p. 380-385, code: p. 383-385, ch7-3/.
Vanecek, George, Jr., Spatial Partitioning of a Polygon by a Plane, p. 386-393, code: p. 387-393, ch7-4/.
Narkhede, Atul, and Manocha, Dinesh, Fast Polygon Triangulation Based on Seidel's Algorithm, p. 394-397, code: ch7-5/.
Karinthi, Raghu, Accurate Z-buffer Rendering, p. 398-399, code: ch7-6/.
Paeth, Alan W., Scheepers, Ferdi, and May, Stephen, A Survey of Graphics Libraries, p. 400-406, code: ch7-7/.

Last change: June 12, 2001
Eric Haines, Gems archivist / erich@acm.org