Description

For years, graphics programmers have relied on a single authoritative book to master OpenGL programming: The OpenGL Programming Guide, also known as "the Red Book." With the release of Version 3.0, developers must master a radically new and more powerful version of OpenGL: one that breaks binary and source code compatibility and requires fundamentally different coding techniques. For graphics programmers, it's almost like starting over: the new interface largely invalidates some fifteen years of accumulated knowledge and techniques.

Table of Contents

Figures xxi

Tables xxv

Examples xxix

About This Guide xxxv

Acknowledgments xlv

Chapter 1: Introduction to OpenGL 1

What Is OpenGL? 2

A Smidgen of OpenGL Code 5

OpenGL Command Syntax 7

OpenGL as a State Machine 9

OpenGL Rendering Pipeline 10

OpenGL-Related Libraries 14

Animation 22

OpenGL and Its Deprecation Mechanism 27

Chapter 2: State Management and Drawing Geometric Objects 31

A Drawing Survival Kit 34

Describing Points, Lines, and Polygons 42

Basic State Management 53

Displaying Points, Lines, and Polygons 55

Normal Vectors 68

Vertex Arrays 70

Buffer Objects 91

Vertex-Array Objects 104

Attribute Groups 110

Some Hints for Building Polygonal Models of Surfaces 113

Chapter 3: Viewing 123

Overview: The Camera Analogy 126

Viewing and Modeling Transformations 137

Projection Transformations 152

Viewport Transformation 158

Troubleshooting Transformations 162

Manipulating the Matrix Stacks 164

Additional Clipping Planes 168

Examples of Composing Several Transformations 172

Reversing or Mimicking Transformations 179

Chapter 4: Color 185

Color Perception 186

Computer Color 188

RGBA versus Color-Index Mode 190

Specifying a Color and a Shading Model 196

Chapter 5: Lighting 203

A Hidden-Surface Removal Survival Kit 205

Real-World and OpenGL Lighting 207

A Simple Example: Rendering a Lit Sphere 210

Creating Light Sources 214

Selecting a Lighting Model 227

Defining Material Properties 231

The Mathematics of Lighting 240

Lighting in Color-Index Mode 246

Chapter 6: Blending, Antialiasing, Fog, and Polygon Offset 249

Blending 251

Antialiasing 267

Fog 280

Point Parameters 291

Polygon Offset 293

Chapter 7: Display Lists 297

Why Use Display Lists? 298

An Example of Using a Display List 299

Display List Design Philosophy 302

Creating and Executing a Display List 305

Executing Multiple Display Lists 312

Managing State Variables with Display Lists 318

Chapter 8: Drawing Pixels, Bitmaps, Fonts, and Images 321

Bitmaps and Fonts 323

Images 333

Imaging Pipeline 343

Reading and Drawing Pixel Rectangles 359

Using Buffer Objects with Pixel Rectangle Data 362

Tips for Improving Pixel Drawing Rates 366

Imaging Subset 367

Chapter 9: Texture Mapping 389

An Overview and an Example 395

Specifying the Texture 400

Filtering 434

Texture Objects 437

Texture Functions 444

Assigning Texture Coordinates 448

Automatic Texture-Coordinate Generation 457

Multitexturing 467

Texture Combiner Functions 472

Applying Secondary Color after Texturing 478

Point Sprites 479

The Texture Matrix Stack 481

Depth Textures 483

Chapter 10: The Framebuffer 489

Buffers and Their Uses 492

Testing and Operating on Fragments 501

The Accumulation Buffer 518

Framebuffer Objects 526

Chapter 11: Tessellators and Quadrics 541

Polygon Tessellation 542

Quadrics: Rendering Spheres, Cylinders, and Disks 559

Chapter 12: Evaluators and NURBS 569

Prerequisites 571

Evaluators 572

The GLU NURBS Interface 586

Chapter 13: Selection and Feedback 605

Selection 606

Feedback 627

Chapter 14: Now That You Know 635

Error Handling 637

Which Version Am I Using? 639

Extensions to the Standard 641

Cheesy Translucency 644

An Easy Fade Effect 645

Object Selection Using the Back Buffer 646

Cheap Image Transformation 647

Displaying Layers 649

Antialiased Characters 650

Drawing Round Points 653

Interpolating Images 653

Making Decals 653

Drawing Filled, Concave Polygons Using the Stencil Buffer 655

Finding Interference Regions 656

Shadows 658

Hidden-Line Removal 659

Texture Mapping Applications 661

Drawing Depth-Buffered Images 662

Dirichlet Domains 662

Life in the Stencil Buffer 664

Alternative Uses for glDrawPixels() and glCopyPixels() 665

Chapter 15: The OpenGL Shading Language 667

The OpenGL Graphics Pipeline and Programmable Shading 668

Using GLSL Shaders 672

The OpenGL Shading Language 681

Creating Shaders with GLSL 681

Uniform Blocks 692

Accessing Texture Maps in Shaders 707

Shader Preprocessor 711

Extension Processing in Shaders 714

Vertex Shader Specifics 715

Transform Feedback 722

Fragment Shader Specifics 727

Appendix A: Basics of GLUT: The OpenGL Utility Toolkit 731

Initializing and Creating a Window 732

Handling Window and Input Events 733

Loading the Color Map 735

Initializing and Drawing Three-Dimensional Objects 735

Managing a Background Process 736

Running the Program 737

Appendix B: State Variables 739

The Query Commands 740

OpenGL State Variables 743

Appendix C: Homogeneous Coordinates and Transformation Matrices 803

Homogeneous Coordinates 804

Transformation Matrices 805

Appendix D: OpenGL and Window Systems 809

Accessing New OpenGL Functions 810

GLX: OpenGL Extension for the X Window System 812

AGL: OpenGL Extensions for the Apple Macintosh 819

WGL: OpenGL Extension for Microsoft Windows 95/98/NT/ME/2000/XP 824

Glossary 831

Index 857

The following appendices are available online at http://www.opengl-redbook.com/appendices/.