OpenGL Shading Language

Randi J. Rost

  • 出版商: Addison Wesley
  • 出版日期: 2004-02-12
  • 售價: $1,800
  • 貴賓價: 9.8$1,764
  • 語言: 英文
  • 頁數: 608
  • 裝訂: Paperback
  • ISBN: 0321197895
  • ISBN-13: 9780321197894
  • 相關分類: OpenGL
  • 已絕版

買這商品的人也買了...

商品描述

"The author has done an excellent job at setting the stage for shader development, what the purpose is, how to do it, and how it all fits together."
—Jeffery GalinovskyStrategic Software Program Manager, Intel Corporation

The OpenGL® Shading Language, a high-level procedural shading language for OpenGL®, is the most important new development in graphics programming to emerge in years. OpenGL is the leading cross-platform 3D-graphics API, and the OpenGL Shading Language allows developers to take total control over the most important stages of the graphics-processing pipeline.

OpenGL® Shading Language is the experienced application programmer's guide to writing shaders. Part reference, part tutorial, this book thoroughly explains the shift from fixed-functionality graphics hardware to the new era of programmable graphics hardware and the additions to the OpenGL API that support this programmability. With OpenGL and shaders written in the OpenGL Shading Language, applications can perform better, achieving stunning graphics effects by utilizing the capabilities of both the visual processing unit and the central processing unit.

In this book, you will find a detailed introduction to the OpenGL Shading Language and the new OpenGL function calls that support it. The text begins by describing the syntax and semantics of this high-level programming language. Once this foundation has been established, the book explores the creation and manipulation of shaders using new OpenGL function calls.

OpenGL® Shading Language features extensive examples of shaders and their underlying algorithms, including

  • Procedural texturing
  • Noise
  • Particle systems
  • Hatching
  • Analytic antialiasing
  • Image processing

The color plate section illustrates the power and sophistication of the OpenGL Shading Language. The API Function Reference at the end of the book is an excellent quick reference to the API entry points that support the OpenGL Shading Language. An enhanced online index allows readers to quickly and easily search the entire text for specific topics

Table of Contents:

Foreword.

Preface.

About the Author.

About the Contributors.

Acknowledgments.

1. Review of OpenGL Basics.

OpenGL History.

Evolving OpenGL.

Execution Model.

The Frame Buffer.

State.

Processing Pipeline.

Drawing Geometry.

Specifying Geometry.

Per-Vertex Operations.

Primitive Assembly.

Primitive Processing.

Rasterization.

Fragment Processing.

Per-Fragment Operations.

Frame Buffer Operations.

Drawing Images.

Pixel Unpacking.

Pixel Transfer.

Rasterization and Back-End Processing.

Read Control.

Coordinate Transforms.

Texturing.

Summary.

Further Information.

2. Basics.

Introduction to the OpenGL Shading Language.

Why Write Shaders?

OpenGL Programmable Processors.

Vertex Processor.

Fragment Processor.

Language Overview.

Language Design Considerations.

C Basis.

Additions to C.

Additions from C++.

C Features Not Supported.

Other Differences.

System Overview.

Driver Model.

OpenGL Shading Language Compiler/Linker

OpenGL API Extensions.

Key Benefits.

Summary.

Further Information.


3. Language Definition.

Example Shader Pair.

Data Types.

Scalars.

Vectors.

Matrices.

Samplers.

Structures.

Arrays.

Void.

Declarations and Scope.

Type Matching and Promotion.

Initializers and Constructors.

Type Conversions.

Qualifiers and Interface to a Shader.

Attribute Qualifiers.

Uniform Qualifiers.

Varying Qualifiers.

Constant Qualifiers.

Absent Qualifier.

Flow Control.

Functions.

Calling Conventions.

Built-in Functions.

Operations.

Indexing.

Swizzling.

Component-wise Operation.

Preprocessor.

Preprocessor Expressions.

Error Handling.

Summary.

Further Information.

4. The OpenGL Programmable Pipeline.

The Vertex Processor.

Vertex Attributes.

Uniform Variables.

Special Output Variables.

Built-in Varying Variables.

User-Defined Varying Variables.

The Fragment Processor.

Varying Variables.

Uniform Variables.

Special Input Variables.

Special Output Variables.

Built-in Uniform Variables.

Built-in Constants.

Interaction with OpenGL Fixed Functionality.

Two-Sided Color Mode.

Point Size Mode.

Clipping.

Raster Position.

Position Invariance.

Texturing.

Summary.

Further Information.


5. Built-in Functions.

Angle and Trigonometry Functions.

Exponential Functions.

Common Functions.

Geometric Functions.

Matrix Functions.

Vector Relational Functions.

Texture Access Functions.

Fragment Processing Functions.

Noise Functions.

Summary.

Further Information.

6. Simple Shading Example.

Brick Shader Overview.

Vertex Shader.

Fragment Shader.

Observations.

Summary.

Further Information.

7. OpenGL Shading Language API.

Creating Shader Objects.

Compiling Shader Objects.

Linking and Using Shaders.

Cleaning Up.

Query Functions.

Specifying Vertex Attributes.

Specifying Uniform Variables.

Samplers.

Development Aids.

Implementation-Dependent API Values.

Application Code for Brick Shaders.

Summary.

Further Information.

8. Shader Development.

General Principles.

Understand the Problem.

Add Complexity Progressively.

Test and Iterate.

Strive for Simplicity.

Modularity.

Performance Considerations.

Consider Computational Frequency.

Analyze Your Algorithm.

Use the Built-in Functions.

Use Vectors.

Use Textures to Encode Complex Functions.

Review the Info Logs.

Shader Debugging.

Use the Vertex Shader Output.

Use the Fragment Shader Output.

Use Simple Geometry.

Shader Development Tools.

RenderMonkey.

OpenGL Shading Language Compiler Front End.

Summary.

Further Information.

9. Traditional Shaders.

Transformation.

Light Sources.

Directional Lights.

Point Lights.

Spotlights.

Material Properties and Lighting.

Two-Sided Lighting.

No Lighting.

Fog.

Texture Coordinate Generation.

User Clipping.

Texture Application.

Summary.

Further Information.

10. Stored Texture Shaders.

Accessing Texture Maps from a Shader.

Simple Texturing Example.

Application Setup.

Vertex Shader.

Fragment Shader.

Multitexturing Example.

Application Setup.

Vertex Shader.

Fragment Shader.

Environment Mapping Example.

Application Setup.

Vertex Shader.

Fragment Shader.

Polynomial Texture Mapping with BRDF Data.

Application Setup.

Vertex Shader.

Fragment Shader.

Summary.

Further Information.

11. Procedural Texture Shaders.

Regular Patterns.

Stripes vertex shader.

Stripes Fragment Shader.

Toy Ball.

Application Setup.

Vertex Shader.

Fragment Shader.

Lattice.

Bump Mapping.

Application Setup.

Vertex Shader.

Fragment Shader.

Normal Maps.

Summary.

Further Information.

12. Noise.

Defining Noise.

2D Noise.

Higher Dimensions of Noise.

Using Noise in OpenGL Shaders.

Noise Textures.

Trade-offs.

A Simple Noise Shader.

Application Setup.

Vertex Shader.

Fragment Shader.

Turbulence.

Sun Surface Shader.

Marble.

Granite.

Wood.

Application Setup.

Fragment Shader.

Summary.

Further Information.

13. Animated Shaders.

On/Off.

Threshold.

Translation.

Key-Frame Interpolation.

Key-Frame Interpolation Vertex Shader.

Other Blending Effects.

Particle Systems.

Application Setup.

Confetti Cannon Vertex Shader.

Confetti Cannon Fragment Shader.

Further Enhancements.

Wobble.

Summary.

Further Information.

14. Antialiasing Procedural Textures.

Sources of Aliasing.

Avoiding Aliasing.

Increasing Resolution.

Antialiased Stripe Example.

Generating Stripes.

Analytic Prefiltering.

Adaptive Analytic Prefiltering.

Analytic Integration.

Antialiased Brick Fragment Shader.

Frequency Clamping.

Antialiased Checkerboard Fragment Shader.

Summary.

Further Information.

15. Non-Photorealistic Shaders.

Hatching Example.

Application Setup.

Vertex Shader.

Generating Hatching Strokes.

Obtaining Uniform Line Density.

Lighting.

Adding Character.

Hatching Fragment Shader.

Technical Illustration Example.

Application Setup.

Vertex Shader.

Fragment Shader.

Mandelbrot Example.

About the Mandelbrot Set.

Vertex Shader.

Fragment Shader.

Julia Sets.

Summary.

Further Information.

16. Shaders for Imaging.

Geometric Image Transforms.

Mathematical Mappings.

Lookup Table Operations.

Color Space Conversions.

Image Interpolation and Extrapolation.

Brightness.

Contrast.

Saturation.

Sharpness.

Blend Modes.

Normal.

Average.

Dissolve.

Behind.

Clear.

Darken.

Lighten.

Multiply.

Screen.

Color Burn.

Color Dodge.

Overlay.

Soft Light.

Hard Light.

Add.

Subtract.

Difference.

Inverse Difference.

Exclusion.

Opacity.

Convolution.

Smoothing.

Edge Detection.

Sharpening.

Summary.

Further Information.

17. Language Comparison.

Chronology of Shading Languages.

RenderMan.

OpenGL Shader (ISL).

HLSL.

Cg.

Summary.

Further Information.

Appendix A. Language Grammar.

Appendix B. API Function Reference.

glAttachObjectARB.

glBindAttribLocationARB.

glCompileShaderARB.

glCreateProgramObjectARB.

glCreateShaderObjectARB.

glDeleteObjectARB.

glDetachObjectARB.

glEnableVertexAttribArrayARB.

glGetActiveAttribARB.

glGetActiveUniformARB.

glGetAttachedObjectsARB.

glGetAttribLocationARB.

glGetHandleARB.

glGetInfoLogARB.

glGetObjectParameterARB.

glGetShaderSourceARB.

glGetUniformARB.

glGetUniformLocationARB.

glGetVertexAttribARB.

glGetVertexAttribPointervARB.

glLinkProgramARB.

glShaderSourceARB.

glUniformARB.

glUseProgramObjectARB.

glValidateProgramARB.

glVertexAttribARB.

glVertexAttribPointerARB.

Afterword.

Glossary.

Further Reading.

Index.