交互式计算机图形学——自顶向下方法与Open
暂无简介
- Preface xxiii
- CHAPIER 1 Graphics Systems and Models
- 1.1 Applications of Computer Graphics
- 1.1.1 Display of Information
- 1.1.2 Design
- 1.1.3 Simulation and Animation
- 1.1.4 User Interfaces
- 1.2 A Graphics System
- 1.2.1 Pixels and the Frame Buffer
- 1.2.2 Output Devices
- 1.2.3 Input Devices
- 1.3 Images: Physical and Synthetic
- 1.3.1 Objects and Viewers
- 1.3.2 Light and Images
- 1.3.3 Ray Tracing
- 1.4 The Human Visual System
- 1.5 The Pinhole Camera
- 1.6 The Synthetic-Camera Model
- 1.7 The Programmer’s Interface
- 1.7.1 Application Programmer’s Interfaces
- 1.7.2 The Pen-Plotter Model
- 1.7.3 Three-Dimensional APIs
- 1.7.4 A Sequence of Images
- 1.7.5 The Modeling-Rendering Paradigm
- 1.8 Graphics Architectures
- 1.8.1 Display Processors
- 1.8.2 Pipeline Architectures
- 1.8.3 Transformations
- 1.8.4 Clipping
- 1.8.5 Projection
- 1.8.6 Rasterization
- 1.8.7 Performance Characteristics
- 1.9 Summary and Notes
- 1.10 Suggested Readings
- Exercises
- CHAPTER 2 Graphics Programming
- 2.1 The Sierpinski Gasket
- Z.2 Programming Two-Dimensional Applications
- 2.3 The OpenGL API
- 2.3.1 Graphics Functions
- 2.3.2 The Graphics Pipeline and State Machines
- 2.3.3 The OpenGL Interface
- 2.4 Primitives and Attributes
- 2.4.1 Polygon Basics
- 2.4.2 Polygon Types in OpenGL
- 2.4.3 Drawing a Sphere
- 2.4.4 Text
- 2.4.5 Curved Objects
- 2.4.6 Attributes
- 2.5 Color
- 2.5.1 RGB Color
- 2.5.2 Indexed Color
- 2.5.3 Setting of Color Attributes
- 2.6 Viewing
- 2.6.1 Two-Dimensional Viewing
- 2.6.2 The Orthographic View
- 2.6.3 Matrix Modes
- 2.7 Control Functions
- 2.7.1 Interaction with the Window System
- 2.7.2 Aspect Ratio and Viewports
- 2.7.3 The main, display, and myinit Functions
- 2.7.4 Program Structure
- 2.8 The Gasket Program
- 2.9 Polygons and Recursion
- 2.10 The Three-Dimensional Gasket
- 2.10.1 Use of Three-Dimensional Points
- 2.10.2 Use of Polygons in Three Dimensions
- 2.10.3 Hidden-Surface Removal
- 2.11 Summary and Notes
- 2.12 Suggested Readings
- Exercises
- CHAPTER3 Input and Interaction
- 3.1 Interaction
- 3.2 Input Devices
- 3.2.1 Physical Input Devices
- 3.2.2 Logical Devices
- 3.2.3 Measure and Trigger
- 3.2.4 Input Modes
- 3.3 Clients and Servers
- 3.4 Display Lists
- 3.4.1 Definition and Execution of Display Lists
- 3.4.2 Text and Display Lists
- 3.4.3 Fonts in GLUT
- 3.5 Programming Event-Driven Input
- 3.5.1 Using the Pointing Device
- 3.5.2 Window Events
- 3.5.3 Keyboard Events
- 3.5.4 The Display and Idle Callbacks
- 3.5.5 Window Management
- 3.6 Menus
- 3.7 Picking
- 3.7.1 Picking and Selection Mode
- 3.8 A Simple Paint Program
- 3.9 Animating Interactive Programs
- 3.9.1 The Rotating Square
- 3.9.2 Double Buffering
- 3.9.3 Other Buffering Problems
- 3.10 Design of Interactive Programs
- 3.10.1 Toolkits, Widgets, and the Frame Buffer
- 3.11 Logic Operations
- 3.11.1 Drawing Erasable Lines
- 3.11.2 XOR and Color
- 3.11.3 Cursors and Overlay Planes
- 3.12 Summary and Notes
- 3.13 Suggested Readings
- Exercises
- CNAPIER 4 Geometric 0bjects and Transformations
- 4.1 Scalars, Points, and Vectors
- 4.1.1 The Geometric View
- 4.1.2 Coordinate-Free Geometry
- 4.1.3 The Mathematical View: Vector and Affine Spaces
- 4.1.4 The Computer-Science View
- 4.1.5 Geometric ADTs
- 4.1.6 Lines
- 4.1.7 Affine Sums
- 4.1.8 Convexity
- 4.1.9 Dot and Cross Products
- 4.1.10 Planes
- 4.2 Three-Dimensional Primitives
- 4.3 Coordinate Systems and Frames
- 4.3.1 Representations and N-tuples
- 4.3.2 Changes of Coordinate Systems
- 4.3.3 Example of Change of Representation
- 4.3.4 Homogeneous Coordinates
- 4.3.5 Example of Change in Frames
- 4.3.6 Working with Representations
- 4.3.7 Frames and ADTs
- 4.3.8 Frames in OpenGL
- 4.4 Modeling a Colored Cube
- 4.4.1 Modeling of a Cube
- 4.4.2 Inward-and Outward-Pointing Faces
- 4.4.3 Data Structures for Object Representation
- 4.4.4 The Color Cube
- 4.4.5 Bilinear Interpolation
- 4.4.6 Vertex Arrays
- 4.5 Affine Transformations
- 4.6 Translation, Rotation, and Scaling
- 4.6.1 Translation
- 4.6.2 Rotation
- 4.6.3 Scaling
- 4.7 Transformations in Homogeneous Coordinates
- 4.7.1 Translation
- 4.7.2 Scaling
- 4.7.3 Rotation
- 4.7.4 Shear
- 4.8 Concatenation of Transformations
- 4.8.1 Rotation About a Fixed Point
- 4.8.2 General Rotation
- 4.8.3 The Instance Transformation
- 4.8.4 Rotation About an Arbitrary Axis
- 4.9 OpenGL Transformation Matrices
- 4.9.1 The Current Transformation Matrix
- 4.9.2 Rotation, Translation, and Scaling
- 4.9.3 Rotation About a Fixed Point in OpenGL
- 4.9.4 Order of Transformations
- 4.9.5 Spinning of the Cube
- 4.9.6 Loading, Pushing, and Popping Matrices
- 4.10 Interfaces to Three-Dimensional Applications
- 4.10.1 Using Areas of the Screen
- 4.10.2 A Virtual Trackball
- 4.10.3 Smooth Rotations
- 4.10.4 Incremental Rotation
- 4.11 Quaternions 208
- 4.11.1 Complex Numbers and Quaternions
- 4.11.2 Quaternions and Rotation
- 4.12 Summary and Notes
- 4.13 Suggested Readings
- Exercises
- CHAPTER 5 Viewing
- 5.1 Classical anti Computer Viewing
- 5.1.1 Classical Viewing
- 5.1.2 Orthoaranhic Projections
- 5.1.3 Axonometric Projections
- 5.1.4 Oblique Projections
- 5.1.5 Perspective Viewing
- 5.2 Viewing with
- Viewing With a Computer
- 5.3 Positioning of the Camera
- 5.3.1 Positioning of the Camera Frame
- 5.3.2 Two Viewing APIs
- 5.3.3 The Look-At Function
- 5.3.4 Other Viewing APIs
- 5.4 Simple Projections
- 5.4.1 Perspective Projections
- 5.4.2 Orthogonal Projections
- 5.5 Projections in OpenGL
- 5.5.1 Perspective in OpenGL
- 5.5.2 Parallel Viewing in OpenGL
- 5.6 Hidden-Surface Removal
- 5.7 Walking Through a Scene
- 5.8 Parallel-Projection Matrices
- 5.8.1 Projection Normalization
- 5.8.2 Orthogonal-Projection Matrices
- 5.8.3 Oblique Projections
- 5.9 Perspective-Projection Matrices
- 5.9.1 Perspective Normalization
- 5.9.2 OpenGL Perspective Transformations
- 5.10 Projections and Shadows
- 5.11 Summary and Notes
- 5.12 Suggested Readings
- Exercises
- CHAPTER 6 Shading
- 6.1 Light and Matter
- 6.2 Light Sources
- 6.2.1 Color Sources
- 6.2.2 Ambient Light
- 6.2.3 Point Sources
- 6.2.4 Spotlights
- 6.2.5 Distant Light Sources
- 6.3 The Phong Reflection Model
- 6.3.1 Ambient Reflection
- 6.3.2 Diffuse Reflection
- 6.3.3 Specular Reflection
- 6.4 Computation of Vectors
- 6.4.1 Normal Vectors
- 6.4.2 Angle of Reflection
- 6.4.3 Use of the Halfway Vector
- 6.4.4 Transmitted Light
- 6.5 Polygonal Shading
- 6.5.1 Flat Shading
- 6.5.2 Interpolative and Gouraud Shading
- 6.5.3 Phong Shading
- 6.6 Approximation of a Sphere by Recursive
- auuaivision
- 6.7 Light Sources in OpenGL
- 6.8 Specification of Materials in OpenGL
- 6.9 Shading of the Sphere Model
- 6.10 Global Rendering
- 6.11 Summary and Notes
- 6.12 Suggested Readings
- Exercises
- CJAPTER 7 Discrete techniques
- 7.1 Buffers
- 7.2 Digital Images
- 7.3 Writing into Buffers
- 7.3.1 Writing Modes
- 7.3.2 Writing with XOR
- 7.4 Bit and Pixel Operations in OpenGL
- 7.4.1 OpenGL Buffers and the Pixel Pipeline
- 7.4.2 Bitmaps
- 7.4.3 Raster Fonts
- 7.4.4 Pixels and Images
- 7.4.5 Lookup Tables
- 7.4.6 Buffers for Picking
- 7.5 Mapping Methods
- 7.6 Texture Mapping
- 7.6.1 Two-Dimensional Texture Mapping
- 7.6.2 Texture Mapping in OpenGL
- 7.6.3 Texture Objects
- 7.6.4 Multitexturing
- 7.6.5 Texture Generation
- 7.7 Environmental Maps
- 7.8 Bump Maps
- 7.9 Compositing Techniques
- 7.9.1 Opacity and Blending
- 7.9.2 Image Compositing
- 7.9.3 Blending and Compositing in OpenGL
- 7.9.4 Antialiasing
- 7.9.5 Back-to-Front and Front-to-Back Rendering
- 7.9.6 Depth Cueing and Fog
- 7.10 Multirendering and the Accumulation Buffer
- 7.10.1 Scene Antialiasing
- 7.10.2 Bump Mapping and Embossing
- 7.10.3 Image Processing
- 7.10.4 Imaging Extensions
- 7.10.5 Other Multipass Methods
- 7.11 Sampling and Aliasing
- 7.11.1 Sampling Theory
- 7.11.2 Reconstruction
- 7.11.3 Quantization
- 7.12 Summary and Notes
- 7.13 Suggested Readings
- Exercises
- CHAPTER 8 Implemenfafion of a Renderer
- 8.1 Basic Implementation Strategies
- 8.2 Four Major Tasks
- 8.2.1 Modeling
- 8.2.2 Geometric Processing
- 8.2.3 Rasterization
- 8.2.4 Disnlay
- 8.3 Implementation of Transformations
- 8.4 Line-Segment Clipping
- 8.4.1 Cohen-Sutherland Clipping
- 8.4.2 Liang-Barsky Clipping
- 8.5 Polygon Clipping
- 8.6 Clipping of Other Primitives
- 8.6.1 Bounding Boxes and Volumes
- 8.6.2 Curves, Surfaces, and Text
- 8.6.3 Clipping in the Frame Buffer
- 8.7 Clipping in Three Dimensions
- 8.8 Hidden-Surface Removal
- 8.8.1 Object-Space and Image-Space Approaches
- 8.8.2 Sorting and Hidden-Surface Removal
- 8.8.3 Back-Face Removal
- 8.8.4 The z-Buffer Algorithm
- 8.8.5 Depth Sort and the Painter’s Algorithm
- 8.8.6 The Scan-Line Algorithm
- 8.9 Scan Conversion
- 8.10 Bresenham’s Algorithm
- 8.11 Scan Conversion of Polygons
- 8.11.1 Inside-Outside Testing
- 8.11.2 OpenGL and Concave Polygons
- 8.11.3 Scan Conversion with the z Buffer
- 8.11.4 Fill and Sort
- 8.11.5 Flood Fill
- 8.11.6 Scan-Line Algorithms
- 8.11.7 Singularities
- 8.12 Antialiasing
- 8.13 Display Considerations
- 8.13.1 Color Systems
- 8.13.2 The Color Matrix
- 8.13.3 Gamma Correction
- 8.13.4 Dithering and Halftoning
- 8.14 Summary and Notes
- 8.15 References
- Exercises
- CHAPTER 9 Hierarchical and 0bject-Oriented Modeling
- 9.1 Symbols and Instances
- 9.2 Hierarchical Models
- 9.3 A Robot Arm
- 9.4 Trees and Traversal
- 9.4.1 A Stack-Based Traversal
- 9.5 Use of Tree Data Structures
- 9.6 Animation
- 9.7 Graphical Objects
- 9.7.1 Methods, Attributes, and Messages
- 9.7.2 A Cube Object
- 9.7.3 Implementing the Cube Object
- 9.7.4 Objects and Hierarchy
- 9.7.5 Geometric Objects
- 9.8 Scene Graphs
- 9.9 A Simple Scene Graph API
- 9.9.1 The Node Class
- 9.9.2 Geometry Nodes
- 9.9.3 Camera Class
- 9.9.4 Lights and Materials
- 9.9.5 Transformations
- 9.9.6 The Robot Figure
- 9.9.7 Implementing the Viewer
- 9.9.8 Implementing a Node
- 9.10 Other Tree Structures
- 9.10.1 CSG Trees
- 9.10.2 Shade Trees
- 9.10.3 BSP Trees
- 9.10.4 Quadtrees and Octrees
- 9.11 Graphics and the Web
- 9.11.1 Networks and Protocols
- 9.11.2 Hypermedia and HTML
- 9.11.3 Databases and VRML
- 9.11.4 Java and Applets
- 9.12 Summary and Notes
- 9.13 Suggested Readings
- Exercises
- CHAPTER 10 Curves and Surfaces
- 10.1 Representation of Curves and Surfaces
- 10.1.1 Explicit Representation
- 10.1.2 Implicit Representations
- 10.1.3 Parametric Form
- 10.1.4 Parametric Polynomial Curves
- 10.1.5 Parametric Polynomial Surfaces
- 10.2 Design Criteria
- 10.3 Parametric Cubic Polynomial Curves
- 10.4 Interpolation
- 10.4.1 Blending Functions
- 10.4.2 The Cubic Interpolating Patch
- 10.5 Hermite Curves and Surfaces
- 10.5.1 The Hermite Form
- 10.5.2 Geometric and Parametric Continuity
- 10.6 Bezier Curves and Surfaces
- 10.6.1 Bezier Curves
- 10.6.2 Bezier Surface Patches
- 10.7 Cubic B-Splines
- 10.7.1 The Cubic B-Spline Curve
- 10.7.2 B-Splines and Bases
- 10.7.3 Spline Surfaces
- 10.8 General B-Splines
- 10.8.1 Recursively Defined B-Splines
- 10.8.2 Uniform Splines
- 10.8.3 Nonuniform B-Splines
- 10.8.4 NURBS
- 10.9 Rendering of Curves and Surfaces
- 10.9.1 Polynomial Evaluation Methods
- 10.9.2 Recursive Subdivision of Bezier Polynomials
- 10.9.3 Rendering of Other Polynomial Curvesby Subdivision
- 10.9.4 Subdivision of Bezier Surfaces
- 10.10 The Utah Teapot
- 10.11 Algebraic Surfaces
- 10.11.1 Quadrics
- 10.11.2 Rendering of Surfaces by Ray Casting
- 10.11.3 Subdivision Curves and Surfaces
- 10.12 Curves and Surfaces in OpenGL
- 10.12.1 Bezier Curves
- 10.12.2 Bezier Surfaces
- 10.12.3 Displaying the Teapot
- 10.12.4 NURBS Functions
- 10.12.5 Quadrics
- 10.13 Summary and Notes
- 10.14 References and Notes
- Exercises
- CHAPTER 11 Procedural Methods
- 11.1 Reasons for Using Procedural Models
- 11.2 Physically Based Models and Particle Systems
- 11.3 Newtonian Particles
- 11.3.1 Independent Particles
- 11.3.2 Spring Forces
- 11.3.3 Attractive and Repulsive Forces
- 11.4 Solving Particle Systems
- 11.5 Constraints
- 11.5.1 Collisions
- 11.5.2 Particles Inside a Sphere
- 11.5.3 Soft constraints
- 11.6 Language-Based Models
- 11.7 Recursive Methods and Fractals
- 11.7.1 Rulers and Length
- 11.7.2 Fractal Dimension
- 11.7.3 Midpoint Division and Brownian Motion
- 11.7.4 Fractal Mountains
- 11.8 The Mandelbrot Set
- 11.9 Summary and Notes
- 11.10 Suggested Readings
- Exercises
- CHAPTER 12 Visualization
- 12.1 Data+Geometry
- 12.2 Height Fields and Contours
- 12.2.1 Meshes
- 12.2.2 Contour Plots
- 12.2.3 Marching Squares
- 12.3 Visualizing Surfaces and Scalar Fields
- 12.3.1 Volumetric Data Sets
- 12.3.2 Visualization of Implicit Functions
- 12.4 Isosurfaces and Marching Cubes
- 12.5 Mesh Simplification
- 12.6 Direct Volume Rendering
- 12.6.1 Assignment of Color and Opacity
- 12.6.2 Splatting
- 12.6.3 Volume Ray Tracing
- 12.6.4 Texture Mapping of Volumes
- 12.7 Vector-Field Visualization
- 12.7.1 Hedgehogs
- 12.7.2 Glyphs
- 12.7.3 Color
- 12.7.4 Particle Traces and Streamlines
- 12.8 Tensor Visualization
- 12.9 Summary and Notes
- 12.10 Suggested Readings
- Exercises
- CHAPTER 13 Advanced Rendering
- 13.1 Going Beyond Pipeline Rendering
- 13.2 Ray Tracing
- 13.3 Building a Simple Ray Tracer
- 13.3.1 Recursive Ray Tracing
- 13.3.2 Calculating Intersections
- 13.3.3 Ray-Tracing Variations
- 13.4 The Rendering Equation
- 13.5 Radiosity
- 13.5.1 The Radiosity Equation
- 13.5.2 Solving the Radiosity Equation
- 13.5.3 Computing Form Factors
- 13.5.4 Carrying Out Radiosity
- 13.6 RenderMan
- 13.7 Large-Scale Rendering
- 13.7.1 Sort-Middle Rendering
- 13.7.2 Sort-Last Rendering
- 13.7.3 Sort-First Rendering
- 13.8 Image-Based Rendering
- 13.9 Summary and Notes
- 13.10 Suggested Readings
- Exerdses
- APPENDIX A Sample Programs
- A.1 Sierpinski Gasket Program
- A.2 Recursive Generation of Sierpinski Gasket
- A.3 Three-Dimensional Sierpinski Gasket
- A.4 Recursive Three-Dimensional Sierpinski Gasket
- A.5 Square Drawing Program
- A.6 Paint Program
- A.7 Double-Buffering Example
- A.8 Selection-Mode Picking Program
- A.9 Rotating-Cube Program
- A.10 Rotating Cube Using Vertex Arrays
- A.11 Rotating Cube with a Virtual Trackball
- A.12 Moving Viewer
- A.13 Sphere Program
- A.14 Pixel-Reading Program
- A.15 Rotating Cube with Texture
- A.16 Scene-Graph Example
- A.17 Program for Drawing Bezier Curves
- APPENDIX B Spaces
- B.1 Scalars
- B.2 Vector Spaces
- B.3 Affine Spaces
- B.4 Euclidean Spaces
- B.5 Projections
- B.6 Gram-Schmidt Orthogonalization
- B.7 Suggested Readings
- Exercises
- APPENDIX C Matrices
- C.1 Definitions
- C.2 Matrix Operations
- C.3 Row and Column Matrices
- C.4 Rank
- C.5 Change of Representation
- C.6 The Cross Product
- C.7 Eigenvalues and Eigenvectors
- C.8 Suggested Readings
- Exercises
- References
- function Index
- Subject Index