This book is suitable for undergraduate students in computer science and engineering, for students in other disciplines who have good programming skills, and for professionals. Computer animation and graphics–once rare, complicated, and comparatively expensive–are now prevalent in everyday life from the computer screen to the movie screen. Interactive Computer Graphics: A Top-Down Approach with Shader-Based OpenGL®, 6e, is the only introduction to computer graphics text for undergraduates that fully integrates OpenGL 3.1 and emphasizes application-based programming. Using C and C++, the top-down, programming-oriented approach allows for coverage of engaging 3D material early in the text so readers immediately begin to create their own 3D graphics. Low-level algorithms (for topics such as line drawing and filling polygons) are presented after readers learn to create graphics.
Author(s): Edward Angel, Dave Shreiner
Edition: 6
Publisher: Addison Wesley
Year: 2011
Language: English
Pages: 778
Tags: Информатика и вычислительная техника;Компьютерная графика;
Cover......Page 1
Title Page......Page 5
Copyright Page......Page 6
Contents......Page 9
Preface......Page 23
Acknowledgments......Page 28
CHAPTER 1 GRAPHICS SYSTEMS AND MODELS......Page 33
1.1.1 Display of Information......Page 34
1.1.3 Simulation and Animation......Page 35
1.1.4 User Interfaces......Page 36
1.2.1 Pixels and the Frame Buffer......Page 37
1.2.2 The CPU and the GPU......Page 38
1.2.3 Output Devices......Page 39
1.2.4 Input Devices......Page 41
1.2.5 Physical Input Devices......Page 42
1.2.6 Logical Devices......Page 44
1.2.7 Input Modes......Page 45
1.3.1 Objects and Viewers......Page 47
1.3.2 Light and Images......Page 48
1.3.3 Imaging Models......Page 50
1.4.1 The Pinhole Camera......Page 52
1.4.2 The Human Visual System......Page 54
1.5 The Synthetic-Camera Model......Page 55
1.6 The Programmer’s Interface......Page 57
1.6.1 The Pen-Plotter Model......Page 59
1.6.2 Three-Dimensional APIs......Page 60
1.6.3 A Sequence of Images......Page 63
1.6.4 The Modeling–Rendering Paradigm......Page 64
1.7 Graphics Architectures......Page 65
1.7.2 Pipeline Architectures......Page 66
1.7.3 The Graphics Pipeline......Page 67
1.7.5 Clipping and Primitive Assembly......Page 68
1.8 Programmable Pipelines......Page 69
1.9 Performance Characteristics......Page 70
Summary and Notes......Page 71
Suggested Readings......Page 72
Exercises......Page 73
2.1 The Sierpinski Gasket......Page 75
2.2 Programming Two-Dimensional Applications......Page 78
2.3 The OpenGL Application Programming Interface......Page 82
2.3.1 Graphics Functions......Page 83
2.3.3 The OpenGL Interface......Page 85
2.3.4 Coordinate Systems......Page 87
2.4 Primitives and Attributes......Page 88
2.4.1 Polygon Basics......Page 90
2.4.2 Polygons in OpenGL......Page 91
2.4.3 Approximating a Sphere......Page 92
2.4.4 Triangulation......Page 94
2.4.5 Text......Page 96
2.4.7 Attributes......Page 97
2.5 Color......Page 99
2.5.1 RGB Color......Page 101
2.5.2 Indexed Color......Page 103
2.5.3 Setting of Color Attributes......Page 104
2.6 Viewing......Page 105
2.6.1 The Orthographic View......Page 106
2.6.2 Two-Dimensional Viewing......Page 109
2.7.1 Interaction with the Window System......Page 110
2.7.2 Aspect Ratio and Viewports......Page 111
2.7.3 The main, display, and init Functions......Page 112
2.8 The Gasket Program......Page 115
2.8.1 Rendering the Points......Page 116
2.8.2 The Vertex Shader......Page 117
2.8.5 The initShader Function......Page 118
2.9 Polygons and Recursion......Page 120
2.10.1 Use of Three-Dimensional Points......Page 123
2.10.2 Use of Polygons in Three Dimensions......Page 124
2.10.3 Hidden-Surface Removal......Page 128
2.11.1 Using the Pointing Device......Page 130
2.11.2 Window Events......Page 133
2.11.3 Keyboard Events......Page 134
2.11.4 The Idle Callback......Page 135
2.11.5 Double Buffering......Page 137
2.12 Menus......Page 138
Summary and Notes......Page 140
Suggested Readings......Page 141
Exercises......Page 142
CHAPTER 3 GEOMETRIC OBJECTS AND TRANSFORMATIONS......Page 147
3.1.1 Geometric Objects......Page 148
3.1.2 Coordinate-Free Geometry......Page 149
3.1.3 The Mathematical View: Vector and Affine Spaces......Page 150
3.1.5 Geometric ADTs......Page 151
3.1.6 Lines......Page 152
3.1.7 Affine Sums......Page 153
3.1.9 Dot and Cross Products......Page 154
3.1.10 Planes......Page 155
3.2 Three-Dimensional Primitives......Page 157
3.3 Coordinate Systems and Frames......Page 158
3.3.1 Representations and N-Tuples......Page 160
3.3.2 Change of Coordinate Systems......Page 161
3.3.3 Example Change of Representation......Page 164
3.3.4 Homogeneous Coordinates......Page 165
3.3.5 Example Change in Frames......Page 168
3.3.6 Working with Representations......Page 169
3.4 Frames in OpenGL......Page 171
3.5 Matrix and Vector Classes......Page 176
3.6.2 Inward- and Outward-Pointing Faces......Page 178
3.6.3 Data Structures for Object Representation......Page 179
3.6.4 The Color Cube......Page 180
3.6.5 Interpolation......Page 182
3.6.6 Displaying the Cube......Page 183
3.7 Affine Transformations......Page 184
3.8.1 Translation......Page 187
3.8.2 Rotation......Page 188
3.8.3 Scaling......Page 190
3.9 Transformations in Homogeneous Coordinates......Page 191
3.9.1 Translation......Page 192
3.9.2 Scaling......Page 193
3.9.3 Rotation......Page 194
3.9.4 Shear......Page 195
3.10 Concatenation of Transformations......Page 196
3.10.1 Rotation About a Fixed Point......Page 197
3.10.2 General Rotation......Page 199
3.10.3 The Instance Transformation......Page 200
3.10.4 Rotation About an Arbitrary Axis......Page 201
3.11 Transformation Matrices in OpenGL......Page 204
3.11.1 Current Transformation Matrices......Page 205
3.11.2 Rotation, Translation, and Scaling......Page 206
3.11.3 Rotation About a Fixed Point......Page 207
3.12 Spinning of the Cube......Page 208
3.12.1 Updating in the Display Callback......Page 209
3.12.2 Uniform Variables......Page 210
3.13.1 Using Areas of the Screen......Page 212
3.13.2 A Virtual Trackball......Page 213
3.13.3 Smooth Rotations......Page 216
3.13.4 Incremental Rotation......Page 217
3.14.1 Complex Numbers and Quaternions......Page 218
3.14.2 Quaternions and Rotation......Page 219
Suggested Readings......Page 222
Exercises......Page 223
4.1 Classical and Computer Viewing......Page 227
4.1.2 Orthographic Projections......Page 229
4.1.3 Axonometric Projections......Page 230
4.1.4 Oblique Projections......Page 232
4.1.5 Perspective Viewing......Page 233
4.2 Viewing with a Computer......Page 234
4.3.1 Positioning of the Camera Frame......Page 236
4.3.2 Two Viewing APIs......Page 241
4.3.3 The Look-At Function......Page 244
4.3.4 Other Viewing APIs......Page 246
4.4.1 Orthogonal Projections......Page 247
4.4.2 Parallel Viewing with OpenGL......Page 248
4.4.3 Projection Normalization......Page 249
4.4.4 Orthogonal-Projection Matrices......Page 251
4.4.5 Oblique Projections......Page 252
4.4.6 An Interactive Viewer......Page 256
4.5.1 Simple Perspective Projections......Page 258
4.6 Perspective Projections with OpenGL......Page 261
4.6.1 Perspective Functions......Page 262
4.7.1 Perspective Normalization......Page 264
4.7.2 OpenGL Perspective Transformations......Page 268
4.8 Hidden-Surface Removal......Page 270
4.9 Displaying Meshes......Page 273
4.9.1 Displaying Meshes as a Surface......Page 276
4.9.2 Polygon Offset......Page 278
4.9.3 Walking Through a Scene......Page 279
4.10 Projections and Shadows......Page 281
Summary and Notes......Page 285
Exercises......Page 286
CHAPTER 5 LIGHTING AND SHADING......Page 289
5.1 Light and Matter......Page 290
5.2 Light Sources......Page 293
5.2.2 Ambient Light......Page 294
5.2.3 Point Sources......Page 295
5.2.5 Distant Light Sources......Page 296
5.3 The Phong Reflection Model......Page 297
5.3.2 Diffuse Reflection......Page 299
5.3.3 Specular Reflection......Page 301
5.3.4 The Modified Phong Model......Page 302
5.4 Computation of Vectors......Page 303
5.4.1 Normal Vectors......Page 304
5.4.2 Angle of Reflection......Page 306
5.5 Polygonal Shading......Page 307
5.5.1 Flat Shading......Page 308
5.5.2 Smooth and Gouraud Shading......Page 309
5.5.3 Phong Shading......Page 311
5.6 Approximation of a Sphere by Recursive Subdivision......Page 312
5.7.1 Light Sources......Page 315
5.7.2 Materials......Page 316
5.8.1 Applying the Lighting Model in the Application......Page 318
5.8.2 Efficiency......Page 321
5.8.3 Lighting in the Vertex Shader......Page 322
5.9 Shading of the Sphere Model......Page 326
5.10 Per-Fragment Lighting......Page 327
5.11 Global Illumination......Page 329
Summary and Notes......Page 331
Exercises......Page 332
CHAPTER 6 FROM VERTICES TO FRAGMENTS......Page 335
6.1 Basic Implementation Strategies......Page 336
6.2.1 Modeling......Page 338
6.2.2 Geometry Processing......Page 339
6.2.3 Rasterization......Page 340
6.2.4 Fragment Processing......Page 341
6.4.1 Cohen-Sutherland Clipping......Page 342
6.4.2 Liang-Barsky Clipping......Page 345
6.5 Polygon Clipping......Page 346
6.6 Clipping of Other Primitives......Page 349
6.6.1 Bounding Boxes and Volumes......Page 350
6.7 Clipping in Three Dimensions......Page 351
6.8 Rasterization......Page 355
6.9 Bresenham’s Algorithm......Page 357
6.10.1 Inside–Outside Testing......Page 359
6.10.3 Fill and Sort......Page 361
6.10.5 Singularities......Page 362
6.11.1 Object-Space and Image-Space Approaches......Page 363
6.11.2 Sorting and Hidden-Surface Removal......Page 364
6.11.3 Scanline Algorithms......Page 365
6.11.4 Back-Face Removal......Page 366
6.11.5 The z-Buffer Algorithm......Page 367
6.11.6 Scan Conversion with the z-Buffer......Page 370
6.11.7 Depth Sort and the Painter’s Algorithm......Page 372
6.12 Antialiasing......Page 374
6.13 Display Considerations......Page 376
6.13.1 Color Systems......Page 377
6.13.2 The Color Matrix......Page 380
6.13.4 Dithering and Halftoning......Page 381
Summary and Notes......Page 382
Exercises......Page 384
7.1 Buffers......Page 389
7.2 Digital Images......Page 391
7.3 Writing into Buffers......Page 394
7.3.1 Writing Modes......Page 395
7.3.2 Writing with XOR......Page 397
7.4 Mapping Methods......Page 398
7.5.1 Two-Dimensional Texture Mapping......Page 400
7.6 Texture Mapping in OpenGL......Page 406
7.6.2 Texture Objects......Page 407
7.6.4 Texture Coordinates and Samplers......Page 408
7.6.5 Texture Sampling......Page 414
7.6.6 Working with Texture Coordinates......Page 416
7.6.7 Multitexturing......Page 418
7.7 Texture Generation......Page 419
7.8 Environment Maps......Page 420
7.9 Reflection Map Example......Page 425
7.10 Bump Mapping......Page 428
7.10.1 Finding Bump Maps......Page 429
7.10.2 Bump Map Example......Page 432
7.11.1 Opacity and Blending......Page 436
7.11.3 Blending and Compositing in OpenGL......Page 438
7.11.4 Antialiasing Revisited......Page 439
7.11.5 Back-to-Front and Front-to-Back Rendering......Page 441
7.11.6 Scene Antialiasing and Multisampling......Page 442
7.11.7 Image Processing......Page 443
7.11.8 Other Multipass Methods......Page 444
7.12.1 Sampling Theory......Page 445
7.12.2 Reconstruction......Page 450
7.12.3 Quantization......Page 452
Summary and Notes......Page 453
Exercises......Page 454
CHAPTER 8 MODELING AND HIERARCHY......Page 457
8.1 Symbols and Instances......Page 458
8.2 Hierarchical Models......Page 459
8.3 A Robot Arm......Page 461
8.4 Trees and Traversal......Page 464
8.4.1 A Stack-Based Traversal......Page 466
8.5 Use of Tree Data Structures......Page 469
8.6 Animation......Page 473
8.7.1 Methods, Attributes, and Messages......Page 475
8.7.2 A Cube Object......Page 477
8.7.4 Objects and Hierarchy......Page 479
8.7.5 Geometric Objects......Page 480
8.8 Scene Graphs......Page 481
8.9 Open Scene Graph......Page 483
8.10.1 Hypermedia and HTML......Page 485
8.10.3 Interactive Graphics and the Web......Page 486
8.11.1 CSG Trees......Page 487
8.11.2 BSP Trees......Page 489
8.11.3 Quadtrees and Octrees......Page 491
Suggested Readings......Page 493
Exercises......Page 494
9.1 Algorithmic Models......Page 497
9.2 Physically Based Models and Particle Systems......Page 499
9.3 Newtonian Particles......Page 500
9.3.1 Independent Particles......Page 502
9.3.2 Spring Forces......Page 503
9.3.3 Attractive and Repulsive Forces......Page 504
9.4 Solving Particle Systems......Page 505
9.5.1 Collisions......Page 508
9.5.2 Soft Constraints......Page 511
9.6.1 Displaying the Particles......Page 512
9.6.2 Updating Particle Positions......Page 513
9.6.3 Collisions......Page 514
9.6.5 Flocking......Page 515
9.7 Language-Based Models......Page 516
9.8 Recursive Methods and Fractals......Page 519
9.8.1 Rulers and Length......Page 520
9.8.2 Fractal Dimension......Page 521
9.8.3 Midpoint Division and Brownian Motion......Page 522
9.8.4 Fractal Mountains......Page 524
9.8.5 The Mandelbrot Set......Page 525
9.9 Procedural Noise......Page 528
Summary and Notes......Page 532
Exercises......Page 533
10.1.1 Explicit Representation......Page 535
10.1.2 Implicit Representations......Page 537
10.1.3 Parametric Form......Page 538
10.1.4 Parametric Polynomial Curves......Page 539
10.1.5 Parametric Polynomial Surfaces......Page 540
10.2 Design Criteria......Page 541
10.3 Parametric Cubic Polynomial Curves......Page 542
10.4 Interpolation......Page 543
10.4.1 Blending Functions......Page 545
10.4.2 The Cubic Interpolating Patch......Page 547
10.5.1 The Hermite Form......Page 549
10.5.2 Geometric and Parametric Continuity......Page 551
10.6 Bézier Curves and Surfaces......Page 552
10.6.1 Bézier Curves......Page 553
10.6.2 Bézier Surface Patches......Page 555
10.7 Cubic B-Splines......Page 556
10.7.1 The Cubic B-Spline Curve......Page 557
10.7.3 Spline Surfaces......Page 560
10.8 General B-Splines......Page 561
10.8.1 Recursively Defined B-Splines......Page 562
10.8.4 NURBS......Page 564
10.8.5 Catmull-Rom Splines......Page 566
10.9 Rendering Curves and Surfaces......Page 567
10.9.1 Polynomial Evaluation Methods......Page 568
10.9.2 Recursive Subdivision of Bézier Polynomials......Page 569
10.9.3 Rendering Other Polynomial Curves by Subdivision......Page 572
10.9.4 Subdivision of Bézier Surfaces......Page 573
10.10 The Utah Teapot......Page 574
10.11.1 Quadrics......Page 577
10.12 Subdivision Curves and Surfaces......Page 578
10.12.1 Mesh Subdivision......Page 579
10.13 Mesh Generation from Data......Page 582
10.13.2 Delaunay Triangulation......Page 583
10.13.3 Point Clouds......Page 587
Suggested Readings......Page 588
Exercises......Page 589
11.1 Going Beyond Pipeline Rendering......Page 591
11.2 Ray Tracing......Page 592
11.3.1 Recursive Ray Tracing......Page 596
11.3.2 Calculating Intersections......Page 598
11.3.3 Ray-Tracing Variations......Page 600
11.4 The Rendering Equation......Page 601
11.5 Radiosity......Page 603
11.5.1 The Radiosity Equation......Page 604
11.5.2 Solving the Radiosity Equation......Page 606
11.5.3 Computing Form Factors......Page 607
11.5.4 Carrying Out Radiosity......Page 609
11.6 RenderMan......Page 610
11.7 Parallel Rendering......Page 611
11.7.1 Sort-Middle Rendering......Page 613
11.7.2 Sort-Last Rendering......Page 615
11.7.3 Sort-First Rendering......Page 618
11.8.1 Volumetric Data Sets......Page 620
11.8.2 Visualization of Implicit Functions......Page 621
11.9 Isosurfaces and Marching Cubes......Page 623
11.10 Mesh Simplification......Page 626
11.11 Direct Volume Rendering......Page 627
11.11.2 Splatting......Page 628
11.11.3 Volume Ray Tracing......Page 630
11.11.4 Texture Mapping of Volumes......Page 631
11.12.1 A Simple Example......Page 632
Summary and Notes......Page 634
Suggested Readings......Page 635
Exercises......Page 636
APPENDIX A: SAMPLE PROGRAMS......Page 639
A.1.1 Application Code......Page 640
A.2.1 Application Code......Page 642
A.2.3 Fragment Shader......Page 644
A.3.1 Application Code......Page 645
A.4.1 Application Code......Page 647
A.4.3 Fragment Shader......Page 652
A.5.1 Application Code......Page 653
A.5.2 Vertex Shader......Page 657
A.6.1 Application Code......Page 658
A.6.2 Vertex Shader......Page 663
A.7.1 Application Code......Page 664
A.7.2 Vertex Shader......Page 669
A.8.1 Application Code......Page 670
A.8.2 Vertex Shader......Page 676
A.8.3 Fragment Shader......Page 677
A.9.1 Application Code......Page 678
A.10.1 Application Code......Page 691
A.10.3 Fragment Shader......Page 696
B.1 Scalars......Page 697
B.2 Vector Spaces......Page 698
B.3 Affine Spaces......Page 700
B.4 Euclidean Spaces......Page 701
B.5 Projections......Page 702
B.6 Gram-Schmidt Orthogonalization......Page 703
Exercises......Page 704
C.1 Definitions......Page 707
C.2 Matrix Operations......Page 708
C.3 Row and Column Matrices......Page 709
C.4 Rank......Page 710
C.5 Change of Representation......Page 711
C.6 The Cross Product......Page 713
C.7 Eigenvalues and Eigenvectors......Page 714
C.8 Vector and Matrix Classes......Page 715
Exercises......Page 716
D.1 Initialization and Window Functions......Page 719
D.2 Vertex Buffer Objects......Page 721
D.3 Interaction......Page 722
D.4 Setting Attributes and Enabling Features......Page 724
D.5 Texture and Image Functions......Page 725
D.7 Query Functions......Page 726
D.8 GLSL Functions......Page 727
References......Page 731
OpenGL Function Index......Page 741
A......Page 743
C......Page 744
D......Page 746
E......Page 747
G......Page 748
H......Page 749
I......Page 750
L......Page 751
M......Page 752
N......Page 753
P......Page 754
R......Page 756
S......Page 758
T......Page 759
U......Page 760
V......Page 761
Z......Page 762