Hearn 04 1 A Survey of Computer Graphics 1-1 Graphs and Charts 1-2 Computer-Aided Design 1-3 Virtual-Reality Environments 1-4 Data Visualizations 1-5 Education and Training 1-6 Computer Art 1-7 Entertainment 1-8 Image Processing 1-9 Graphical User Interfaces 1-10 Summary References 2 Overview of Graphics Systems 2-1 Video Display Devices - Refresh Cathode-Ray Rubes - Raster-Scan Displays - Random-Scan Displays - Color CRT Monitors - Flat-Panel Displays - Three-Dimensional Viewing Devices - Stereoscopic and Virtual-Reality Systems 2-2 Raster-Scan Systems - Video Controller - Raster-Scan Display Processor 2-3 Graphics Workstations and Viewing Systems 2-4 Input Devices - Keyboards, Button Boxes, and Dials - Mouse Devices - Trackballs and Spaceballs - Joysticks - Data Gloves - Digitizers - Image Scanners - Touch Panels - Light Pens - Voice Systems 2-5 Hard-Copy Devices 2-6 Graphics Networks 2-7 Graphics on the Internet 2-8 Graphics Software - Coordinate Representations - Graphics Functions - Software Standards - Other Graphics Packages 2-9 Introduction to OpenGL - Basic OpenGL Syntax - Related Libraries - Header Files - Display-Window Management Using GLUT - A Complete OpenGL Program 2-10 Summary References Exercises 3 Graphics Output Primitives 3-1 Coordinate Reference Frames - Screen Coordinates - Absolute and Relative Coordinate Specifications 3-2 Specifying a Two-Dimensional World-Coordinate Reference Frame in OpenGL 3-3 OpenGL Point Functions 3-4 OpenGL Line Functions 3-5 Line-Drawing Algorithms - Line Equations - DDA Algorithm - Bresenham's Line Algorithm - Displaying Polylines 3-6 Parallel Line Algorithms 3-7 Setting Frame-Buffer Values 3-8 OpenGL Curve Functions 3-9 Circle-Generating Algorithms - Properties of Circles - Midpoint Circle Algorithm 3-10 Ellipse-Generating Algorithms - Properties of Ellipses - Midpoint Ellipse Algorithm 3-11 Other Curves - Conic Sections - Polynomials and Spline Curves 3-12 Parallel Curve Algorithms 3-13 Pixel Addressing and Object Geometry - Screen Grid Coordinates - Maintaining Geometric Properties of Displayed Objects 3-14 Fill-Area Primitives 3-15 Polygon Fill Areas - Polygon Classifications - Identifying Concave Polygons - Splitting Concave Polygons - Splitting a COncave Polygon into a Set of Triangles - Inside-Outside Tests - Polygon Tables - Plane Equations - Front and Back Polygon Faces 3-16 OpenGL Polygon Fill-Area Functions 3-17 OpenGL Vertex Arrays 3-18 Pixel-Array Primitives 3-19 OpenGL Pixel-Array Funtions - OpenGL Bitmap Function - OpenGL Pixmap Funtion - OpenGL Raster Operations 3-20 Character Primitives 3-21 OpenGL Character Functions 3-22 Picture Partitioning 3-23 OpenGL Display Lists - Creating and Naming an OpenGL Display List - Exeuting OpenGL Display Lists - Deleting OpenGL Display Lists 3-24 OpenGL Display-Window Reshape Function 3-25 Summary - Example Programs - References - Exercises 4 Attributes of Graphics Primitives 4-1 OpenGL State Variables 4-2 Color and Gray Scale - RGB Color Components - Color Tables - Gray Scale - Other Color Parameters 4-3 OpenGL Color Functions - The OpenGL RGB and RGBA Color Modes - OpenGL Color-Index Mode - OpenGL Color Blending - OpenGL Color Arrays - Other OpenGL Color Functions 4-4 Point Attributes 4-5 Line Attributes - Line Width - Line Style - Pen and Brush Options 4-6 Curve Attributes 4-7 OpenGL Point-Attribute Functions 4-8 OpenGL Line-Attribute Functions - OpenGL Line-Width Function - OpenGL Line-Style Function - Other OpenGL Line Effects 4-9 Fill-Area Attributes - Fill Styles - Color-Blended Fill Regions 4-10 General Scan-Line Polygon-Fill Algorithm 4-11 Scan-Line Fill of Convex Polygons 4-12 Scan-Line Fill for Regions with Curved Boundaries 4-13 Fill Methods for Areas with Irregular Boundaries - Boundary-Fill Algorithm - Flood-Fill Algorithm 4-14 OpenGL Fill-Area Attribute Functions - OpenGL Fill-Pattern Function - OpenGL Texture and Interpolation Patterns - OpenGl Wire-Frame Methods - OpenGL Front-Face Function 4-15 Character Attributes 4-16 OpenGL Character-Attribute Functions 4-17 Antialiasing - Supersampling Straight-Line Segments - Subpixel Weighting Masks - Area Sampling Straight Line Segments - Filtering Techniques - Pixel Phasing - Compensating for Line-Intensity Differences - Antialiasing Area Boundaries 4-18 OpenGL Antialiasing Functions 4-19 OpenGL Query Functions 4-20 Summary References Exercises 5 Geometric Transformations 5-1 Basic Two-Dimensional Geometric Transformations - Two-Dimensional Translation - Two-Dimensional Rotation - Two-Dimensional Scaling 5-2 Matrix Representations and Homogeneous Coordinates - Homogeneous Coordinates - Two-Dimensional Translation Matrix - Two-Dimensional Rotation Matrix - Two-Dimensional Scaling Matrix 5-3 Inverse Transformations 5-4 Two-Dimensional Composite Transformations - Composite Two-Dimensional Translations - Composite Two-Dimensional Rotations - Composite Two-Dimensional Scaling - General Two-Dimensional Pivot-Point Rotation - General Two-Dimensional Fixed-Point Scaling - General Two-Dimensional Scaling Directions - Matrix Concatenation Properties - General Two-Dimensional Composite Transformations and Computational Efficiency - Two-Dimensional Rigid-Body Transformation - Constructing Two-Dimensional Rotation Matrices - Two-Dimensional Composite-Matrix Programming Example 5-5 Other Two-Dimensional Transformations - Reflection - Shear 5-6 Raster Methods for Geometric Transformations 5-7 OpenGL Raster Transformations 5-8 Transformations Between Two-Dimensional Coordinate Systems 5-9 Geometric Transformations in Three-Dimensional Space 5-10 Three-Dimensional Translation 5-11 Three-Dimensional Rotation - Three-Dimensional Coordinate-Axis Rotations - General Three-Dimensional Rotations - Quaternion Methods for Three-Dimensional Rotations 5-12 Three-Dimensional Scaling 5-13 Composite Three-Dimensional Transformations 5-14 Other Three-Dimensional Transformations - Three-Dimensional Reflections - Three-Dimensional Shears 5-15 Transformations Between Three-Dimensional Coordinate Systems 5-16 Affine Transformations 5-17 OpenGL Geometric Transformation Functions - Basic OpenGL Geometric Transformations - OpenGL Matrix Operations - OpenGL Matrix Stacks - OpenGL Geometric-Transformation Programming Examples 5-18 Summary 6 Two-Dimensional Viewing 6-1 The Two-Dimensional Viewing Pipeline 6-2 The Clipping Window - Viewing-Coordinate Clipping Window - World-Coordinate Clipping Window 6-3 Normalization and Viewport Transformations - Mapping the Clipping Window into a Normalized Viewpoint - Mapping the Clipping Window into a Normalized Square - Display of Character Strings - Split-Screen Effects and Multiple Output Devices 6-4 OpenGL Two-Dimensional Viewing Functions - OpenGL Projection Mode - GLU Clipping-Window Function - OpenGL Viewport Function - Creating a GLUT Display Window - Setting the GLUT Display-Window Mode and Color - GLUT Display-Window Identifier - Deleting a GLUT Display Window - Current GLUT Display Window - Relocating and Resizing a GLUT Display Window - Managing Multiple GLUT Display Windows - GLUT Subwindows - Selecting a Display-Window Screen Cursor Shape - Viewing Graphics Objects in a GLUT Display Windows - Executing the Application Program - Other GLUT Functions - OpenGL Two-Dimensional Viewing Program Example 6-5 Clipping Algorithms 6-6 Two-Dimensional Point Clipping 6-7 Two-Dimensional Line Clipping - Cohen-Sutherland Line Clipping - Liang-Barsky Line Clipping - Nichol-Lee-Nichol Line Clipping - Line Clipping Using Nonrectangular Polygon Clip Windows - Line Clipping Using Nonlinear Clipping-Window Boundaries 6-8 Polygon Fill-Area Clipping - Sutherland-Hodgman Polygon Clipping - Weiler-Atherton Polygon Clip Windows - Polygon Clipping Using Nonlinear Clipping-Window Boundaries 6-9 Curve Clipping 6-10 Text Clipping 6-11 Summary References Exercises 7 Three-Dimensional Viewing 7-1 Overview of Three-Dimensional Viewing Concepts - Viewing a Three-Dimensional Scene - Projections - Depth Curing - Identifying Visible Lines and Surfaces - Surface Rendering - Exploded and Cutaway Views - Three Dimensional and stereoscopic Viewing 7-2 The Three-Dimensional Viewing Pipeline 7-3 Three-Dimensional Viewing-Coordinate Parameters - The View-Plane Normal Vector - The View-up Vector - The uvn Viewing Coordinate Reference Frame - Generating Three-Dimensional Viewing Effects 7-4 Transformation from World to Viewing Coordinates 7-5 Projection Transformations 7-6 Orthogonal Projections - Axonometric and Isometric Orthogonal Projections - Orthogonal Projections - Orthogonal Projection Coordinates - Clipping Window and Orthogonal-Projection View Volume - Normalization Transformation for an Orthogonal Projection 7-7 Oblique Parallel Projections - Oblique Parallel Projections in Drafting and Design - Cavalier and Cabinet Oblique Parallel Projections - Oblique Parallel-Projection Vector - Clipping Window and Oblique Parallel-Projection View Volume - Oblique Parallel-Projection Transformation Matrix - Normalization Transformation for an Oblique Parallel Projection 7-8 Perspective Projections - Perspective-Projection Transformation Coordinates - Perspective-Projection Equations: Special Cases - Vanishing Points for Perspective Projections - Perspective-Projection View Volume - Perspective-Projection Transformation Matrix - Symmetric Perspective-Projection Frustum - Oblique-Perspective-Projection Transformation Coordinates - Normalized Perspective-Projection Transformation Coordinates 7-9 The Viewpoint Transformation and Three-Dimensional Screen Coordinates 7-10 OpenGL Three-Dimensional Viewing Functions - OpenGL Viewing-Transformation Function - OpenGL Orthogonal-Projection Function - OpenGL Symmetric Perspective-Projection Function - OpenGL General Perspective-Projection Function - OpenGL Viewports and Display Windows - OpenGL Three-Dimensional Viewing Program Example 7-11 Three-Dimensional Clipping Algorithms - Clipping in Three-Dimensional Homogeneous Coordinates - Three-Dimensional Region Codes - Three-Dimensional Point and Line Clipping - Three-Dimensional Polygon Clipping - Three-Dimensional Curve Clipping - Arbitrary Clipping Planes 7-12 OpenGL Optional Clipping Planes 7-13 Summary References Exercises 8 Three-Dimensional Object Representations 8-1 Polyhedra 8-2 OpenGL Polyhedron Functions - OpenGL Polygon Fill-Area Functions - Example GLUT Polyhedron Program 8-3 Curved Surfaces 8-4 Quadric Surfaces - Sphere - Ellipsoid - Torus 8-5 Superquadrics - Superellipse - Superellipsoid 8-6 OpenGL Quadric-Surface and Cubic-Surface Functions - GLUT Quardric-Surface Functions - GLUT Cubic-Surface Teapot Function - GLU Quadric-Surface Functions - Example Program Using GLUT and GLU Quadric-Surface Functions 8-7 Blobby Objects 8-8 Spline Representations - Interpolation and Approximation Splines - Parametric Continuity Conditions - Geometric Continuity Conditions - Spline Specifications - Spline Surfaces - Trimming Spline Surfaces 8-9 Cubic-Spline Interpolation Methods - Natural Cubic Splines - Hermite Interpolation - Cardinal Splines - Kochanek-Bartels Splines 8-10 Bézier Spline Curves - Bézier Curve Equations - Example Bézier Curve-Generating Program - Properties of Bézier Curves - Design Techniques Using Bézier Curves - Cubic Bézier Curves 8-11 Bézier Surfaces 8-12 B-Spline Curves - B-Spline Curve Equations - Uniform Periodic B-Spline Curves - Cubic Periodic B-Spline Curves - Open Uniform B-Spline Curves - Nonuniform B-Spline Curves 8-13 B-Spline Surfaces 8-14 Beta Splines - Beta-Spline Continuity Conditions - Cubic Periodic Beta-Spline Matrix Representation 8-15 Rational Splines 8-16 Conversion Between Spline Representations 8-17 Displaying Spline Curves and Surfaces - Horner’s Rule - Forward-Difference Calculations - Subdivision Methods 8-18 OpenGL Approximation-Spline Functions - OpenGL Bézier-Spline Curve Functions - OpenGL Bézier-Spline Surface Functions - GLU Surface-Trimming Functions 8-19 Sweep Representations 8-20 Constructive Solid-Geometry Methods 8-21 Octrees 8-22 BSP Trees 8-23 Fractal-Geometry Methods - Fractal Generation Procedures - Classification of Fractals - Fractal Dimension - Geometric Construction of Statistically Sel-Similar Fractals - Affine Fractal-Construction Methods - Random Midpoint-Displacement Methods - Controlling Terrain Topography - Self-Squaring Fractals - Self-Inverse Fractals 8-24 Shape Grammars and Other Procedural Methods 8-25 Particle Systems 8-26 Physically Based Modeling 8-27 Visualization of Data Sets - Visual Representations for Scalar Fields - Visual Representations for Vector Fields - Visual Representations for Tensor Fields - Visual Presentations for Multivariate Data Fields 8-28 Summary References Exercises 9 Visible-Surface Detection Methods 9-1 Classification of Visible-Surface Detection Algorithms 9-2 Back-Face Detection 9-3 Depth-Buffer Method 9-4 A-Buffer Method 9-5 Scan-Line Method 9-6 Depth-Sorting Method 9-7 BSP-Tree Method 9-8 Area-Subdivision Method 9-9 Octree Methods 9-10 Ray-Casting Method 9-11 Comparison of Visibility-Detection Methods 9-12 Curved Surfaces - Curved-Surface Representations - Surface Contour Plots 9-13 Wire-Frame Visibility Methods - Wire-Frame Surface-Visibility Algorithms - Wire-Frame Depth-Cueing Algorithm 9-14 OpenGL Visibility-Detection Functions - OpenGL Polygon-Culling Functions - OpenGL Depth-Buffer Functions - OpenGL Wire-Frame Surface-Visibility Methods - OpenGL Depth-Cueing Function 9-15 Summary References Exercises 10 Illumination Models and Surface-Rendering Methods 10-1 Light Sources - Point Light Sources - Infinitely Distant Light Sources - Radial Intensity Attenuation - Directional Light Sources and Spotlight Effects - Angular Intensity Attenuation - Extended Light Sources and the Warn Model 10-2 Surface Lighting Effects 10-3 Basic Illumination Models - Ambient Light - Diffuse Reflection - Specular Reflection and the Phong Model - Combined Diffuse and Specular Reflections - Diffuse and Specular Reflections from Multiple Light Sources - Surface Light Emissions - Basic Illumination Model with Intensity Attenuation and Spotlights - RGB Color Considerations - Other Color Representations - Luminance 10-4 Transparent Surfaces - Translucent Materials - Light Refraction - Basic Transparency Model 10-5 Atmospheric Effects 10-6 Shadows 10-7 Camera Parameters 10-8 Displaying Light Intensities - Distributing System Intensity Levels - Gamma Correction and Video Lookup Tables - Displaying Continuous-Tone Images 10-9 Halftone Patterns and Dithering Techniques - Halftone Approximation - Dithering Techniques 10-10 Polygon-Rendering Methods - Constant-Intensity Surface Rendering - Gouraud Surface Rendering - Phong Surface Rendering - Fast Phong Surface Rendering 10-11 Ray-Tracing Methods - Basic Ray-Tracing Algorithm - Ray-Surface Intersection Calculations - Ray-Sphere Intersections - Ray-Polyhedron Intersections - Reducing Object-Intersection Calculations - Space-Subdivision Methods - Simulating Camera Focusing Effects - Antialiased Ray Tracing - Distributed Ray Tracing 10-12 Radiosity Light - Radiant-Energy Term - The Basic Radiosity Model - Progressive Refinement Radiosity Method 10-13 Environment Mapping 10-14 Photon Mapping 10-15 Adding Surface Detail 10-16 Modeling Surface Detail with Polygons 10-17 Texture Mapping - Linear Texture Patterns - Surface Texture Patterns - Volume Texture Patterns - Texture Reduction Patterns - Procedural Texturing Methods 10-18 Bump Mapping 10-19 Frame Mapping 10-20 OpenGL Illumination and Surface-Rendering Functions - OpenGL Point Light-Source Function - Specifying an OpenGL Light-Source Position and Type - Specifying OpenGL Light-Source Colors - Specifying Radial-Intensity Attenuation Coefficients for an OpenGL Light Source - OpenGL Directional Light Sources (Spotlights) - OpenGL Global Lighting Parameters - OpenGL Surface-Property Function - OpenGL Illumination Model - OpenGL Atmospheric Effects - OpenGL Transparency Functions - OpenGL Surface-Rendering Functions - OpenGL Halftoning Operations 10-21 OpenGL Texture Functions - OpenGL Line-Texture Functions - OpenGL Surface-Texture Functions - OpenGL Volume-Texture Functions - OpenGL Color Options for Texture Patterns - OpenGL Texture-Mapping Options - OpenGL Texture Wrapping - Coping OpenGL Texture Patterns from the Frame Buffer - OpenGL Texture-Coordinate Arrays - Naming OpenGL Texture Patterns - OpenGL Texture Subpatterns - OpenGL Texture Reduction Patterns - OpenGL Texture Borders - OpenGL Proxy Textures - Automatic Texturing of Quadric Surface - Homogeneous Texture Coordinates - Additional OpenGL Texture Options 10-22 Summary References Exercises 11 Interactive Input Methods and Graphical User Interfaces 11-1 Graphical Input Data 11-2 Logical Classification of Input Devices - Locator Devices - Stroke Devices - String Devices - Valuator Devices - Choice Devices - Pick Devices 11-3 Input Functions for Graphical Data - Input Modes - Echo Feedback -Callback Functions 11-4 Interactive Picture-Construction Techniques - Basic Positioning Methods - Dragging - Constraints - Grids - Rubber-Band Methods - Gravity Field - Interactive Painting and Drawing Methods 11-5 Virtual-Reality Environments 11-6 OpenGL Interactive Input-Device Functions - GLUT Mouse Functions - GLUT Keyboard Functions - GLUT Tablet Functions - GLUT Spaceball Functions - GLUT Button-Box Function - GLUT Dials Function - OpenGL Picking Operations 11-7 OpenGL Menu Functions - Creating a GLUT Menu - Creating and Managing Multiple GLUT Menus - Creating GLUT Submenus - Modifying GLUT Menus 11-8 Designing a Graphical User Interface - The User Dialogue - Windows and Icons - Accommodating Multiple Skill Levels - Consistency - Minimizing Memorization - Backup and Error Handling - Feedback 11-9 Summary References Exercises 12 Color Models and Color Applications 12-1 Properties of Light - The Electromagnetic Spectrum - Psychological Characteristics of Color 12-2 Color Models - Primary Colors - Intuitive Color Concepts 12-3 Standard Primaries and the Chromaticity Diagram - The XYZ Color Model - Normalized XYZ Values - The CIE Chromaticity Diagram - Color Gamuts - Complementary Colors - Dominant Wavelength - Purity 12-4 The RGB Color Model 12-5 The YIQ and Related Color Models - The YIQ Parameters - Transformations between RGB and YIQ Color Spaces - The YUV YCrCb Systems 12-6 The CMY and CMYK Color Models - The CMY Parameters - Transformations between CMY and RGB Color Spaces 12-7 The HSV Color Model - The HSV Parameters - Selecting Shades, Tints, and Tones - Transformations Between HSV and RGB Color Spaces 12-8 The HLS Color Model 12-9 Color Selection and Applications 12-10 Summary References Exercises 13 Computer Animation 13-1 Raster Methods for Computer Animation - Double Buffering - Generating Animations Using Raster Operations 13-2 Design of Animation Sequences 13-3 Traditional Animation Techniques 13-4 General Computer-Animation Functions 13-5 Computer-Animation Languages 13-6 Key-Frame Systems - Morphing - Simulating Accelerations 13-7 Motion Specifications - Direct Motion Specifications - Goal-Directed Systems - Kinematics and Dynamics 13-8 Articulated Figure Animation 13-9 Periodic Motions 13-10 OpenGL Animation Procedures 13-11 Summary References Exercises 14 Hierarchical Modeling 14-1 Basic Modeling Concepts - System Representations - Symbol Hierarchies 14-2 Modeling Packages 14-3 General Hierarchical Modeling Methods - Local Coordinates - Modeling Transformations - Creating Hierarchical Structures 14-4 Hierarchical Modeling Using OpenGL Display Lists 14-5 Summary References Exercises 15 Graphics File Formats 15-1 Image-File Configurations 15-2 Color-Reduction Methods - Uniform Color Reduction - Popularity Color Reduction - Median-Cut Color Reduction 15-3 File-Compression Techniques - Run-Length Encoding - ZW Encoding - Other Pattern-Recognition Compression Methods - Huffman Encoding - Arithmetic Encoding - Discrete Cosine Transform 15-4 Composition of the Major File Formats - JPEG: Joint Photographic Experts Group - CCM: Computer Graphics Metafile Format - TIFF: Tag Image-File Format - PNG: Portable Network Graphics Format - XBM: X Window System Bitmap Format & XPM: X Window System Pixmap Format - Adobe Photoshop Format - MacPaint: Macintosh Paint Format - PICT: Picture Data Format - BMP: Bitmap Format - PCX: PC Paintbrush File Format - TGA Truevision Graphics-Adapter Format - GIF: Graphics Interchange Format 15-5 Summary References Exercises A Mathematics for Computer Graphics A-1 Coordinate Reference Frames - Two-Dimensional Cartesian Screen Coordinates - Standard Two-Dimensional Cartesian Reference Frames - Polar Coordinates in the xy Plane - Standard Three-Dimensional Cartesian Reference Frames - Three-Dimensional Cartesian Screen Coordinates - Three-Dimensional Curvilinear-Coordinate Systems - Solid Angle A-2 Points and Vectors - Point Properties - Vector Properties - Vector Addition and Scalar Multiplication - Scalar Product of Two Vectors - Vector Product of Two Vectors A-3 Tensors A-4 Basis Vectors and the Metric Tensor - Determining Basis Vectors for a Coordinate Space - Orthonormal Basis - Metric Tensor A-5 Matrices - Scalar Multiplication and Matrix Addition - Matrix Multiplication - Matrix Transpose - Determinant of a Matrix - Matrix Inverse A-6 Complex Numbers - Basic Complex Arithmetic - Imaginary Unity - Complex Conjugate and Modulus of a Complex Number - Complex Division - Polar-Coordinate Representation for a Complex Number A-7 Quaternions A-8 Nonparametric Representations A-9 Parametric Representations A-10 Rate-of-Change Operators - Gradient Operator - Directional Derivative - General Form of the Gradient Operator - Laplace Operator - Divergence Operator - Curl Operator A-11 Rate-of-Change Integral Transformation Theorems - Strokes’s Theorems - Green’s Theorem for a Plane Surface A-12 Area and Centroid of a Polygon - Area of a Polygon - Centroid of a Polygon A-13 Calculating Properties of Polyhedra A-14 Numerical Methods - Solving Sets of Linear Equations - Finding Roots of Nonlinear Equations - Evaluating Integrals - Solving Ordinary Differential Equations - Solving Partial Differential Equations - Least-squares Curve-Fitting Methods for Data Sets Bibliography Subject Index OpenGL Function Index - Core Library Functions - GLU Functions - GLUT Functions