By David Salomon. Published by Springer (Oct 2011). An ebook version is available for subscribers here. ISBN 978-0-85729-885-0. LCCN unknown. 700 Figures. xiii+1502 pages.

A BibTeX style file and an Errata list are available.

This volume includes content from three older texts as well as much new material.

**Overview and Goals**

Today (in 2010), the power of computer-generated images is everywhere. Computer graphics has pervaded our lives to such an extent that sometimes we don`t even realize that an image we are watching is artificial. The average person comes into contact with computer graphics mostly in three areas, computers, television, and electronic devices. Current computers and operating systems are based on GUI (graphical user interface). Computer programs often display results graphically. Television programs and commercials employ sophisticated, computer-generated graphics that are often hard to distinguish from the real thing. Many television programs (mostly documentaries) and recent movies mix real actors and artificial imagery to such an extent that the viewer may find it difficult to distinguish a real object or scene from a computer-generated image. (A real actor trying to outrun a computer-generated dinosaur is a common example.) More and more digital cameras, electronic devices, and instruments have small screens that display messages, options, controls, and results in color and are often touch sensitive, enabling the user to enter commands by finger gesturing instead of from the traditional keyboard. Many cell telephones even have two screens, and some new digital cameras also feature two LCD displays.

With this in mind, the goal of this manual is to present the reader with a wide picture of computer graphics, its history and its pioneers, the hardware tools it employs, and most important, the techniques, approaches, and algorithms that are at the core of this field. Thus, this textbook/reference tries to describe as many concepts and algorithms as possible, paying special attention to the important ones.

It would have been nice to include everything in this book and title it, like other texts by the same author, *Computer Graphics: The Complete Reference*, but computer graphics has grown to a point where I cannot hope to be an authority on the entire field, which is why some readers may not find every topic, term, concept, and algorithm they may be looking for.
On the other hand, those same readers may find in this manual-textbook topics they did not know existed, which might serve as compensation.

The many examples and exercises sprinkled throughout the book enhance its usefulness. By paying attention to the examples and working out the exercises, readers will gain deeper understanding of the material.

**Organization and Features**

This manual is large and is organized in seven parts as follows:

Part I covers the history, basic concepts, and techniques used in computer graphics. The concepts of pixel, vector scan, and raster scan are discussed. It is shown how an image given as a bitmap of pixels can be scaled (zoomed) and rotated. Many important scan-conversion methods are explained and illustrated.

Part II is devoted to transformations and projections. It starts with the important two- and three-dimensional transformations, including translation, rotation, reflection, and shearing. This is followed by the main types of projections, namely parallel, perspective, and nonlinear.

Part III is by far the largest. It includes many methods, algorithms, and techniques employed to construct curves and surfaces, which are the building blocks of solid objects. Six important interpolation and approximation methods for curves and surfaces are included, as well as sweep surfaces and subdivision methods for surface design.

Part IV goes into advanced techniques such as rendering an object, eliminating those parts that are hidden from view, and bringing objects to life (animating them) by interpolation. Several chapters included in this part discuss (1) the nature and properties of light and color, (2) graphics standards and graphics file formats, and (3) fractals.

Part V describes the principles of image compression. It concentrates on two important approaches to this topic, namely orthogonal and subband (wavelet) transforms. The important JPEG image compression standard is described in detail.

Part VI is devoted to many of the important input/output graphics devices. Chapter 26 describes them and explains their operations.

Part VII consists of appendixes, most of which discuss certain mathematical concepts.

The following features enhance the usefulness and appearance of this textbook: The powerful Mathematica and Matlab software systems are used throughout the book to implement many of the concepts discussed. When a figure is computed in one of these programs, the code is listed with the figure. These codes are meant to be readable rather than efficient and fast, and are therefore easy to read and to modify even by inexperienced Mathematica and Matlab users.

The book has many examples. Experience shows that examples are important for a thorough understanding of the kind of material discussed in this manual. The conscientious reader should follow each example carefully and try to work out variations of the examples. Many examples also include Mathematica code.

The many exercises sprinkled in the text are not a cosmetic feature. They deal with important topics, and should be worked out. Answers are provided but they should be consulted only as a last resort.

A quotation is a phrase that reflects its author`s profound thoughts. Quotations and epigrams enliven a book, which is why they have been generously used throughout this manual. I hope that they add to the book and make it more interesting.

This book aims to be practical, not theoretical. After reading and understanding a topic, the reader should be able to design and implement the concepts discussed there. The few mathematical arguments found in the book are simple, and there is no attempt to present an overall theory encompassing the entire field of computer graphics. An important feature of this text is the attention paid to orphans. Those are topics that most texts on computer graphics either mention briefly or disregard completely. Examples are perspective projections, nonlinear projections, nonlinear bitmap transformations, curves, surfaces, I/O devices, and image compression. The reader will find that this manual discusses orphans in great detail, including numerous examples and exercises. Most of the necessary mathematical background (such as vectors and matrices) is covered in the Appendixes. However, some math concepts that are used only once (such as the mediation operator and points vs. vectors) are discussed right where they are introduced.

**The Two Volumes**

This textbook is big because the discipline of computer graphics is big. There are simply many topics, techniques, and algorithms to discuss, explain, and illustrate by examples. Because of the large number of pages, the book has been produced in two volumes. However, this division of the book into volumes is only technical and the book should be considered a single unit. It is wrong to consider volume I as introductory and volume II as advanced, or to assume that volume I is important while volume II is not. The volumes are simply two halves of a single, large entity.

**The Color Plates**

This extensive manual features more than 100 color plates, placed at the very beginning, at the end, and between individual parts. They serve to liven up the book and to illustrate many of the topics discussed. It is planned to place information about these plates in the book`s website, for the benefit of readers who want to recreate or extend them. The plates were prepared over several months, using a variety of graphics software. Appendix F has more information about the plates, their content, and the graphics applications used to generate them.

**Target Audiences**

The material presented here has been developed over many years of teaching computer graphics. It has been revised, updated, and distilled many times, with many figures, examples and exercises added. The text emphasizes the simplicity of the mathematics behind computer graphics and tries to show how graphics software works and how current computer graphics can generate and display realistic-looking curves, surfaces, and solid objects. The key ideas are introduced slowly, are examined, when possible, from several points of view, and are illustrated and illuminated by figures, examples, and (solved) exercises. The discussion must employ mathematics, but it is mostly non-rigorous (no theorems or proofs) and therefore easy to grasp. The mathematical background required includes polynomials, matrices, vector operations, and elementary calculus.

**Acknowledgements**

A book of this magnitude is generally written with the help, dedicated work, and encouragement of many people, and this large textbook/reference is no exception. First and foremost should be mentioned my editor, Wayne Wheeler and the copyeditor, Francesca White. They made many useful comments and suggestions and pointed out many mistypes, errors, and stylistic blemishes. In addition, I would like to thank H. L. Scott for permission to use Figure 2.82, CH Products for permission to use Figure 26.24b, Andreas Petersik for Figure 6.61, Shinji Araya for Figure 7.27, Dick Termes for many figures and paintings, the authors of *Hardy Calculus* for the limerick at the end of Chapter 13, Bill Wilburn for many *Mathematica* notebooks, and Ari Salomon for photos and panoramas in several plates.

I welcome any comments, suggestions and corrections. They should be emailed to dsalomon@csun.edu. An errata list and other information can be found on this page.

Preface vii; Introduction 1; Part I Basic Techniques 7; 1 Historical Notes 9; 1.1 Historical Survey 9; 1.2 History of Curves and Surfaces 13; 1.3 History of Video Games 14; 1.4 Pioneers of Computer Graphics 17; 1.5 Resources For Computer Graphics 19; 2 Raster Graphics 29; 2.1 Pixels 30; 2.2 Graphics Output 32; 2.3 The Source-Target Paradigm 40; 2.4 Interpolation 41; 2.5 Bitmap Scaling 45; 2.6 Bitmap Stretching 46; 2.7 Replicating Pixels 46; 2.8 Scaling Bitmaps with Bresenham 48; 2.9 Pixel Art Scaling 54; 2.10 Pixel Interpolation 56; 2.11 Bilinear Interpolation 57; 2.12 Interpolating Polynomials 58; 2.13 Adaptive Scaling by 2 65; 2.14 The Keystone Problem 73; 2.15 Bitmap Rotation 76; 2.16 Nonlinear Bitmap Transformations 79; 2.17 Circle Inversion 85; 2.18 Polygons (2D) 88; 2.19 Clipping 91; 2.20 Cohen--Sutherland Line Clipping 92; 2.21 Nicholl--Lee--Nicholl Line Clipping 93; 2.22 Cyrus--Beck Line Clipping 95; 2.23 Sutherland--Hodgman Polygon Clipping 97; 2.24 Weiler--Atherton Polygon Clipping 99; 2.25 A Practical Drawing Program 100; 2.26 GUI by Inversion Points 104; 2.27 Halftoning 107; 2.28 Dithering 109; 2.29 Stippling 118; 2.30 Random Numbers 122; 2.31 Image Processing 126; 2.32 The Hough Transform 131; 3 Scan Conversion 135; 3.1 Scan-Converting Lines 135; 3.2 Midpoint Subdivision 136; 3.3 DDA Methods 137; 3.4 Bresenham's Line Method 142; 3.5 Double-Step DDA 147; 3.6 Best-Fit DDA 151; 3.7 Scan-Converting in Parallel 153; 3.8 Scan-Converting Circles 156; 3.9 Filling Polygons 167; 3.10 Pattern Filling 175; 3.11 Thick Curves 177; 3.12 General Considerations 179; 3.13 Antialiasing 180; 3.14 Convolution 192; Part II Transformations and Projections 193; 4 Transformations 199; 4.1 Introduction 201; 4.2 Two-Dimensional Transformations 204; 4.3 Three-Dimensional Coordinate Systems 232; 4.4 Three-Dimensional Transformations 233; 4.5 Transforming the Coordinate System 250; 5 Parallel Projections 251; 5.1 Orthographic Projections 252; 5.2 Axonometric Projections 255; 5.3 Oblique Projections 262; 6 Perspective Projection 267; 6.1 One Two Three $mathinner ... Infinity 269; 6.2 History of Perspective 275; 6.3 Perspective in Curved Objects, I 282; 6.4 Perspective in Curved Objects, II 283; 6.5 The Mathematics of Perspective 294; 6.6 General Perspective 305; 6.7 Transforming the Object 310; 6.8 Viewer at an Arbitrary Location 314; 6.9 A Coordinate-Free Approach: I 322; 6.10 A Coordinate-Free Approach: II 326; 6.11 The Viewing Volume 329; 6.12 Stereoscopic Images 332; 6.13 Creating a Stereoscopic Image 336; 6.14 Viewing a Stereoscopic Image 340; 6.15 Autostereoscopic Displays 351; 7 Nonlinear Projections 355; 7.1 False Perspective 355; 7.2 Fisheye Projection 357; 7.3 Poor Man's Fisheye 369; 7.4 Fisheye Menus 369; 7.5 Panoramic Projections 372; 7.6 Cylindrical Panoramic Projection 373; 7.7 Spherical Panoramic Projection 380; 7.8 Cubic Panoramic Projection 386; 7.9 Six-Point Perspective 389; 7.10 Other Panoramic Projections 391; 7.11 Panoramic Cameras 396; 7.12 Telescopic Projection 402; 7.13 Microscopic Projection 404; 7.14 Anamorphosis 405; 7.15 Map Projections 408; Part III Curves and Surfaces 429; 8 Basic Theory 433; 8.1 Points and Vectors 433; 8.2 Length of Curves 441; 8.3 Example: Area of Planar Polygons 442; 8.4 Example: Volume of Polyhedra 443; 8.5 Parametric Blending 444; 8.6 Parametric Curves 445; 8.7 Properties of Parametric Curves 447; 8.8 PC Curves 453; 8.9 Curvature and Torsion 461; 8.10 Special and Degenerate Curves 469; 8.11 Basic Concepts of Surfaces 470; 8.12 The Cartesian Product 473; 8.13 Connecting Surface Patches 475; 8.14 Fast Computation of a Bicubic Patch 476; 8.15 Subdividing a Surface Patch 478; 8.16 Surface Normals 481; 9 Linear Interpolation 483; 9.1 Straight Segments 483; 9.2 Polygonal Surfaces 487; 9.3 Bilinear Surfaces 493; 9.4 Lofted Surfaces 499; 10 Polynomial Interpolation 505; 10.1 Four Points 506; 10.2 The Lagrange Polynomial 510; 10.3 The Newton Polynomial 519; 10.4 Polynomial Surfaces 521; 10.5 The Biquadratic Surface Patch 521; 10.6 The Bicubic Surface Patch 522; 10.7 Coons Surfaces 527; 10.8 Gordon Surfaces 542; 11 Hermite Interpolation 545; 11.1 Interactive Control 546; 11.2 The Hermite Curve Segment 547; 11.3 Degree-5 Hermite Interpolation 557; 11.4 Controlling the Hermite Segment 558; 11.5 Truncating and Segmenting 562; 11.6 Hermite Straight Segments 564; 11.7 A Variant Hermite Segment 566; 11.8 Ferguson Surfaces 568; 11.9 Bicubic Hermite Patch 571; 11.10 Biquadratic Hermite Patch 573; 12 Spline Interpolation 577; 12.1 The Cubic Spline Curve 578; 12.2 The Akima Spline 599; 12.3 The Quadratic Spline 602; 12.4 The Quintic Spline 604; 12.5 Cardinal Splines 606; 12.6 Parabolic Blending: Catmull--Rom Curves 610; 12.7 Catmull--Rom Surfaces 615; 12.8 Kochanek--Bartels Splines 617; 12.9 Fitting a PC to Experimental Points 624; 13 Bézier Approximation 629; 13.1 The Bézier Curve 630; 13.2 The Bernstein Form of the Bézier Curve 632; 13.3 Fast Calculation of the Curve 639; 13.4 Properties of the Curve 644; 13.5 Connecting Bézier Curves 647; 13.6 The Bézier Curve as a Linear Interpolation 648; 13.7 Blossoming 653; 13.8 Subdividing the Bézier Curve 658; 13.9 Degree Elevation 660; 13.10 Reparametrizing the Curve 663; 13.11 Cubic Bézier Segments with Tension 672; 13.12 An Interpolating Bézier Curve: I 673; 13.13 An Interpolating Bézier Curve: II 676; 13.14 Nonparametric Bézier Curves 684; 13.15 Rational Bézier Curves 684; 13.16 Circles and Bézier Curves 690; 13.17 Rectangular Bézier Surfaces 693; 13.18 Subdividing Rectangular Patches 698; 13.19 Degree Elevation 699; 13.20 Nonparametric Rectangular Patches 701; 13.21 Joining Rectangular Bézier Patches 702; 13.22 An Interpolating Bézier Surface Patch 704; 13.23 A Bézier Sphere 707; 13.24 Rational Bézier Surfaces 707; 13.25 Triangular Bézier Surfaces 709; 13.26 Joining Triangular Bézier Patches 719; 13.27 Reparametrizing the Bézier Surface 723; 13.28 The Gregory Patch 725; Volume II 729; 14 B-Spline Approximation 731; 14.1 The Quadratic Uniform B-Spline 732; 14.2 The Cubic Uniform B-Spline 736; 14.3 Multiple Control Points 743; 14.4 Cubic B-Splines with Tension 745; 14.5 Cubic B-Spline and Bézier Curves 748; 14.6 Higher-Degree Uniform B-Splines 748; 14.7 Interpolating B-Splines 750; 14.8 A Knot Vector-Based Approach 751; 14.9 Recursive Definitions of the B-Spline 760; 14.10 Open Uniform B-Splines 761; 14.11 Nonuniform B-Splines 766; 14.12 Matrix Form of the Nonuniform B-Spline 775; 14.13 Subdividing the B-spline Curve 779; 14.14 Nonuniform Rational B-Splines (NURBS) 782; 14.15 The Cubic B-Spline as a Circle 788; 14.16 Uniform B-Spline Surfaces 792; 14.17 Relation to Other Surfaces 796; 14.18 An Interpolating Bicubic Patch 798; 14.19 The Quadratic-Cubic B-Spline Surface 801; 15 Subdivision Methods 803; 15.1 Introduction 803; 15.2 Chaikin's Refinement Method 804; 15.3 Quadratic Uniform B-Spline by Subdivision 811; 15.4 Cubic Uniform B-Spline by Subdivision 812; 15.5 Biquadratic B-Spline Surface by Subdivision 816; 15.6 Bicubic B-Spline Surface by Subdivision 821; 15.7 Polygonal Surfaces by Subdivision 826; 15.8 Doo Sabin Surfaces 826; 15.9 Catmull--Clark Surfaces 828; 15.10 Loop Surfaces 829; 16 Sweep Surfaces 833; 16.1 Sweep Surfaces 834; 16.2 Surfaces of Revolution 839; 16.3 An Alternative Approach 842; 16.4 Skinned Surfaces 846; Part IV Advanced Techniques 849; 17 Rendering 851; 17.1 Introduction 852; 17.2 A Simple Shading Model 853; 17.3 Gouraud and Phong Shading 864; 17.4 Palette Optimization 866; 17.5 Ray Tracing 867; 17.6 Photon Mapping 876; 17.7 Texturing 877; 17.8 Bump Mapping 879; 17.9 Particle Systems 881; 17.10 Mosaics 883; 18 Visible Surface Determination 891; 18.1 Ray Casting 893; 18.2 Z-Buffer Method 893; 18.3 Explicit Surfaces 895; 18.4 Depth-Sort Method 898; 18.5 Scan-Line Approach 901; 18.6 Warnock's Algorithm 905; 18.7 Octree Methods 907; 18.8 Approaches to Curved Surfaces 910; 19 Computer Animation 911; 19.1 Background 911; 19.2 Interpolating Positions 914; 19.3 Constant Speed: I 915; 19.4 Constant Speed: II 916; 19.5 Interpolating Orientations: I 919; 19.6 SLERP 923; 19.7 Summary 924; 19.8 Interpolating Orientations: II 930; 19.9 Nonuniform Interpolation 937; 19.10 Morphing 943; 19.11 Free-Form Deformations 944; 20 Graphics Standards 947; 20.1 GKS 947; 20.2 IGES 949; 20.3 PHIGS 951; 20.4 OpenGL 954; 20.5 PostScript 956; 20.6 Graphics File Formats 960; 20.7 GIF 961; 20.8 TIFF 963; 20.9 PNG 967; 20.10 CRC 972; 21 Color 975; 21.1 Light 975; 21.2 Color and the Eye 976; 21.3 Color and Human Vision 978; 21.4 The HLS Color Model 982; 21.5 The HSV Color Model 984; 21.6 The RGB Color Space 984; 21.7 Additive and Subtractive Colors 986; 21.8 Complementary Colors 991; 21.9 The Color Wheel 992; 21.10 Spectral Density 994; 21.11 The CIE Standard 997; 21.12 Luminance 1000; 21.13 Converting Color to Grayscale 1001; 22 Fractals 1005; 22.1 Introduction 1006; 22.2 Fractal Landscapes 1009; 22.3 Branching Rules 1013; 22.4 Iterated Function Systems (IFS) 1013; 22.5 Attractors 1017; 22.6 Gaussian Distribution 1021; Part V Image Compression 1025; 23 Compression Techniques 1027; 23.1 Redundancy in Data 1027; 23.2 Image Types 1031; 23.3 Redundancy in Images 1032; 23.4 Approaches to Image Compression 1038; 23.5 Intuitive Methods 1051; 23.6 Variable-Length Codes 1052; 23.7 Codes, Fixed- and Variable-Length 1052; 23.8 Prefix Codes 1055; 23.9 VLCs for Integers 1056; 23.10 Start-Step-Stop Codes 1058; 23.11 Start/Stop Codes 1060; 23.12 Elias Codes 1062; 23.13 Huffman Coding 1069; 24 Transforms and JPEG 1079; 24.1 Image Transforms 1079; 24.2 Orthogonal Transforms 1084; 24.3 The Discrete Cosine Transform 1092; 24.4 Test Images 1128; 24.5 JPEG 1132; 25 The Wavelet Transform 1147; 25.1 The Haar Transform 1148; 25.2 Filter Banks 1166; 25.3 The DWT 1176; 25.4 SPIHT 1188; 25.5 QTCQ 1199; Part VI Graphics Devices 1201; 26 Graphics Devices 1203; 26.1 Displays 1203; 26.2 The CRT 1208; 26.3 LCDs 1213; 26.4 The Digital Camera 1217; 26.5 The Computer Mouse 1236; 26.6 The Trackball 1240; 26.7 The Joystick 1242; 26.8 The Graphics Tablet 1244; 26.9 Scanners 1252; 26.10 Inkjet Printers 1262; 26.11 Solid-Ink Printers 1271; 26.12 Laser Printers 1274; 26.13 Plotters 1279; 26.14 Interactive Devices 1282; Part VII Appendixes 1287; A Vector Products 1289; B Quaternions 1295; C Conic Sections 1299; D Mathematica Notes 1305; E The Resolution of Film 1311; F The Color Plates 1315; References 1321; Answers to Exercises 1339; Index 1469;

• Figure 19.18 (page 943) shows five steps in morphing Bach to Beethoven. The complete video of this morphing can be found here (295KB).

• Paul de Casteljau is mentioned on page 648 (and in other places). Very little is known about this original contributor to the field of computer graphics, which is why the following short articles may be of help to those interested in him: autobiography (37KB) and biography (45KB). These come from the special issue of *Computer Assisted Geometric Design* (CAGD) journal published in 1999 in his honor (volume 16, issue 7).

• The Mathematica code listed on page 1158 with Figure 25.8 (A Pyramid Wavelet Decomposition), mentions a small image file in raw format. This file is available here (70KB) for those who would like to experiment.

• Several color plates feature graphics generated by MegaPOV (POVray on the Macintosh). The small file available here (12KB) has the source code for these images.

• The many code listings in the book (in Mathematica, Matlab, pseudocode, and C) may be useful to some readers, so they are made available here in PDF (295 KB).

• Bill Wilburn has developed Mathematica notebooks for many of the topics discussed in the book and has graciously made them available to the readers. They can be found here (40MB). If you like them, if you want more, or if you find errors, please let Bill know. These notebooks were developed in version 8.0.1 of Mathematica, but most also run under version 7. If a particular cell refuses to execute, try to copy it and then paste it into a fresh cell. Some notebooks require version 8, and these are located in a separate folder.

• [Sept 2012] The concept of f-stop is mentioned briefly in section 26.4.7 (page 1232). This concept is important in photography but is only peripheral in computer graphics. Nevertheless, many readers wrote to me, asking for more information on f-stops. The result is this short document (PDF, 10 pages, 737 KB). It discusses f-stops, their definition and applications, as well as a few related topics.

This book has been a journey.

Paul R. Walker, *The Feud That Sparked the Renaissance*, (2003)

Last Updated 23 Sept, 2012