Description
Efnisyfirlit
- Dedication
- Contents
- Preface
- Chapter 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 Framebuffer
- 1.2.2 The CPU and the GPU
- 1.2.3 Output Devices
- 1.2.4 Input Devices
- 1.3 Images: Physical and Synthetic
- 1.3.1 Objects and Viewers
- 1.3.2 Light and Images
- 1.3.3 Imaging Models
- 1.4 Imaging Systems
- 1.4.1 The Pinhole Camera
- 1.4.2 The Human Visual System
- 1.5 The Synthetic-Camera Model
- 1.6 The Programmer’s Interface
- 1.6.1 The Pen-Plotter Model
- 1.6.2 Three-Dimensional APIs
- 1.6.3 A Sequence of Images
- 1.6.4 The Modeling–Rendering Paradigm
- 1.7 Graphics Architectures
- 1.7.1 Display Processors
- 1.7.2 Pipeline Architectures
- 1.7.3 The Graphics Pipeline
- 1.7.4 Vertex Processing
- 1.7.5 Clipping and Primitive Assembly
- 1.7.6 Rasterization
- 1.7.7 Fragment Processing
- 1.8 Programmable Pipelines
- 1.9 Performance Characteristics
- 1.10 OpenGL Versions and WebGL
- Summary and Notes
- Suggested Readings
- Exercises
- Chapter 2: Graphics Programming
- 2.1 The Sierpinski Gasket
- 2.2 Programming Two-Dimensional Applications
- 2.3 The WebGL Application Programming Interface
- 2.3.1 Graphics Functions
- 2.3.2 The Graphics Pipeline and State Machines
- 2.3.3 OpenGL and WebGL
- 2.3.4 The WebGL Interface
- 2.3.5 Coordinate Systems
- 2.4 Primitives and Attributes
- 2.4.1 Polygon Basics
- 2.4.2 Polygons in WebGL
- 2.4.3 Approximating a Sphere
- 2.4.4 Triangulation
- 2.4.5 Text
- 2.4.6 Curved Objects
- 2.4.7 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 The Orthographic View
- 2.6.2 Two-Dimensional Viewing
- 2.7 Control Functions
- 2.7.1 Interaction with the Window System
- 2.7.2 Aspect Ratio and Viewports
- 2.7.3 Application Organization
- 2.8 The Gasket Program
- 2.8.1 Sending Data to the GPU
- 2.8.2 Rendering the Points
- 2.8.3 The Vertex Shader
- 2.8.4 The Fragment Shader
- 2.8.5 Combining the Parts
- 2.8.6 The initShaders Function
- 2.8.7 The init Function
- 2.8.8 Reading the Shaders from the Application
- 2.9 Polygons and Recursion
- 2.10 The Three-Dimensional Gasket
- 2.10.1 Use of Three-Dimensional Points
- 2.10.2 Naming Conventions
- 2.10.3 Use of Polygons in Three Dimensions
- 2.10.4 Hidden-Surface Removal
- Summary and Notes
- Suggested Readings
- Exercises
- Chapter 3: Interaction and Animation
- 3.1 Animation
- 3.1.1 The Rotating Square
- 3.1.2 The Display Process
- 3.1.3 Double Buffering
- 3.1.4 Using a Timer
- 3.1.5 Using requestAnimFrame
- 3.2 Interaction
- 3.3 Input Devices
- 3.4 Physical Input Devices
- 3.4.1 Keyboard Codes
- 3.4.2 The Light Pen
- 3.4.3 The Mouse and the Trackball
- 3.4.4 Data Tablets,Touch Pads, and Touch Screens
- 3.4.5 The Joystick
- 3.4.6 Multidimensional Input Devices
- 3.4.7 Logical Devices
- 3.4.8 Input Modes
- 3.5 Clients and Servers
- 3.6 Programming Event-Driven Input
- 3.6.1 Events and Event Listeners
- 3.6.2 Adding a Button
- 3.6.3 Menus
- 3.6.4 Using Keycodes
- 3.6.5 Sliders
- 3.7 Position Input
- 3.8 Window Events
- 3.9 Picking
- 3.10 Building Models Interactively
- 3.11 Design of Interactive Programs
- Summary and Notes
- Suggested Readings
- Exercises
- Chapter 4: Geometric Objects and Transformations
- 4.1 Scalars, Points, and Vectors
- 4.1.1 Geometric Objects
- 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 Change of Coordinate Systems
- 4.3.3 Example: Change of Representation
- 4.3.4 Homogeneous Coordinates
- 4.3.5 Example: Change in Frames
- 4.3.6 Working with Representations
- 4.4 Frames in WebGL
- 4.5 Matrix and Vector Types
- 4.5.1 Row versus Column Major Matrix Representations
- 4.6 Modeling a Colored Cube
- 4.6.1 Modeling the Faces
- 4.6.2 Inward- and Outward-Pointing Faces
- 4.6.3 Data Structures for Object Representation
- 4.6.4 The Colored Cube
- 4.6.5 Color Interpolation
- 4.6.6 Displaying the Cube
- 4.6.7 Drawing with Elements
- 4.7 Affine Transformations
- 4.8 Translation, Rotation, and Scaling
- 4.8.1 Translation
- 4.8.2 Rotation
- 4.8.3 Scaling
- 4.9 Transformations in Homogeneous Coordinates
- 4.9.1 Translation
- 4.9.2 Scaling
- 4.9.3 Rotation
- 4.9.4 Shear
- 4.10 Concatenation of Transformations
- 4.10.1 Rotation About a Fixed Point
- 4.10.2 General Rotation
- 4.10.3 The Instance Transformation
- 4.10.4 Rotation About an Arbitrary Axis
- 4.11 Transformation Matrices in WebGL
- 4.11.1 Current Transformation Matrices
- 4.11.2 Basic Matrix Functions
- 4.11.3 Rotation, Translation, and Scaling
- 4.11.4 Rotation About a Fixed Point
- 4.11.5 Order of Transformations
- 4.12 Spinning of the Cube
- 4.12.1 Uniform Matrices
- 4.13 Interfaces to Three-Dimensional Applications
- 4.13.1 Using Areas of the Screen
- 4.13.2 A Virtual Trackball
- 4.13.3 Smooth Rotations
- 4.13.4 Incremental Rotation
- 4.14 Quaternions
- 4.14.1 Complex Numbers and Quaternions
- 4.14.2 Quaternions and Rotation
- 4.14.3 Quaternions and Gimbal Lock
- Summary and Notes
- Suggested Readings
- Exercises
- Chapter 5: Viewing
- 5.1 Classical and Computer Viewing
- 5.1.1 Classical Viewing
- 5.1.2 Orthographic Projections
- 5.1.3 Axonometric Projections
- 5.1.4 Oblique Projections
- 5.1.5 Perspective Viewing
- 5.2 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 Parallel Projections
- 5.4.1 Orthogonal Projections
- 5.4.2 Parallel Viewing with WebGL
- 5.4.3 Projection Normalization
- 5.4.4 Orthogonal Projection Matrices
- 5.4.5 Oblique Projections
- 5.4.6 An Interactive Viewer
- 5.5 Perspective Projections
- 5.5.1 Simple Perspective Projections
- 5.6 Perspective Projections with WebGL
- 5.6.1 Perspective Functions
- 5.7 Perspective Projection Matrices
- 5.7.1 Perspective Normalization
- 5.7.2 WebGL Perspective Transformations
- 5.7.3 Perspective Example
- 5.8 Hidden-Surface Removal
- 5.8.1 Culling
- 5.9 Displaying Meshes
- 5.9.1 Displaying Meshes as Surfaces
- 5.9.2 Polygon Offset
- 5.9.3 Walking through a Scene
- 5.10 Projections and Shadows
- 5.10.1 Projected Shadows
- 5.11 Shadow Maps
- Summary and Notes
- Suggested Readings
- Exercises
- Chapter 6: Lighting and 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.3.4 The Modified Phong Model
- 6.4 Computation of Vectors
- 6.4.1 Normal Vectors
- 6.4.2 Angle of Reflection
- 6.5 Polygonal Shading
- 6.5.1 Flat Shading
- 6.5.2 Smooth and Gouraud Shading
- 6.5.3 Phong Shading
- 6.6 Approximation of a Sphere by Recursive Subdivision
- 6.7 Specifying Lighting Parameters
- 6.7.1 Light Sources
- 6.7.2 Materials
- 6.8 Implementing a Lighting Model
- 6.8.1 Applying the Lighting Model in the Application
- 6.8.2 Efficiency
- 6.8.3 Lighting in the Vertex Shader
- 6.9 Shading of the Sphere Model
- 6.10 Per-Fragment Lighting
- 6.11 Nonphotorealistic Shading
- 6.12 Global Illumination
- Summary and Notes
- Suggested Readings
- Exercises
- Chapter 7: Discrete Techniques
- 7.1 Buffers
- 7.2 Digital Images
- 7.3 Mapping Methods
- 7.4 Two-Dimensional Texture Mapping
- 7.5 Texture Mapping in WebGL
- 7.5.1 Texture Objects
- 7.5.2 The Texture Image Array
- 7.5.3 Texture Coordinates and Samplers
- 7.5.4 Texture Sampling
- 7.5.5 Working with Texture Coordinates
- 7.5.6 Multitexturing
- 7.6 Texture Generation
- 7.7 Environment Maps
- 7.8 Reflection Map Example
- 7.9 Bump Mapping
- 7.9.1 Finding Bump Maps
- 7.9.2 Bump Map Example
- 7.10 Blending Techniques
- 7.10.1 Opacity and Blending
- 7.10.2 Image Blending
- 7.10.3 Blending in WebGL
- 7.10.4 Antialiasing Revisited
- 7.10.5 Back-to-Front and Front-to-Back Rendering
- 7.10.6 Scene Antialiasing and Multisampling
- 7.10.7 Image Processing
- 7.10.8 Other Multipass Methods
- 7.11 GPGPU
- 7.12 Framebuffer Objects
- 7.13 Buffer Ping-Ponging
- 7.14 Picking
- Summary and Notes
- Suggested Readings
- Exercises
- Chapter 8: From Geometry To Pixels
- 8.1 Basic Implementation Strategies
- 8.2 Four Major Tasks
- 8.2.1 Modeling
- 8.2.2 Geometry Processing
- 8.2.3 Rasterization
- 8.2.4 Fragment Processing
- 8.3 Clipping
- 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 Framebuffer
- 8.7 Clipping in Three Dimensions
- 8.8 Rasterization
- 8.9 Bresenham’s Algorithm
- 8.10 Polygon Rasterization
- 8.10.1 Inside–Outside Testing
- 8.10.2 WebGL and Concave Polygons
- 8.10.3 Fill and Sort
- 8.10.4 Flood Fill
- 8.10.5 Singularities
- 8.11 Hidden-Surface Removal
- 8.11.1 Object-Space and Image-Space Approaches
- 8.11.2 Sorting and Hidden-Surface Removal
- 8.11.3 Scan Line Algorithms
- 8.11.4 Back-Face Removal
- 8.11.5 The z-Buffer Algorithm
- 8.11.6 Scan Conversion with the z-Buffer
- 8.11.7 Depth Sort and the Painter’s Algorithm
- 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
- Summary and Notes
- Suggested Readings
- Exercises
- Chapter 9: Modeling and Hierarchy
- 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 Objects and Hierarchy
- 9.7.4 Geometric and Nongeometric Objects
- 9.8 Scene Graphs
- 9.9 Implementing Scene Graphs
- 9.10 Other Tree Structures
- 9.10.1 CSG Trees
- 9.10.2 BSP Trees
- 9.10.3 Quadtrees and Octrees
- Summary and Notes
- Suggested Readings
- Exercises
- Chapter 10: Procedural Methods
- 10.1 Algorithmic Models
- 10.2 Physically Based Models and Particle Systems
- 10.3 Newtonian Particles
- 10.3.1 Independent Particles
- 10.3.2 Spring Forces
- 10.3.3 Attractive and Repulsive Forces
- 10.4 Solving Particle Systems
- 10.5 Constraints
- 10.5.1 Collisions
- 10.5.2 Soft Constraints
- 10.6 A Simple Particle System
- 10.6.1 Displaying the Particles
- 10.6.2 Updating Particle Positions
- 10.6.3 Collisions
- 10.6.4 Forces
- 10.6.5 Flocking
- 10.7 Agent-Based Models
- 10.8 Language-Based Models
- 10.9 Recursive Methods and Fractals
- 10.9.1 Rulers and Length
- 10.9.2 Fractal Dimension
- 10.9.3 Midpoint Division and Brownian Motion
- 10.9.4 Fractal Mountains
- 10.9.5 The Mandelbrot Set
- 10.9.6 Mandelbrot Fragment Shader
- 10.10 Procedural Noise
- Summary and Notes
- Suggested Readings
- Exercises
- Chapter 11: Curves and Surfaces
- 11.1 Representation of Curves and Surfaces
- 11.1.1 Explicit Representation
- 11.1.2 Implicit Representations
- 11.1.3 Parametric Form
- 11.1.4 Parametric Polynomial Curves
- 11.1.5 Parametric Polynomial Surfaces
- 11.2 Design Criteria
- 11.3 Parametric Cubic Polynomial Curves
- 11.4 Interpolation
- 11.4.1 Blending Functions
- 11.4.2 The Cubic Interpolating Patch
- 11.5 Hermite Curves and Surfaces
- 11.5.1 The Hermite Form
- 11.5.2 Geometric and Parametric Continuity
- 11.6 Be´zier Curves and Surfaces
- 11.6.1 Be´zier Curves
- 11.6.2 Be´zier Surface Patches
- 11.7 Cubic B-Splines
- 11.7.1 The Cubic B-Spline Curve
- 11.7.2 B-Splines and Basis
- 11.7.3 Spline Surfaces
- 11.8 General B-Splines
- 11.8.1 Recursively Defined B-Splines
- 11.8.2 Uniform Splines
- 11.8.3 Nonuniform B-Splines
- 11.8.4 NURBS
- 11.8.5 Catmull-Rom Splines
- 11.9 Rendering Curves and Surfaces
- 11.9.1 Polynomial Evaluation Methods
- 11.9.2 Recursive Subdivision of Be´zier Polynomials
- 11.9.3 Rendering Other Polynomial Curves by Subdivision
- 11.9.4 Subdivision of Be´zier Surfaces
- 11.10 The Utah Teapot
- 11.11 Algebraic Surfaces
- 11.11.1 Quadrics
- 11.11.2 Rendering of Surfaces by Ray Casting
- 11.12 Subdivision Curves and Surfaces
- 11.12.1 Mesh Subdivision
- 11.13 Mesh Generation from Data
- 11.13.1 Height Fields Revisited
- 11.13.2 Delaunay Triangulation
- 11.13.3 Point Clouds
- 11.14 Graphics API support for Curves and Surfaces
- 11.14.1 Tessellation Shading
- 11.14.2 Geometry Shading
- Summary and Notes
- Suggested Readings
- Exercises
- Chapter 12: Advanced Rendering
- 12.1 Going Beyond Pipeline Rendering
- 12.2 Ray Tracing
- 12.3 Building a Simple Ray Tracer
- 12.3.1 Recursive Ray Tracing
- 12.3.2 Calculating Intersections
- 12.3.3 Ray-Tracing Variations
- 12.4 The Rendering Equation
- 12.5 Radiosity
- 12.5.1 The Radiosity Equation
- 12.5.2 Solving the Radiosity Equation
- 12.5.3 Computing Form Factors
- 12.5.4 Carrying Out Radiosity
- 12.6 Global Illumination and Path Tracing
- 12.7 RenderMan
- 12.8 Parallel Rendering
- 12.8.1 Sort-Middle Rendering
- 12.8.2 Sort-Last Rendering
- 12.8.3 Sort-First Rendering
- 12.9 Hardware GPU Implementations
- 12.10 Implicit Functions and Contour Maps
- 12.10.1 Marching Squares
- 12.10.2 Marching Triangles
- 12.11 Volume Rendering
- 12.11.1 Volumetric Data Sets
- 12.11.2 Visualization of Implicit Functions
- 12.12 Isosurfaces and Marching Cubes
- 12.13 Marching Tetrahedra
- 12.14 Mesh Simplification
- 12.15 Direct Volume Rendering
- 12.15.1 Assignment of Color and Opacity
- 12.15.2 Splatting
- 12.15.3 Volume Ray Tracing
- 12.15.4 Texture Mapping of Volumes
- 12.16 Image-Based Rendering
- 12.16.1 A Simple Example
- Summary and Notes
- Suggested Readings
- Exercises
- Appendix
- Appendix A: Initializing Shaders
- A.1 Shaders in the HTML file
- A.2 Reading Shaders from Source Files
- 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
- 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 Vector and Matrix Objects
- Suggested Readings
- Exercises
- Appendix D: Sampling and Aliasing
- D.1 Sampling Theory
- D.2 Reconstruction
- D.3 Quantization
- References
- WebGL Index
- Subject Index




