Advanced Graphics Programming Using OpenGL
McReynolds, Tom; Blythe, David
In stock
Regular price
35.500 KD
inc. VAT
Couldn't load pickup availability
Table of contents
- Cover
- Contentsvi
- Prefacexxiii
- Acknowledgementsxxvii
- Biographiesxxviii
- Part I Concepts1
- Chapter 1 Geometry Representation and Modeling3
- 1.1 Polygonal Representation3
- 1.2 Decomposition and Tessellation4
- 1.3 Shading Normals8
- 1.3.1 Smooth Shading9
- 1.3.2 Vertex Winding Order11
- 1.4 Triangle Stripping12
- 1.4.1 Greedy Tri-stripping13
- 1.5 Vertices and Vertex Arrays14
- 1.5.1 Vertex Buffer Objects15
- 1.5.2 Triangle Lists16
- 1.6 Modeling vs. Rendering Revisited17
- Chapter 2 3D Transformations19
- 2.1 Data Representation19
- 2.2 Overview of the Transformation Pipeline20
- 2.2.1 Object Space and the Modelview Transform20
- 2.2.2 Eye Space and Projection Transform21
- 2.2.3 Clip Space and Perspective Divide22
- 2.2.4 NDC Space and the Viewport Transform22
- 2.2.5 Window Space23
- 2.3 Normal Transformation23
- 2.4 Texture Coordinate Generation and Transformation25
- 2.4.1 Texture Matrix25
- 2.4.2 Texture Coordinate Generation25
- 2.5 Modeling Transforms27
- 2.6 Visualizing Transform Sequences28
- 2.7 Projection Transform30
- 2.8 The Z Coordinate and Perspective Projection30
- 2.8.1 Z Coordinates and Fog32
- 2.9 Vertex Programs32
- 2.10 Summary34
- Chapter 3 Color, Shading, and Lighting35
- 3.1 Representing Color35
- 3.1.1 Resolution and Dynamic Range36
- 3.1.2 Gamma37
- 3.1.3 Alpha39
- 3.1.4 Color Index39
- 3.2 Shading40
- 3.3 Lighting43
- 3.3.1 Intensities, Colors, and Materials46
- 3.3.2 Light Source Properties47
- 3.3.3 Material Properties49
- 3.3.4 Vertex and Fragment Lighting50
- 3.4 Fixed-Point and Floating-Point Arithmetic53
- 3.4.1 Biased Arithmetic54
- 3.5 Summary56
- Chapter 4 Digital Images and Image Manipulation57
- 4.1 Image Representation57
- 4.2 Digital Filtering60
- 4.3 Convolution62
- 4.4 Images in OpenGL63
- 4.5 Positioning Images65
- 4.6 Pixel Store Operations65
- 4.7 Pixel Transfer Operations67
- 4.7.1 Scale and Bias67
- 4.7.2 Pixel Mapping Operations67
- 4.8 ARB Imaging Subset68
- 4.8.1 Convolution68
- 4.8.2 Color Matrix Transform68
- 4.8.3 Histogram69
- 4.8.4 MinMax70
- 4.8.5 Color Tables70
- 4.8.6 Blend Equation and Constant Color Blending71
- 4.9 Off-Screen Processing72
- 4.10 Summary72
- Chapter 5 Texture Mapping73
- 5.1 Loading Texture Images73
- 5.1.1 Texture Borders74
- 5.1.2 Internal Texture Formats75
- 5.1.3 Compressed Textures76
- 5.1.4 Proxy Textures77
- 5.2 Texture Coordinates77
- 5.2.1 Texture Coordinate Generation and Transformation79
- 5.3 Loading Texture Images from the Frame Buffer79
- 5.4 Environment Mapping80
- 5.4.1 Generating Environment Map Texture Coordinates81
- 5.4.2 Texture Maps Used in Environment Mapping82
- 5.4.3 Cube Mapping83
- 5.4.4 Sphere Mapping85
- 5.5 3D Texture88
- 5.5.1 Using 3D Textures to Render Solid Materials89
- 5.6 Filtering90
- 5.7 Additional Control of Texture Level of Detail91
- 5.8 Texture Objects93
- 5.9 Multitexture95
- 5.9.1 Multitexture Model96
- 5.9.2 Multitexture Texture Environments97
- 5.10 Texture Environment98
- 5.10.1 Advanced Texture Environment Functionality99
- 5.10.2 Fragment Programs100
- 5.11 Summary102
- Chapter 6 Rasterization and Fragment Processing103
- 6.1 Rasterization104
- 6.1.1 Rasterization Consistency105
- 6.1.2 Z-Fighting105
- 6.1.3 Bitmaps and Pixel Rectangles107
- 6.1.4 Texture, Color, and Depth Interpolation108
- 6.1.5 w Buffering109
- 6.2 Fragment Operations110
- 6.2.1 Multisample Operations111
- 6.2.2 Alpha Test111
- 6.2.3 Stencil Test111
- 6.2.4 Blending112
- 6.2.5 Logic Op114
- 6.3 Framebuffer Operations115
- 6.3.1 Accumulation Buffer116
- 6.4 Summary117
- Chapter 7 Window System and Platform Integration119
- 7.1 Renderer and Window State120
- 7.2 Address Space and Threads121
- 7.3 Anatomy of a Window122
- 7.3.1 Overlay and Underlay Windows122
- 7.3.2 Multiple Displays123
- 7.4 Off-Screen Rendering124
- 7.4.1 GLX Pbuffers125
- 7.4.2 WGL Pbuffers126
- 7.5 Rendering to Texture Maps126
- 7.6 Direct and Indirect Rendering127
- Chapter 8 OpenGL Implementations129
- 8.1 OpenGL Versions129
- 8.2 OpenGL Extensions131
- 8.3 OpenGL ES for Embedded Systems131
- 8.3.1 Embedded Profiles132
- 8.3.2 Common and Common-Lite Profiles133
- 8.3.3 Safety Critical Profile136
- 8.3.4 OpenGL ES Revisions136
- 8.4 OpenGL Pipeline Evolution137
- 8.5 Hardware Implementations of the Pipeline138
- 8.5.1 Rasterization Acceleration138
- 8.5.2 Primitive Setup Acceleration141
- 8.5.3 Transform and Lighting Acceleration141
- 8.5.4 Pipeline Balance142
- 8.5.5 Parallelism Opportunities142
- 8.5.6 Reordering the Pipeline149
- 8.5.7 Mixed Software and Hardware Implementations150
- 8.6 The Future151
- Part II Basic Techniques153
- Chapter 9 Multiple Rendering Passes155
- 9.1 Invariance155
- 9.2 Multipass Overview156
- 9.3 The Multipass Toolbox159
- 9.3.1 Arithmetic Operations159
- 9.3.2 Arbitrary Functions160
- 9.3.3 Conditionals161
- 9.3.4 Variables162
- 9.3.5 Parameters163
- 9.4 Multipass Limitations165
- 9.5 Multipass vs. Micropass165
- 9.5.1 Multitexture166
- 9.6 Deferred Shading167
- 9.7 Summary167
- Chapter 10 Antialiasing169
- 10.1 Full-Scene Antialiasing170
- 10.2 Supersampling171
- 10.2.1 Supersampling by Overdrawing172
- 10.2.2 Supersampling with the Accumulation Buffer173
- 10.2.3 Multisample Antialiasing175
- 10.2.4 Drawbacks176
- 10.3 Area Sampling177
- 10.4 Line and Point Antialiasing178
- 10.5 Antialiasing with Textures180
- 10.6 Polygon Antialiasing181
- 10.7 Temporal Antialiasing182
- 10.7.1 Motion Blur183
- 10.8 Summary184
- Chapter 11 Compositing, Blending, and Transparency185
- 11.1 Combining Two Images185
- 11.1.1 Compositing186
- 11.1.2 Compositing Multiple Images187
- 11.1.3 Alpha Division190
- 11.2 Other Compositing Operators190
- 11.3 Keying and Matting192
- 11.4 Blending Artifacts192
- 11.4.1 Arithmetic Errors192
- 11.4.2 Blending with the Accumulation Buffer193
- 11.4.3 Approximation Errors193
- 11.4.4 Gamma Correction Errors193
- 11.5 Compositing Images with Depth194
- 11.6 Other Blending Operations195
- 11.7 Dissolves196
- 11.8 Transparency199
- 11.9 Alpha-Blended Transparency200
- 11.9.1 Dynamic Object Transparency202
- 11.9.2 Transparency Mapping203
- 11.9.3 Transparency Sorting204
- 11.9.4 Depth Peeling205
- 11.10 Screen-Door Transparency205
- 11.10.1 Multisample Transparency207
- 11.11 Summary208
- Chapter 12 Image Processing Techniques211
- 12.1 OpenGL Imaging Support211
- 12.2 Image Storage212
- 12.3 Point Operations213
- 12.3.1 Color Adjustment213
- 12.3.2 Interpolation and Extrapolation213
- 12.3.3 Scale and Bias215
- 12.3.4 Thresholding215
- 12.3.5 Conversion to Luminance216
- 12.3.6 Manipulating Saturation216
- 12.3.7 Rotating Hue218
- 12.3.8 Color Space Conversion219
- 12.4 Region-based Operations223
- 12.4.1 Contrast Stretching224
- 12.4.2 Histogram Equalization224
- 12.5 Reduction Operations225
- 12.6 Convolution227
- 12.6.1 Separable Filters227
- 12.6.2 Convolutions Using the Accumulation Buffer228
- 12.6.3 Convolution Using Extensions230
- 12.6.4 Useful Convolution Filters230
- 12.6.5 Correlation and Feature Detection233
- 12.7 Geometric Operations235
- 12.7.1 Pixel Zoom235
- 12.7.2 Scaling Using Texture Mapping236
- 12.7.3 Rotation Using Texture Mapping237
- 12.7.4 Distortion Correction237
- 12.8 Image-Based Depth of Field238
- 12.9 High-Dynamic Range Imaging241
- 12.9.1 Dynamic Range241
- 12.9.2 Tone Mapping242
- 12.9.3 Modeling Adaptation245
- 12.10 Summary245
- Chapter 13 Basic Transform Techniques247
- 13.1 Computing Inverse Transforms Efficiently247
- 13.2 Stereo Viewing249
- 13.3 Depth of Field252
- 13.4 Image Tiling254
- 13.5 Billboarding Geometry257
- 13.6 Texture Coordinate vs. Geometric Transformations261
- 13.6.1 Direct Vertex to Texture Coordinate Mapping263
- 13.6.2 Overlaying an Entire Scene with a Texture263
- 13.6.3 Overlaying a Scene with an Independent Texture Projection264
- 13.7 Interpolating Vertex Components through a Perspective Transformation265
- 13.7.1 Transforming Vertices in the Application265
- 13.7.2 Interpolating Vertex Components266
- 13.7.3 Computing LOD267
- 13.8 Summary268
- Chapter 14 Texture Mapping Techniques269
- 14.1 Loading Texture Images into a Framebuffer270
- 14.2 Optimizing Texture Coordinate Assignment270
- 14.3 3D Textures271
- 14.4 Texture Mosaics274
- 14.5 Texture Tiling277
- 14.6 Texture Paging279
- 14.6.1 Texture Subimage Loading282
- 14.6.2 Paging Images in System Memory285
- 14.6.3 Hardware Support for Texture Paging286
- 14.7 Prefiltered Textures287
- 14.7.1 Computing Texel Aspect Ratios288
- 14.8 Dual-Paraboloid Environment Mapping291
- 14.8.1 The Mathematics of Dual-Paraboloid Maps291
- 14.8.2 Using Dual-Paraboloid Maps294
- 14.8.3 OpenGL Dual-Paraboloid Support296
- 14.9 Texture Projection296
- 14.10 Texture Color Coding and Contouring298
- 14.11 2D Image Warping300
- 14.12 Texture Animation302
- 14.13 Detail Textures306
- 14.13.1 Signed Intensity Detail Textures309
- 14.13.2 Creating Detail Textures311
- 14.14 Texture Sharpening312
- 14.15 Mipmap Generation313
- 14.16 Texture Map Limits315
- 14.17 Summary316
- Chapter 15 Lighting Techniques317
- 15.1 Limitations in Vertex Lighting317
- 15.1.1 Static and Adaptive Tessellation319
- 15.1.2 Local Light and Spotlight Attenuation320
- 15.2 Fragment Lighting Using Texture Mapping321
- 15.3 Spotlight Effects Using Projective Textures322
- 15.4 Specular Lighting Using Environment Maps325
- 15.4.1 Multitexture326
- 15.5 Light Maps327
- 15.5.1 2D Texture Light Maps327
- 15.5.2 3D Texture Light Maps330
- 15.6 BRDF-based Lighting332
- 15.7 Reflectance Maps332
- 15.7.1 Gloss Maps332
- 15.7.2 Emission Maps334
- 15.8 Per-fragment Lighting Computations334
- 15.9 Other Lighting Models335
- 15.9.1 Fresnel Reflection335
- 15.9.2 Gaussian Reflection336
- 15.9.3 Anisotropic Lighting337
- 15.9.4 Oren-Nayar Model340
- 15.9.5 Cook-Torrance Model342
- 15.10 Bump Mapping with Textures343
- 15.10.1 Approximating Bump Mapping Using Texture345
- 15.10.2 Tangent Space346
- 15.10.3 Forward Differencing347
- 15.10.4 Limitations351
- 15.11 Normal Maps352
- 15.11.1 Vector Normalization352
- 15.12 Bump-mapped Reflections353
- 15.13 High Dynamic Range Lighting354
- 15.13.1 Bloom and Glare Effects354
- 15.14 Global Illumination355
- 15.14.1 Virtual Light Technique355
- 15.14.2 Combining OpenGL Lighting with Radiosity356
- 15.14.3 Ambient Occlusion357
- 15.15 Summary359
- Part III Advanced Techniques361
- Chapter 16 CAD and Modeling Techniques363
- 16.1 Picking and Highlighting363
- 16.1.1 OpenGL Selection364
- 16.1.2 Object Tagging in the Color Buffer365
- 16.1.3 Proxy Geometry366
- 16.1.4 Mapping from Window to Object Coordinates367
- 16.1.5 Other Picking Methods367
- 16.1.6 Highlighting367
- 16.1.7 XOR Highlighting368
- 16.1.8 Foreground Object Manipulation369
- 16.2 Culling Techniques369
- 16.3 Occlusion Culling370
- 16.3.1 Choosing Occluders371
- 16.3.2 Building the Occlusion Map371
- 16.3.3 Building the Depth Estimation Buffer372
- 16.3.4 Occlusion Testing372
- 16.3.5 Other Occlusion Testing Methods373
- 16.4 Geometric Level of Detail373
- 16.4.1 Changing Detail374
- 16.4.2 Transition Techniques375
- 16.5 Visualizing Surface Orientation377
- 16.6 Visualizing Surface Curvature379
- 16.7 Line Rendering Techniques380
- 16.7.1 Wireframe Models381
- 16.7.2 Hidden Lines382
- 16.7.3 Polygon Offset384
- 16.7.4 Depth Range384
- 16.7.5 Haloed Lines385
- 16.7.6 Silhouette Edges386
- 16.7.7 Preventing Antialiasing Artifacts389
- 16.7.8 End Caps on Wide Lines390
- 16.8 Coplanar Polygons and Decaling390
- 16.9 Capping Clipped Solids392
- 16.10 Constructive Solid Geometry393
- Chapter 17 Scene Realism403
- 17.1 Reflections404
- 17.1.1 Object vs. Image Techniques404
- 17.1.2 Planar Reflectors407
- 17.1.3 Curved Reflectors411
- 17.1.4 Interreflections419
- 17.1.5 Imperfect Reflectors422
- 17.2 Refraction424
- 17.2.1 Refraction Equation424
- 17.2.2 Planar Refraction426
- 17.2.3 Texture Mapped Refraction428
- 17.2.4 Environment Mapped Refraction429
- 17.2.5 Modeling Multiple Refraction Boundaries430
- 17.2.6 Clipping Refracted Objects431
- 17.3 Creating Environment Maps432
- 17.3.1 Creating Environment Maps with Ray Casting433
- 17.3.2 Creating Environment Maps with Texture Warping434
- 17.3.3 Cube Map Textures437
- 17.3.4 Sphere Map Textures440
- 17.3.5 Dual-paraboloid Maps443
- 17.3.6 Updating Environment Maps Dynamically448
- 17.4 Shadows449
- 17.4.1 Projective Shadows450
- 17.4.2 Shadow Volumes452
- 17.4.3 Shadow Maps459
- 17.4.4 Creating Soft Shadows463
- 17.5 Summary465
- Chapter 18 Natural Detail467
- 18.1 Particle Systems467
- 18.1.1 Representing Particles469
- 18.1.2 Number of Particles473
- 18.1.3 Modeling Particle Interactions473
- 18.1.4 Updating and Rendering Particles475
- 18.1.5 Applications478
- 18.2 Dynamic Meshes484
- 18.3 Procedural Texture Generation487
- 18.3.1 Filtered Noise Functions487
- 18.3.2 Generating Noise Functions489
- 18.3.3 Filtering Using Texture Convolution490
- 18.3.4 Optimizing the Convolution Process492
- 18.3.5 Spectral Synthesis495
- 18.3.6 Turbulence496
- 18.3.7 Random Image Warping498
- 18.3.8 Generating 3D Noise498
- 18.4 Summary500
- Chapter 19 Illustration and Artistic Techniques501
- 19.1 Projections for Illustration501
- 19.1.1 Axonometric Projection502
- 19.1.2 Oblique Projection503
- 19.2 Nonphotorealistic Lighting Models505
- 19.2.1 Matte Surfaces505
- 19.2.2 Metallic Surfaces506
- 19.3 Edge Lines507
- 19.4 Cutaway Views508
- 19.4.1 Surface Texture510
- 19.5 Depth Cuing511
- 19.6 Patterns and Hatching512
- 19.6.1 Cross Hatching and 3D Halftones513
- 19.6.2 Halftoning515
- 19.7 2D Drawing Techniques516
- 19.7.1 Accuracy in 2D Drawing516
- 19.7.2 Line Joins517
- 19.7.3 2D Trim Curves518
- 19.8 Text Rendering520
- 19.8.1 Image-based Text520
- 19.8.2 Geometry-based Text523
- 19.9 Drawing and Painting525
- 19.9.1 Undo and Resolution Independence527
- 19.9.2 Painting in 3D527
- 19.9.3 Painting on Images529
- 19.10 Summary530
- Chapter 20 Scientific Visualization531
- 20.1 Mapping Numbers to Pictures531
- 20.2 Visual Cues and Perception531
- 20.3 Data Characterization532
- 20.4 Point Data Visualization534
- 20.4.1 Scatter Plots534
- 20.4.2 Iconographic Display535
- 20.4.3 Andrews Plots536
- 20.4.4 Histograms and Charts537
- 20.5 Scalar Field Visualization538
- 20.5.1 Line Graphs538
- 20.5.2 Contour Lines539
- 20.5.3 Annotating Metrics539
- 20.5.4 Image Display540
- 20.5.5 Surface Display543
- 20.5.6 Isosurfaces545
- 20.5.7 Volume Slicing546
- 20.5.8 Volume Rendering547
- 20.5.9 Texture Slicing549
- 20.5.10 Splatting556
- 20.5.11 Creating Volume Data559
- 20.6 Vector Field Visualization560
- 20.6.1 Icons561
- 20.6.2 Particle Tracing561
- 20.6.3 Stream Lines563
- 20.6.4 Illuminated Stream Lines563
- 20.6.5 Line Integral Convolution564
- 20.7 Tensor Field Visualization568
- 20.7.1 Hyperstreamlines569
- 20.8 Summary570
- Chapter 21 Structuring Applications for Performance571
- 21.1 Structuring Graphics Processing571
- 21.1.1 Scene Graphs572
- 21.1.2 Vertex Updates575
- 21.1.3 Texture Updates576
- 21.2 Managing Frame Time577
- 21.2.1 Input Phase579
- 21.2.2 Rendering Phase579
- 21.2.3 Computation Phase580
- 21.2.4 The Safety Margin581
- 21.3 Application Performance Tuning581
- 21.3.1 Locating Bottlenecks581
- 21.3.2 Finding Application Bottlenecks583
- 21.3.3 Measuring Performance587
- 21.3.4 Measuring Depth Complexity589
- 21.3.5 Pipeline Interleaving591
- 21.4 Summary592
- Appendix A Using OpenGL Extensions593
- A.1 How OpenGL Extensions are Documented593
- A.2 Finding OpenGL Extension Specifications594
- A.3 How to Read an OpenGL Extension Specification594
- A.3.1 ARB Extensions598
- A.4 Portable Use of OpenGL Extensions599
- A.5 Using Extension Function Pointers602
- Appendix B Equations605
- B.1 3D Vectors605
- B.1.1 Spherical Coordinates606
- B.1.2 Linear Interpolation of 3D Vectors606
- B.1.3 Barycentric Coordinates607
- B.2 Projection Matrices607
- B.2.1 Orthographic Projection607
- B.2.2 Perspective Projection607
- B.2.3 Perspective z-Coordinate Transformations608
- B.2.4 Alternative Perspective Projection608
- B.3 Viewing Transforms608
- B.4 Modeling Transforms609
- B.4.1 Scaling609
- B.4.2 Translation609
- B.4.3 Rotation609
- B.5 Parallel and Perpendicular Vectors610
- B.6 Reflection Vector610
- B.7 Lighting Equations610
- B.8 Function Approximations612
- B.8.1 Taylor Series Expansion612
- B.8.2 Newton-Raphson Method612
- B.8.3 Hypotenuse613
- Bibliography615
- Subject Index629
Book details
- Vendor Elsevier S & T
- SKU 9781558606593
- ISBN-13 9780080475721
- Author McReynolds, Tom; Blythe, David
- Category Computers
- Subject Computer Graphics
Do you have questions about this book?
Today truly useful and interactive graphics are available on affordable computers. While hardware progress has been impressive, widespread gains in software expertise have come more slowly. Information about advanced techniques—beyond those learned in introductory computer graphics texts—is not as easy to come by as inexpensive hardware.
This book brings the graphics programmer beyond the basics and introduces them to advanced knowledge that is hard to obtain outside of an intensive CG work environment. The book is about graphics techniques—those that don’t require esoteric hardware or custom graphics libraries—that are written in a comprehensive style and do useful things. It covers graphics that are not covered well in your old graphics textbook. But it also goes further, teaching you how to apply those techniques in real world applications, filling real world needs.
* Emphasizes the algorithmic side of computer graphics, with a practical application focus, and provides usable techniques for real world problems.
* Serves as an introduction to the techniques that are hard to obtain outside of an intensive computer graphics work environment.
* Sophisticated and novel programming techniques are implemented in C using the OpenGL library, including coverage of color and lighting; texture mapping; blending and compositing; antialiasing; image processing; special effects; natural phenomena; artistic and non-photorealistic techniques, and many others.
* Code fragments are used in the book, and full blown example programs for virtually every algorithm are available at www.mkp.com/opengl
This book brings the graphics programmer beyond the basics and introduces them to advanced knowledge that is hard to obtain outside of an intensive CG work environment. The book is about graphics techniques—those that don’t require esoteric hardware or custom graphics libraries—that are written in a comprehensive style and do useful things. It covers graphics that are not covered well in your old graphics textbook. But it also goes further, teaching you how to apply those techniques in real world applications, filling real world needs.
* Emphasizes the algorithmic side of computer graphics, with a practical application focus, and provides usable techniques for real world problems.
* Serves as an introduction to the techniques that are hard to obtain outside of an intensive computer graphics work environment.
* Sophisticated and novel programming techniques are implemented in C using the OpenGL library, including coverage of color and lighting; texture mapping; blending and compositing; antialiasing; image processing; special effects; natural phenomena; artistic and non-photorealistic techniques, and many others.
* Code fragments are used in the book, and full blown example programs for virtually every algorithm are available at www.mkp.com/opengl
Instant delivery by email
Your access email arrives within minutes of checkout, with a sign-in link for each book — no shipping, no waiting.
Read on any device
Books open in VitalSource Bookshelf on your phone, tablet, or computer, online or offline. Your library is always available at aafaq.vitalsource.com — just log in with the email you used at checkout.
Lost the email?
Resend it to yourself in seconds from My eBook orders, or email cs@aafaqeducation.com and we'll help.