Top Banner
Interactive Computer Graphics A Top-Down Approach Using OpenGL® FIFTH EDITION EDWARD ANGEL UNIVERSITY OF NEW MEXICO PEARSON Addison Wesley Boston San Francisco New York London Toronto Sydney Tokyo Singapore Madrid Mexico City Munich Paris Cape Töwn Hong Kong Montreal
17

Interactive Computer Graphics - GBV

May 13, 2022

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Interactive Computer Graphics - GBV

Interactive Computer Graphics A Top-Down Approach Using OpenGL®

FIFTH EDITION

EDWARD ANGEL UNIVERSITY OF NEW MEXICO

PEARSON

Addison Wesley

Boston San Francisco New York London Toronto Sydney Tokyo Singapore Madrid

Mexico City Munich Paris Cape Töwn Hong Kong Montreal

Page 2: Interactive Computer Graphics - GBV

Preface xxv

CHAPTER 1 GRAPHICS SYSTEMS AND MODELS

1.1 Applications of Computer Graphics 1.1.1 Display of Information 2 1.1.2 Design 3

1.1.3 Simulation and Animation 3 1.1.4 User Interfaces 5

1.2 A Graphics System 1.2.1 Pixels and the Frame Buffer 5 1.2.2 Output Devices 7 1.2.3 Input Devices 10

1.3 Images: Physical and Synthetic 1.3.1 Objects and Viewers 11

1.3.2 Light and Images 12

1.3.3 Image Formation Models 14

1.4 Imaging Systems 1.4.1 The Pinhole Camera 16

1.4.2 The Human Visual System 18

1.5 The Synthetic-Camera Model

1.6 The Programmer's Interface 1.6.1 The Pen-Plotter Model 23 1.6.2 Three-Dimensional APIs 24 1.6.3 A Sequence of Images 27 1.6.4 The Modeling-Rendering Paradigm 28

1.7 Graphics Architectures 1.7.1 Display Processors 30

1.7.2 Pipeline Architectures 30

1.7.3 The Graphics Pipeline 31 1.7.4 Vertex Processing 32

Page 3: Interactive Computer Graphics - GBV

viii Con ten ts

1.7.5 Clipping and Primitive Assembly 32

1.7.6 Rasterization 33

1.7.7 Fragment Processing 33

1.8 Programmable Pipelines 3 3

1.9 Performance Characteristics 34

Summary and Notes 35

Suggested Readings 36

Exercises 36

C H A P T E R 2 GRAPHICS P R O G R A M M I N G 3 9

2.1 The Sierpinski Gasket 3 9

2.2 Programming Two-Dimensional Applications 4 0

2.2.1 Coordinate Systems 45

2.3 The O p e n G L API 46

2.3.1 Graphics Functions 47

2.3.2 The Graphics Pipeline and State Machines 48

2.3.3 The OpenGL Interface 49

2.4 Primitives and At t r ibutes 5 0

2.4.1 Polygon Basics 52

2.4.2 Polygon Types in OpenGL 53

2.4.3 Approximating a Sphere 55

2.4.4 Text 56

2.4.5 Curved Objects 58

2.4.6 Attributes 58

2.5 Color 6 0

2.5.1 RGB Color 62

2.5.2 Indexed Color 63

2.5.3 Setting of Color Attributes 65

2.6 V iewing 66

2.6.1 The Orthographie View 66

2.6.2 Two-Dimensional Viewing 69

2.6.3 Matrix Modes 70

2.7 Control Functions 7 0

2.7.1 Interaction with the Window System 71

2.7.2 Aspect Ratio and Viewports 72

2.7.3 The main, d i s p l a y , and m y i n i t Functions 74

2.7.4 Program Structure 75

2.8 The Gasket Program 7 6

2.9 Polygons and Recursion 7 7

Page 4: Interactive Computer Graphics - GBV

Conten ts

2 .10 The Three-Dimensional Gasket 8 0

2.10.1 Use of Three-Dimensional Points 80

2.10.2 Use of Polygons in Three Dimensions 82

2.10.3 Hidden-Surface Removal 83

2.11 Plott ing Implicit Functions 85

2.11.1 Marching Squares 86

Summary and Notes 92

Suggested Readings 94

Exercises 94

CHAPTF.R3 INPUT A N D INTERACTION 9 9

3.1 Interaction 9 9

3.2 Input Devices 1 0 0

3.2.1 Physical Input Devices 101

3.2.2 Logical Devices 104

3.2.3 Input Modes 105

3.3 Clients and Servers 107

3.4 Display Lists 1 0 9

3.4.1 Definition and Execution of Display Lists 110

3.4.2 Text and Display Lists 112

3.4.3 Fonts in GLUT 115

3.5 Display Lists and Mode l ing 1 1 6

3.6 Programming Event-Driven Input 117

3.6.1 Using the Pointing Device 117

3.6.2 Window Events 121

3.6.3 Keyboard Events 122

3.6.4 The Display and Idle Callbacks 123

3.6.5 Window Management 124

3.7 Menüs 1 2 4

3.8 Picking 1 2 6

3.8.1 Picking and Selection Mode 127

3.9 A Simple C A D Program 133

3 .10 Building Interactive Models 1 4 0

3.11 Animat ing Interactive Programs 1 4 2

3.11.1 The Rotating Square 143

3.11.2 Double Buffering 144

3.11.3 Using a Timer 146

3 .12 Design of Interactive Programs 147

3.12.1 Toolkits, Widgets, and the Frame Buffer 148

Page 5: Interactive Computer Graphics - GBV

Contents

3.13

3.13.1 3.13.2

3.13.3

Logic Operations

Drawing Erasable Lines 150 XORandColor 153 Cursors and Overlay Planes 153

Summary and Notes 154

Suggested Readings 155

Exercises 155

CHAPTER 4. GEOMETRIC OBJECTS AND TRANSFORMATIONS

4.1

4.1.1 4.1.2 4.1.3 4.1.4

4.1.5 4.1.6 4.1.7

4.1.8 4.1.9

4.1.10

4.2

4.3

4.3.1 4.3.2 4.3.3 4.3.4 4.3.5

4.3.6

4.4

4.5

4.5.1 4.5.2

4.5.3 4.5.4

4.5.5 4.5.6

4.6

4.7

4.7.1

4.7.2

Sealars, Points, and Vectors

Geometrie Objects 160 Coordinate-Free Geometry 161 The Mathematical View: Vector and Affine Spaces 162

The Computer Science View 163 Geometrie ADTs 163

Lines 165 Affine Sums 165 Convexity 166 Dot and Cross Products 166 Planes 167

Three-Dimensional Primitives

Coordinate Systems and Frames

Representations and N-Tuples 172

Change of Coordinate Systems 172 Example Change of Representation 175 Homogeneous Coordinates 176

Example Change in Frames 179 Working with Representations 181

Frames in OpenGL

Modeling a Colored Cube

Modeling the Faces 188 Inward- and Outward-Pointing Faces 189 Data Structures for Object Representation 189

The Color Cube 190 Bilinear Interpolation 191 Vertex Arrays 192

Affine Transformations

Translation, Rotation, and Scaling

Translation 198 Rotation 198

149

159

160

168

170

183

187

195

197

Page 6: Interactive Computer Graphics - GBV

4.7.3 Scaling 200

4.8 Transformations in Homogeneous Coordinates 2 0 2

4.8.1 Translation 203

4.8.2 Scaling 204

4.8.3 Rotation 205

4.8.4 Shear 206

4 .9 Concatenat ion of Transformations 2 0 7

4.9.1 Rotation About a Fixed Point 208

4.9.2 General Rotation 209

4.9.3 The Instance Transformation 211

4.9.4 Rotation About an Arbitrary Axis 212

4 . 1 0 O p e n G L Transformation Matrices 2 1 5

4.10.1 The Current Transformation Matrix 215

4.10.2 Rotation, Translation, and Scaling 216

4.10.3 Rotation About a Fixed Point in OpenGL 217

4.10.4 Order of Transformations 217

4.10.5 Spinning of the Cube 218

4.10.6 Loading, Pushing, and Popping Matrices 219

4.11 Interfaces to Three-Dimensional Applications 2 2 0

4.11.1 Using Areas of the Screen 221

4.11.2 A Virtual Trackball 221

4.11.3 Smooth Rotations 224

4.11.4 Incremental Rotation 225

4 . 1 2 Quaternions 2 2 6

4.12.1 Complex Numbers and Quaternions 226

4.12.2 Quaternions and Rotation 228

Summary and Notes 230

Suggested Readings 231

Exercises 231

5 V I E W I N G 2 3 5

5.1 Classical and Computer V iewing 2 3 5

5.1.1 Classical Viewing 237

5.1.2 Orthographie Projections 237

5.1.3 Axonometrie Projections 238

5.1.4 Oblique Projections 240

5.1.5 Perspective Viewing 241

5.2 V iewing wi th a Computer 2 4 2

Page 7: Interactive Computer Graphics - GBV

xi i Contents

5.3 Positioning of the Camera 244 5.3.1 Positioning of the Camera Frame 244 5.3.2 Two Viewing APIs 249 5.3.3 The Look-At Function 252 5.3.4 Other Viewing APIs 253

5.4 Simple Projections 254 5.4.1 Perspective Projections 254 5.4.2 Orthogonal Projections 257

5.5 Projections in OpenGL 258 5.5.1 Perspective in OpenGL 259 5.5.2 Parallel Viewing in OpenGL 261

5.6 Hidden-Surface Removal 262 5.6.1 Culling 264

5.7 Interactive Mesh Displays 264 5.7.1 Meshes 264 5.7.2 Walking Through a Scene 266 5.7.3 Polygon Offset 268

5.8 Parallel-Projection Matrices 269 5.8.1 Projection Normalization 270 5.8.2 Orthogonal-Projection Matrices 271 5.8.3 Oblique Projections 273

5.9 Perspective-Projection Matrices 276 5.9.1 Perspective Normalization 276

5.9.2 OpenGL Perspective Transformations 280

5.10 Projections and Shadows 281

Summary and Notes 284

Suggested Readings 285

Exercises 285

CHAPTER6 LIGHTING AND SHADING 289

6.1 Light and Matter 290

6.2 Light Sources 294 6.2.1 Color Sources 294 6.2.2 Ambient Light 295 6.2.3 Point Sources 296 6.2.4 Spotlights 297 6.2.5 Distant Light Sources 297

6.3 The Phong Lighting Model 298 6.3.1 Ambient Reflection 300

Page 8: Interactive Computer Graphics - GBV

Contents xiii

6.3.2 Diffuse Reflection 300 6.3.3 Specular Reflection 301 6.3.4 The Modified Phong Model 303

6.4 Computation of Vectors 304 6.4.1 Normal Vectors 304 6.4.2 Angle of Reflection 308

6.5 Polygonal Shading 309 6.5.1 Fiat Shading 310

6.5.2 Smooth and Gouraud Shading 311 6.5.3 Phong Shading 313

6.6 Approximation of a Sphere by Recursive Subdivision 314

6.7 Light Sources in OpenGL 317

6.8 Specification of Materials in OpenGL 320

6.9 Shading of the Sphere Model 322

6.10 Global Illumination 323

Summary and Notes 325

Suggested Readings 326

Exercises 326

CHAPTER 7 FROM VERTICES TO FRAGMENTS 329

7.1 Basic Implementation Strategies 330

7.2 Four Major Tasks 332 7.2.1 Modeling 332

7.2.2 Geometry Processing 333 7.2.3 Rasterization 334 7.2.4 Fragment Processing 335

7.3 Clipping 336

7.4 Line-Segment Clipping 336 7.4.1 Cohen-Sutherland Clipping 337 7.4.2 Liang-Barsky Clipping 339

7.5 Polygon Clipping 341

7.6 Clipping of Other Primitives 343 7.6.1 Bounding Boxes and Volumes 344 7.6.2 Curves, Surfaces, and Text 345 7.6.3 Clipping in the Frame Buffer 345

7.7 Clipping in Three Dimensions 346

7.8 Rasterization 349

7.9 Bresenham's Algorithm 352

Page 9: Interactive Computer Graphics - GBV

x i v Con ten ts

7.10 Polygon Rasterization 3 5 4

7.10.1 Inside-Outside Testing 354

7.10.2 OpenGL and Concave Polygons 355

7.10.3 Fill and Sort 356

7.10.4 Flood Fill 357

7.10.5 Singularities 357

7.11 Hidden-Surface Removal 3 5 8

7.11.1 Object-Space and Image-Space Approaches 358

7.11.2 Sorting and Hidden-Surface Removal 360

7.11.3 ScanLine Algorithms 360

7.11.4 Back-Face Removal 361

7.11.5 The z-Buffer Algorithm 362

7.11.6 Scan Conversion with the z-Buffer 365

7.11.7 Depth Sort and the Painter's Algorithm 367

7.12 Antialiasing 3 6 9

7 .13 Display Considerations 371

7.13.1 Color Systems 372

7.13.2 The Color Matrix 375

7.13.3 Gamma Correction 376

7.13.4 Dithering and Halftoning 376

Summary and Notes 377

Suggested Readings 379

Exercises 379

8 DISCRETE TECHNIQUES 3 3 3

8.1 Buffers 3 8 3

8.2 Digital Images 3 8 5

8.3 Wri t ing into Buffers 3 8 8

8.3.1 Writing Modes 389

8.3.2 Writes with XOR 391

8.4 Bit and Pixel Operat ions in O p e n G L 3 9 2

8.4.1 OpenGL Buffers and the Pixel Pipeline 392

8.4.2 Bitmaps 394

8.4.3 Raster Fonts 395

8.4.4 Pixels and Images 396

8.4.5 Lookup Tables 397

8.5 Examples 3 9 9

8.5.1 Displaying a Color Gamut 400

8.5.2 Testing Algorithms 400

8.5.3 Buffers for Picking 401

Page 10: Interactive Computer Graphics - GBV

8.6 Mapping Methods 401

8.7 Texture Mapping 403

8.7.1 Two-Dimensional Texture Mapping 404

8.8 Texture Mapping in OpenGL 410

8.8.1 Two-Dimensional Texture Mapping 411

8.8.2 Texture Sampling 414

8.8.3 Working with Texture Coordinates 417

8.8.4 Texture Objects 419

8.8.5 Multitexturing 420

8.9 Texture Generation 421

8.10 Environment Maps 422

8.11 Compositing Techniques 427

8.11.1 Opacity and Blending 428 8.11.2 Image Compositing 429 8.11.3 Blending and Compositing in OpenGL 429 8.11.4 Antialiasing Revisited 431 8.11.5 Back-to-Front and Front-to-Back Rendering 432

8.11.6 Depth Cueing and Fog 433

8.12 Multirendering and the Accumulation Buffer 434

8.12.1 Scene Antialiasing 435

8.12.2 Bump Mapping and Embossing 436

8.12.3 Image Processing 436

8.12.4 Imaging Extensions 438

8.12.5 Other Multipass Methods 438

8.13 Sampling and Aliasing 439

8.13.1 Sampling Theory 440 8.13.2 Reconstruction 444

8.13.3 Quantization 446

Summary and Notes 447

Suggested Readings 448

Exercises 448

cnArr-:f<9 PROGRAMMABLE SHADERS 451

9.1 Programmable Pipelines 451

9.2 Shading Languages 453

9.2.1 ShadeTrees 453

9.3 Extending OpenGL 454

9.3.1 OpenGL Versions and Extensions 455 9.3.2 GLSL and Cg 456

Page 11: Interactive Computer Graphics - GBV

XVI Contents

9.4

9.4.1 9.4.2

9.5

9.5.1 9.5.2

9.5.3

9.6

9.7

9.7.1 9.7.2 9.7.3

9.8

9.8.1 9.8.2

9.9

9.10

9.11

9.12

9.12.1 9.12.2

9.12.3

9.13

9.13.1 9.13.2

The OpenGL Shading Language

Vertex Shaders 457 Fragment Shaders 459

The OpenGL Shading Language

GLSL Execution 461 Data Types and Qualifiers 461 Operators and Functions 464

Linking Shaders with OpenGL Programs

Moving Vertices Scaling Vertex Positions 470

Morphing 472 Particle Systems 474

Vertex Lighting with Shaders

Phong Lighting 475 Nonphotorealistic Shading 478

Fragment Shaders

Per-Vertex Versus Per-Fragment Lighting

Samplers

Cube Maps Reflection Maps 486

Refraction 487 Normalization Maps 490

Bump Mapping

Finding Bump Maps 492

Examples 495

456

460

465

470

475

479

480

483

485

492

Summary and Notes 499

Suggested Readings 499

Exercises 500

.- 10 MODELING AMD rü=RARCHY 503

10.1 Symbols and Instances 504

10.2 Hierarchical Models 505

10.3 A Robot Arm 507

10.4 Trees and Traversal 509 10.4.1 A Stack-Based Traversal 511

10.5 Use of Tree Data Structures 513

10.6 Animation 517

Page 12: Interactive Computer Graphics - GBV

Contents xvii

10.7 Graphical Objects 519 10.7.1 Methods , At t r ibutes, and Messages 519 10.7.2 ACubeObject 521 10.7.3 Imp lement ing the Cube Ob jec t 523 10.7.4 Objects and Hierarchy 524

10.7.5 Geometr ie Objects 525

10.8 Scene Graphs 526

10.9 A Simple Scene Graph API 528 10.9.1 TheNodeClass 528

10.9.2 Geomet ry Nodes 530 10.9.3 Camera Class 532 10.9.4 Lights and Materials 533 10.9.5 Transformations 535

10.9.6 The Robot Figure 535 10.9.7 Imp lement ing the Viewer 537 10.9.8 Imp lement ing a N o d e 541

10.10 Open Scene Graph 544

10.11 Graphics and the Internet 546 10.11.1 Networks and Protocols 546 10.11.2 Hypermedia and HTML 547 10.11.3 Databases and VRML 548 10.11.4 Java and App le ts 549

10.12 Other Tree Structures 549 10.12.1 CSGTrees 550 10.12.2 BSPTrees 551

10.12.3 Quadtrees and Octrees 554

Summary and Notes 555

Suggested Readings 556

Exercises 556

••• : iPTER 11 PROCEDURAL METHODS 559

11.1 Algorithmic Models 559

11.2 Physically-Based Models and Particle Systems 561

11.3 Newtonian Particles 562 11.3.1 Independen t Particles 564 11.3.2 Spring Forces 565 11.3.3 At t ract ive and Repulsive Forces 566

11.4 Solving Particle Systems 568

Page 13: Interactive Computer Graphics - GBV

XVU1 Contents

11.5 11.5.1 11.5.2

11.6

11.6.1 11.6.2

11.6.3 11.6.4

11.6.5 11.6.6

11.7

11.8

11.8.1 11.8.2 11.8.3 11.8.4

11.8.5

11.9

Constraints

Collisions 571

Soft Constraints 573

A Simple Partial System

Displaying the Particles 574 Updating Particle Positions 575 Initialization 575

Collisions 576 Forces 577 Flocking 577

Language-Based Models

Recursive Methods and Fractals

Rulers and Length 582 Fractal Dimension 583

Midpoint Division and Brownian Motion Fractal Mountains 585 The Mandelbrot Set 586

Procedural Noise

Summary and Notes 594

Suggested Readings 594

Exercises 595

570

574

578

582

584

590

C H A P 1 1 : ? 12 CURVES AND SUSPACES 597

12.1 Representation of Curves and Surfaces 597

12.1.1 Explicit Representation 597

12.1.2 Implicit Representations 599

12.1.3 Parametric Form 600

12.1.4 Parametric Polynomial Curves 601

12.1.5 Parametric Polynomial Surfaces 602

12.2 Design Criteria 603

12.3 Parametric Cubic Polynomial Curves 604

12.4 Interpolation 605

12.4.1 Blending Functions 607

12.4.2 The Cubic Interpolating Patch 609

12.5 Hermite Curves and Surfaces 611 12.5.1 The Hermite Form 611

12.5.2 Geometrie and Parametric Continuity 613

12.6 Bezier Curves and Surfaces 614 12.6.1 Bezier Curves 615

Page 14: Interactive Computer Graphics - GBV

Contents xix

12.6.2 Bezier Surface Patches 617

12.7 Cubic B-Splines

12.7.1 The Cubic B-Spline Curve 618

12.7.2 B-Splines and Basis 621

12.7.3 Spline Surfaces 623

12.8 General B-Splines

12.8.1 Recursively Defined B-Splines 624 12.8.2 Uniform Splines 625 12.8.3 Nonuniform B-Splines 626 12.8.4 NURBS 626 12.8.5 Catmull-Rom Splines 628

12.9 Rendering Curves and Surfaces

12.9.1 Polynomial Evaluation Methods 629 12.9.2 Recursive Subdivision of Bezier Polynomials 630 12.9.3 Rendering Other Polynomial Curves by Subdivision

12.9.4 Subdivision of Bezier Surfaces 634

12.10 The Utah Teapot

12.11 Algebraic Surfaces

12.11.1 Quadrics 638 12.11.2 Rendering of Surfaces by Ray Casting 639 12.11.3 Subdivision Curves and Surfaces 640 12.11.4 Mesh Subdivision 641

12.12 Curves and Surfaces in OpenGL

12.12.1 Bezier Curves 644 12.12.2 Bezier Surfaces 645 12.12.3 Displaying the Teapot 646

12.12.4 NURBS Functions 648

12.12.5 Quadrics 648

Summary and Notes 649

Suggested Readings 650

Exercises 650

618

623

629

633

636

638

644

CHARTER 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 658 13.3.2 Calculating Intersections 660

13.3.3 Ray-Tracing Variations 663

653

653

654

658

Page 15: Interactive Computer Graphics - GBV

x x Contents

13.4 The Rendering Equation 664

13.5 Radiosity 666 13.5.1 The Radiosity Equation 666 13.5.2 Solving the Radiosity Equation 668

13.5.3 Computing Form Factors 669 13.5.4 Carrying Out Radiosity 672

13.6 RenderMan 673

13.7 Parallel Rendering 674 13.7.1 Sort-Middle Rendering 675 13.7.2 Sort-Last Rendering 677

13.7.3 Sort-First Rendering 680

13.8 Image-Based Rendering 682

13.8.1 A Simple Example 682

Summary and Notes 684

Suggested Readings 685

Exercises 686

APPENDIX A SAMPLE PROGRAMS 689

A.1 Sierpinski Gasket Program 690

A.2 Recursive Generation of Sierpinski Gasket 692

A.3 Recursive Three-Dimensional Sierpinski Gasket 693

A.4 Marching Squares 696

A.5 Polygon Model ing Program 701

A.6 Double-Buffering program 707

A.7 Selection-Mode Picking Program 710

A.8 Rotating-Cube Program 712

A.9 Rotating Cube Using Vertex Arrays 715

A.10 Rotating Cube wi th a Virtual Trackball 717

A.11 Moving Viewer 721

A.12 Sphere Program 724

A.13 Mandelbrot Set Program 727

A.14 Bresenham's Algor i thm 730

A.15 Rotating Cube wi th Texture 733

A.16 GLSL Example 735

A.17 Scene Graph Program 741

A.18 Particle System Program 746

A.19 Program for Drawing Bezier Curves 751

Page 16: Interactive Computer Graphics - GBV

Contents xxi

APPENDIX B SPACES

B.1 Sealars

B.2 Vector Spaces

B.3 Aff ine Spaces

B.4 Euclidean Spaces

B.5 Projections

B.6 Gram-Schmidt Orthogonalization

Suggested Readings 762

Exercises 762

755

755

756

758

759

760

761

APPENDIX C MATRICES

C.1 Definitions

C.2 Matr ix 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

Suggested Readings 773

Exercises 774

765

765

766

767

768

769

771

772

APPENDIX D SYNOPSIS OF OPENGL FUNCTIONS

D.1 Specifying Simple Geometry

D.2 At t r ibutes

D.3 Working wi th the Window System

D.4 Interaction

D.5 Enabling Features

D.6 Transformations

D.7 Viewing

D.8 Defining Discrete Primitives

D.9 Display Lists

D.10 Picking

D.11 Lighting

D.12 Texture Mapping

D.13 State and Buffer Manipulation

D.14 Vertex Arrays

775

775

776

777

779

780

781

782

783

784

785

786

786

788

788

Page 17: Interactive Computer Graphics - GBV

x x i i Contents

D.15 Blending Functions 789

D.16 Query Functions 789

D.17 Curve and Surface Functions 790

D.18 GLUQuadrics 791

D.19 GLSL Functions 791

References 795

OpenGL Function Index 805

Subject Index 807