Table of contents for Computer graphics : using OpenGL / F.S. Hill, Jr. and Stephen M. Kelley.

Bibliographic record and links to related information available from the Library of Congress catalog.

Note: Contents data are machine generated based on pre-publication provided by the publisher. Contents may have variations from the printed book or be incomplete or contain other coding.

Table of Contents: Hill/Kelley, Computer Graphics using OpenGL
Table of Contents
Chapter 1 Introduction to Computer Graphics
	1.1 What is Computer Graphics?
	1.2 Where Computer Generated pictures are used
		1.2.1. Art, Entertainment, and Publishing.
		1.2.2. Computer Graphics, Perception, and Image Processing.
		1.2.3. Monitoring a Process.
		1.2.4. Displaying Simulations.
		1.2.5. Computer-aided Design.
		1.2.6. Scientific Analysis and Volume Visualization.
	1.3 Elements of Pictures created in Computer Graphics.
		1.3.1. Polylines
		1.3.2. Text
		1.3.3. Filled Regions
		1.3.4. Raster Images
		1.3.5. Representation of gray shades and color for raster graphics
	1.4 Graphics display devices
		1.4.1. Line Drawing Displays
		1.4.2. Raster Displays
		1.4.3. Video Cards/3D Accelerators
		1.4.4. Other Raster Display Devices.
		1.4.5. Hard Copy Raster Devices
1.5 Graphics Input Primitives and Devices
	1.5.1. Types of Input Graphics Primitives
	1.5.2. Types of Physical Input Devices
	1.6. Chapter Summary & Exercises
	1.7. For Further Reading.
Chapter 2 Getting Started Drawing Figures
2.1 Getting started making pictures
		2.1.1. Device Independent Programming, and OpenGL
		2.1.2. Windows-based Programming (GLUT, GLU, GLUI, GLEW)
		2.1.3. Opening a Window for Drawing
	2.2 Drawing Basic Graphics Primitives
		2.2.1. Examples of Drawing Dot Constellations
	2.3 Making Line-drawings
		2.3.1. Drawing Polylines and Polygons
		2.3.3. Line Drawing using moveto() and lineto()
		2.3.4. Drawing Aligned Rectangles
		2.3.5. Aspect Ratio of an Aligned Rectangle.
2.3.6. Filling Polygons
		2.3.7. Other Graphics Primitives in OpenGL.
	2.4 Simple interaction with mouse and keyboard
		2.4.1. Mouse interaction
		2.4.2. Keyboard interaction
	2.5. Summary
	2.6. Case Studies
		2.6.1. Introduction to Iterated Function Systems.
		2.6.2. The Golden Ratio and other Jewels.
		2.6.3. How to build and use Polyline Files.
		2.6.4. How to build and run Mazes
		2.6.5. A GLUT Encapsulation Class
	2.7. For Further Reading.
Chapter 3 Additional Drawing Tools
	3.1. Introduction
	3.2. World Windows and Viewports 
		3.2.1. The Mapping from the Window to the Viewport.
	3.3. Clipping Lines 
		3.3.1. How to Clip a Line.
		3.3.2. The Cohen-Sutherland Clipping Algorithm
	3.4. Regular Polygons, Circles, and Arcs
		3.4.1. The Regular Polygons
		3.4.2. Variations on n-gons
		3.4.3. Drawing Arcs and Circles
		3.4.4. Successive Refinement of Curves.
	3.5. The Parametric Form of a Curve.
		3.5.1. Parametric Forms for Curves.
		3.5.2. Drawing Curves Represented Parametrically.
		3.5.3. Polar Coordinate Shapes.
	3.6. Summary.
	3.7. Case Studies
		3.7.1. Studying the Logistic Map and the Simulation of Chaos	
		3.7.2. Implementation of the Cohen Sutherland Clipper in C/C++
		3.7.3. Animate Dino with the Keyboard		
		3.7.4. Drawing Arches.
		3.7.5. Some Figures used in Physics and Engineering.
		3.7.6. Tilings.
	3.8. For Further Reading.
Chapter 4 Vector Tools for Graphics
	4.1. Introduction
	4.2. Review of Vectors
		4.2.1 Operations with Vectors
4.2.2. Linear Combinations of Vectors.
4.2.3. The Magnitude of a vector, and unit vectors.
	4.3. The Dot Product.
4.3.1. Properties of the Dot Product
4.3.2. The Angle Between two Vectors.
4.3.3. The Sign of , and Perpendicularity.
4.3.4. The 2D Perp Vector 
4.3.5. Orthogonal Projections, and the Distance from a Point to a Line. 
4.3.6. Applications of Projection: Reflections.
4.4. The Cross Product of Two Vectors. 
4.4.1. Geometric Interpretation of the Cross Product. 
4.4.2. To Find the Normal to a Plane.
4.4.3. To Test the Convexity of a Planar Polygon
4.5. Representations of Key Geometric Objects.
4.5.1.Coordinate Systems and Coordinate Frames.
4.5.2. Affine Combinations of Points.
4.5.3. Linear Interpolation of two points. "Tweening" for Art and Animation.
4.5.4. Preview: Bezier Curves Built from Quadratic and Cubic Tweening 
4.5.5. Representing Lines and Planes.
4.6. Finding the Intersection of two Line Segments. 
4.6.1. Application of Line Intersections: the circle through three points.
4.7. Intersections of Lines with Planes, and Clipping.
4.8. Polygon Intersection Problems.
4.8.1. Working with Convex Polygons and polyhedra.
4.8.2. Ray Intersections and Clipping for Convex Polygons.
4.8.3. The Cyrus-Beck Clipping Algorithm.
4.8.4. More Advanced Clipping.
4.9. Summary.
4.10. Case Studies
4.10.1. Case Study 4.1: Animation with Tweening.
4.10.2. Case Study 4.2. Circles Galore.
4.10.3. Case Study 4.3. Is point Q inside Polygon P?
4.10.4. Case Study 4.4. Reflections in a Chamber (2D Ray Tracing) 
4.10.5. Case Study 4.5. Cyrus-Beck Clipping.
	4.11. For Further Reading.
Chapter 5 Transformations of Objects
5.1 Introduction
5.2 Introduction to Transformations
5.2.1. Points and Objects Transformed
5.2.2. The Affine Transformations
5.2.3. Geometric Effects of elementary 2D Affine Transformations
			Scaling, Translation, Rotation, Shearing
5.2.4. The Inverse of an Affine Transformation
5.2.5. To Compose Affine Transformations
5.2.6. Examples of Composing 2D Transformations
5.2.7. Some Useful Properties of Affine Transformations
5.3. 3D Affine Transformations
5.3.1. The Elementary 3D Transformations.
5.3.2. To Compose 3D Affine Transformations
5.3.3. A Combination of Rotations
5.3.4. Summary of Properties of 3D Affine Transformations.
5.4. How To Change Coordinate Systems
5.5. Affine Transformations used in a Program.
	5.5.1. Saving the CT for later use.
5.6. To Draw 3D Scenes Interactively with OpenGL.
5.6.1. An Overview of the Viewing Process and the Graphics Pipeline.
5.6.2. Some OpenGL tools for Modeling and Viewing.
5.6.3. To Draw Elementary Shapes Provided by OpenGL.
5.6.4. Reading a Scene Description from a File.
5.7. Summary.
5.8. Case Studies.
5.8.1. Draw the Star of Fig 5.35 using Multiple Rotations
5.8.2. Decomposing a 2D Affine Transformation.
5.8.3. Interaction and Creation of Objects within a Scene 
5.8.4. Flying through Primitive Shapes 
5.8.5. Drawing 3D Scenes Described by SDL.
5.9. For Further Reading.
Chapter 6 Modeling Shapes with Polygonal Meshes.
6.1. Introduction
6.2. Introduction to Solid Modeling with Polygonal Meshes.
6.2.1. Defining a Polygonal Mesh.
6.2.2. Finding the Normal Vectors.
6.2.3. Properties of Meshes.
6.2.4. Mesh Models for Non-Solid Objects.
6.2.5. Working with Meshes in a Program.
	6.3. Polyhedra.
		6.3.1. Prisms.
		6.3.2. The Platonic Solids.
		6.3.3. Other Interesting Polyhedra.
	6.4. Extruded Shapes.
6.4.1. Creating Prisms.
6.4.2. Arrays of Extruded Prisms - "Brick Laying".
6.4.3. Extrusions with a "Twist".
6.4.4. To Build Segmented Extrusions - Tubes and Snakes.
6.4.5. Discretely Swept Surfaces of Revolution.
	6.5. Mesh Approximations to Smooth Objects.
		6.5.1. Representations for Surfaces.
		6.5.2. The Normal Vector to a Surface.
		6.5.3. The Effect of an Affine Transformation.
		6.5.4. Three "Generic" Shapes: the Sphere, Cylinder, and Cone.
		6.5.5. To Form a Polygonal Mesh for a Curved Surface.
		6.5.6. Ruled Surfaces.
		6.5.7. Surfaces of Revolution.
		6.5.8. Tubes Based on 3D Curves.
		6.5.9. Surfaces Based on Explicit Functions of Two Variables.
6.6. Particle Systems and Physically Based Systems 
	6.6.1. Particle Systems
	6.6.2. Physically Based Systems
6.7. Summary.
6.8. Case Studies.
		6.8.1. Meshes Stored in files.
6.8.2. Derivation of the Newell Method.
6.8.3. The Prism.
6.8.4. Prism Arrays and Extruded Quad-strips.
6.8.5. Tubes and Snakes Based on a Parametric Curve.
6.8.6. Building Discrete-Stepped Surfaces of Revolution.
6.8.7. On Edge lists and Wire frame Models.
6.8.8. Vaulted Ceilings.
6.8.9. On Platonic Solids.
6.9. For Further Reading.
Chapter 7 Three-Dimensional Viewing
7.1 Introduction
7.2. The Camera Revisited.
	7.2.1. To Set the View volume.
	7.2.2. To Position and Point the Camera.
7.3. To Specify a Camera in a program.	
	7.3.1. To Fly the Camera Interactively.
7.4. Perspective Projections of 3D Objects.
7.4.1 Perspective Projection of a Point.
7.4.2 Perspective Projection of a Line.
7.4.3. To Incorporate Perspective in the Graphics Pipeline.
7.5. To Produce Stereo Views.
7.6. Taxonomy of Projections.
7.6.1. One-, Two-, and Three-Point Perspective.
7.6.2. Types of Parallel Projections.
7.7. Summary
7.8. Case Studies
	7.8.1. Flying a Camera through a Scene. 
7.8.2. Stereo Views.
7.8.3. Back Face Removal for Greater Efficiency.
7.9. For Further Reading.
Chapter 8 Rendering Faces for Visual Realism
8.1. Introduction
8.2. Introduction to Shading Models
8.2.1. Geometric Ingredients for Finding Reflected Light.
8.2.2. How to Compute the Diffuse Component.
8.2.3. Specular Reflection.
8.2.4. The Role of Ambient Light and Exploiting Human Perception.
8.2.5. How to Combine Light Contributions.
8.2.6. To Add Color.
8.2.7. Shading and the Graphics Pipeline.
8.2.8. To Use Light Sources in OpenGL.
8.2.9. To Work with Material Properties in OpenGL.
8.2.10. Shading of Scenes Specified by SDL.
8.3. Flat Shading and Smooth Shading.
	8.3.1. Flat Shading and Mach Banding.
	8.3.2. Smooth Shading.
8.4. Adding Hidden Surface Removal.
	8.4.1. The Depth Buffer Approach - The Method OpenGL Uses.
8.5. To Add Texture to Faces.
	8.5.1. Paste the Texture onto a Flat Surface.
	8.5.2. To Render the Texture.
	8.5.3. What does a Texture Modulate?
	8.5.4. A Texture Example using OpenGL.
8.5.5. Wrap Texture on Curved Surfaces.
8.5.6. Reflection Mapping.
8.6. To Add Shadows of Objects.
	8.6.1. Introduction to Shadows
	8.6.2. Shadows Using a Shadow Buffer
8.6.3. A Brief Look at Radiosity
8.7. OpenGL 2.0 & The Shading Language (GLSL)
	8.7.1. Bump Mapping
	8.7.2. Non-Photorealistic Rendering x 
8.8. Summary.
8.9. Case Studies
	8.8.1. Creating Shaded Objects Using OpenGL.
	8.8.2. Texture Rendering.
8.8.3. Extending SDL to Include Texturing.
8.10. For Further Reading.
Chapter 9 Tools for Raster Displays
9.1. Introduction
9.2. Manipulating Pixmaps.
	9.2.1. Operations of Interest for Pixmaps.
	9.2.2. Useful Data Types for Pixmaps.
	9.2.3. To Scale and Rotate Images.
9.3. Combining Pixmaps.
	9.3.1. The Read-Modify-Write Cycle.
	9.3.2. The Alpha Channel and Image Blending.
9.3.3. Logical Combinations of Pixmaps.
9.3.4. The BitBlt operation.
9.4. Do It Yourself Line Drawing: Bresenham's Algorithm.
	9.4.1. Bresenham's Line Drawing Algorithm
9.5 To Define and Fill Regions of Pixels.
	9.5.1. To Define Regions.
9.6. Manipulating Symbolically-defined Regions.
9.6.1. Rectangle-Defined Regions.
9.6.2. Path-Defined Regions.
9.7. Filling Polygon-Defined Regions.
	9.7.1. Which Pixels on an Edge Belong to a Polygon?
	9.7.2 Improving the Algorithm's Performance.
9.8. Aliasing and Anti-Aliasing Techniques.
9.8.1. Anti-aliasing Techniques.
9.8.2. Anti-Aliasing of Texture.
9.8.3. Anti-Aliasing using OpenGL.
9.9. Creating More Shades and Colors.
	9.9.1. Error Diffusion.
9.10. Summary.
9.11. Case Studies.
	9.11.1. Reading and Displaying BMP Image Files
9.11.2. Dissolving Between Two Pixmaps with OpenGL.
	9.11.3. Working with the Shape Data Structure.
	9.11.4. General Polygon Filling.
	9.11.5. Error Diffusion
912. Further Reading
Chapter 10 Curve and Surface Design
10.1. Introduction
10.1.1. Parametric Curves as Trajectories.
10.1.2. Smoothness of Motion.
10.2. Describing Curves using Polynomials.
10.3. On Interactive Curve Design.
10.4. Bezier Curves for Curve Design.
10.4.1. The de Casteljau Algorithm.
10.5. Properties of Bezier Curves.
10.6. Finding Better Blending functions.
10.6.1. The Problem of Local Control.
10.6.2. Wish List for a set of Blending functions.
10.6.3. Piecewise Polynomial Curves and Splines.
10.6.4. To Build a Set of Blending Functions Out of g(t).
10.6.5. Spline Curves and Basis functions.
10.7. The B-Spline Basis Functions.
10.7.1. Definition of B-Spline Functions.
10.7.2. How To Use Multiple Knots in the Knot Vector.
10.7.3. Open B-Spline Curves: Standard Knot Vector.
10.8. Useful Properties of B-Spline Curves for Design.
10.8.1. Using Multiple Control Points.
10.9. Rational Splines and NURBS Curves.
10.10. A Glimpse at Interpolation.
10.10.1. Interpolation using Piecewise Cubic Polynomials.
10.10.2. Hermite Interpolation.
10.10.3. The Natural Cubic Spline.
10.10.4. How to Compute the Slopes in cubic Interpolation.
10.10.5. How to Specify the Tangent Vectors Interactively.
10.11. Modeling Curved Surfaces.
10.11.1. Ruled Surfaces Based on B-Splines.
10.11.2. Surfaces of Revolution Based on B-Splines.
10.11.3. Bezier surface Patches.
10.11.4. To Patch Together Bezier Patches.
10.11.5. B-Spline Patches.
10.11.6. NURBS Surfaces.
10.11.7. Subdivision of Surfaces.
10.12. Summary
10.13. Case Studies.
10.13.1. A Potpourri of Interesting Parametric Curves.
10.13.2. ElliptiPool
10.13.3. Bezier Curves.
10.13.4. A Quadratic Spline Curve Generator.
10.13.5. Building a Spline Curve Editor.
10.13.6. Interpolation of Control Points with B-Splines.
10.13.7. Interpolating with Cubic Polynomials.
10.13.8. The Venerable Teapot.
10.13.9. NURBS: Invariance to Projective Transformations.
10.13.10. Drawing NURBS Patches.
10.14. Further Reading.
Chapter 11 Color Theory 
11.1. Introduction
	11.1.1. An Aside on the Eye: Physiologic Basis for Human Color Perception 
11.2. Color Description
	11.2.1. Dominant Wavelength
	11.2.2. Color Perception and Color Matching
11.3. The CIE Standard
	11.3.1. Constructing the CIE Chart
	11.3.2. Using the CIE Chromaticity Diagram.
	11.3.3. Color Gamuts
11.4. Color Spaces
	11.4.1. The RGB and CMY Color Spaces.
	11.4.2. Additive and Subtractive Color Systems.
	11.4.3. The HLS Color Model.
11.5. Indexed Color and the LUT.
11.6. Color Quantization.
	11.6.1. Uniform Quantization.
	11.6.2. The Popularity Algorithm.
	11.6.3. The Median Cut Algorithm.
	11.5.4. Human Color Perception and Octree Quantization.
11.7. Summary
11.8. Case Studies
11.8.1. Drawing RGB Space
11.8.2. HSV to RGB
11.7.3. Uniform Color Quantization
11.7.4. Popularity Color Quantization.
11.7.5. Median Cut Color Quantization
11.7.6. Octree Color Quantization
11.9. For Further Reading.
Chapter 12 Ray Tracing
12.1. Introduction 
12.2. Setting Up the Geometry of Ray Tracing 
12.3. Overview of the Ray-Tracing Process 
12.4. Intersection of a Ray with an Object. 
12.4.1. Intersection of a Ray with the Generic Plane.
12.4.2. Intersection with the Generic Sphere
12.4.3. Intersection of the Ray with transformed objects..
12.5. Organizing a Ray Tracer Application.
12.5.1. A Routine to Compute Ray-Sphere Intersections.
12.5.2. A Complete Ray Tracer for Emissive Sphere-Scenes. 
12.6. Intersecting Rays with Other Primitives 
12.6.1 Intersecting with a Square.
12.6.2. Intersecting with a Tapered Cylinder. 
12.6.3. Intersecting with a Cube (or any Convex Polyhedron).
12.6.4. Adding More Primitives 
12.7. To Draw Shaded Pictures of Scenes 
12.7.1. To Find the Normal at the Hit Spot. 
12.7.2. Coloring Objects According to Their Surface Materials.
12.7.3. Physically-based Shading models - Cook-Torrance Shading
12.8. Adding Surface Texture.
12.8.1. Solid texture
12.8.2. Pasting Images onto Surfaces.
12.9 Anti-aliasing Ray Tracings.
12.10. Using Extents 
12.10.1. Box and Sphere Extents.
12.10.2. Using Projection Extents.
12.10.3. Alternative Method for Accelerating Ray Tracing: BSP Trees
12.11. Adding Shadows for Greater Realism.
12.12. Reflections and Transparency 
12.12.1 The Refraction of Light 
12.12.2. Dealing with Refraction in shade().
12.13. Compound Objects: Boolean Operations on Objects 
12.13.1. Ray Tracing CSG Objects.
12.13.2. Data Structure for Boolean Objects. 
12.13.3. Intersecting Rays with Boolean Objects.
12.13.4. Building and Using extents for CSG Objects.
12.14. Ray Tracing vs. Ray Casting
12.15. Summary.
12.16. Case Studies. 
12.16.1. An Emissive Ray Tracer.
12.16.2. A Renaissance Ray Tracer.
12.16.3. Implementing Shadows in a Ray Tracer.
12.16.4. Using Extents to Speed up Ray Tracing.
12.16.5. Ray Tracing with 3D Textures.
12.16.6. Anti-aliasing.
12.14.7. Ray Tracing Other Primitives.
12.14.8. A 2D Ray Tracer to Explore Refraction.
12.14.9. Reflected and Refracted Light.
12.14.10. Ray Tracing Boolean Combinations of Objects.
12.17. For Further Reading
A1. Graphics Tools - Obtaining OpenGL.
A2. Some Mathematics for Computer Graphics
A2.1 Some Key Definitions for Matrices and their Operations
A2.1.1. Manipulations with Matrices 
A2.1.2. Multiplying Two Matrices. 
A2.1.3. Partitioning a Matrix 
A2.1.4. The Determinant of a Matrix 
A2.1.5. The Inverse of a Matrix 
A2.2. Some Properties of Vectors and their operations.
A2.2.1. The Perp of a Vector, and the Perp Dot Product.
A2.3. Spherical Coordinates and Direction Cosines.
A3. An Introduction to SDL: Scene Description Language 
A3.1. Syntax of SDL
A3.2. Macros in SDL.
A3.3. Extending SDL.
A4. Fractals and The Mandelbrot Set
A4.1. Introduction 
A4.2. Fractals and Self-Similarity 
A4.3. The Mandelbrot Set
	A4.3.1. Mandelbrot Sets and Iterated Function Systems.
	A4.3.2. How to Compute Whether Point c is in the Mandelbrot Set.
	A4.3.3. Draw the Mandelbrot Set.
	A4.3.4. Some Notes on the Mandelbrot Set.
A5. Relative and Turtle Drawing.
A5.1. To Develop moveRel() and lineRel().
A5.2. Turtle Graphics
A5.3. Figures Based on Regular Polygons.
	A5.3.1. The Regular Polygons. 
	A5.3.2. Variations on n-gons.

Library of Congress Subject Headings for this publication:

Computer graphics.