Figure 1.1 Simplified graphics pipeline
Figure 1.2 Future Crew’s 1992 demo—Unreal
Figure 2.1 The output of our first OpenGL application
Figure 2.2 Rendering our first point
Figure 2.3 Making our first point bigger
Figure 2.4 Our very first OpenGL triangle
Figure 3.1 Our first tessellated triangle
Figure 3.2 Tessellated triangle after adding a geometry shader
Figure 3.3 Clockwise (left) and counterclockwise (right) winding order
Figure 3.4 Result of Listing 3.10
Figure 3.5 Result of Listing 3.12
Figure 3.6 Realtech VR’s OpenGL Extensions Viewer
Figure 4.1 A point in space is both a vertex and a vector
Figure 4.2 The dot product: cosine of the angle between two vectors
Figure 4.3 A cross product returns a vector perpendicular to its parameters
Figure 4.4 Reflection and refraction
Figure 4.5 A 4 × 4 matrix representing rotation and translation
Figure 4.7 Two perspectives of view coordinates
Figure 4.8 The modeling transformations
Figure 4.9 A cube translated ten units in the positive y direction
Figure 4.10 A cube rotated about an arbitrary axis
Figure 4.11 A non-uniform scaling of a cube
Figure 4.12 A side-by-side example of an orthographic versus perspective projection
Figure 4.13 Finding a point on a line
Figure 4.14 A simple Bézier curve
Figure 4.15 A cubic Bézier curve
Figure 4.16 A cubic Bézier spline
Figure 5.1 Binding buffers and uniform blocks to binding points
Figure 5.2 A few frames from the spinning cube application
Figure 5.4 A simple textured triangle
Figure 5.5 A full-screen texture loaded from a .KTX
file
Figure 5.6 An object wrapped in simple textures
Figure 5.7 Texture filtering—nearest neighbor (left) and linear (right)
Figure 5.8 A series of mipmapped images
Figure 5.9 A tunnel rendered with three textures and mipmapping
Figure 5.10 Example of texture coordinate wrapping modes
Figure 5.11 GL_MIRROR_CLAMP_TO_EDGE
in action
Figure 5.12 Output of the alien rain sample
Figure 5.13 Resolved per-fragment linked lists
Figure 6.1 Shape of a Hermite curve
Figure 7.1 Indices used in an indexed draw
Figure 7.2 Base vertex used in an indexed draw
Figure 7.3 Triangle strips (a) without primitive restart and (b) with primitive restart
Figure 7.4 First attempt at an instanced field of grass
Figure 7.5 Slightly perturbed blades of grass
Figure 7.6 Control over the length and orientation of our grass
Figure 7.7 The final field of grass
Figure 7.8 Result of instanced rendering
Figure 7.9 Result of asteroid rendering program
Figure 7.10 Relationship of transform feedback binding points
Figure 7.11 Connections of vertices in the spring mass system
Figure 7.12 Simulation of points connected by springs
Figure 7.13 Visualizing springs in the spring mass system
Figure 7.15 Clipping triangles
Figure 7.16 Clipping triangles using a guard band
Figure 7.17 Rendering with user clip distances
Figure 8.1 Schematic of OpenGL tessellation
Figure 8.2 Tessellation factors for quad tessellation
Figure 8.3 Quad tessellation example
Figure 8.4 Tessellation factors for triangle tessellation
Figure 8.5 Triangle tessellation example
Figure 8.6 Tessellation factors for isoline tessellation
Figure 8.7 Isoline tessellation example
Figure 8.8 Tessellated isoline spirals example
Figure 8.9 Triangle tessellated using point mode
Figure 8.10 Tessellation using different subdivision modes
Figure 8.11 Displacement map used in terrain example
Figure 8.12 Terrain rendered using tessellation
Figure 8.13 Tessellated terrain in wireframe
Figure 8.14 Final rendering of a cubic Bézier patch
Figure 8.15 A Bézier patch and its control cage
Figure 8.16 Geometry culled from different viewpoints
Figure 8.17 Exploding a model using the geometry shader
Figure 8.18 Basic tessellation using the geometry shader
Figure 8.19 Displaying the normals of a model using a geometry shader
Figure 8.20 Lines produced using lines with adjacency primitives
Figure 8.21 Triangles produced using GL_TRIANGLES_ADJACENCY
Figure 8.22 Triangles produced using GL_TRIANGLE_STRIP_ADJACENCY
Figure 8.23 Ordering of vertices for GL_TRIANGLE_STRIP_ADJACENCY
Figure 8.24 Rendering a quad using a pair of triangles
Figure 8.25 Parameterization of a quad
Figure 8.26 Quad rendered using a geometry shader
Figure 8.27 Result of rendering to multiple viewports
Figure 9.1 Contrasting perspective-correct and linear interpolation
Figure 9.2 Rendering with four different scissor rectangles
Figure 9.3 Effect of depth clamping at the near plane
Figure 9.4 A clipped object with and without depth clamping
Figure 9.5 All possible combinations of blending functions
Figure 9.6 Result of rendering into a texture
Figure 9.7 Result of the layered rendering example
Figure 9.8 Result of stereo rendering to a stereo display
Figure 9.9 Antialiasing using line smoothing
Figure 9.10 Antialiasing using polygon smoothing
Figure 9.11 Antialiasing sample positions
Figure 9.12 No antialising (left) and eight-sample antialiasing (center and right)
Figure 9.13 Antialiasing of high-frequency shader output
Figure 9.14 Partially covered multi-sampled pixels
Figure 9.15 Different views of an HDR image
Figure 9.16 Histogram of levels for treelights.ktx
Figure 9.17 Naïve tone mapping by clamping
Figure 9.18 Transfer curve for adaptive tone mapping
Figure 9.19 Result of adaptive tone-mapping program
Figure 9.20 The effect of light bloom on an image
Figure 9.21 Original and thresholded output for bloom example
Figure 9.22 Blurred thresholded bloom colors
Figure 9.23 Result of the bloom program
Figure 9.24 Gamma curves for sRGB and simple powers
Figure 9.25 A particle effect in the flurry screen saver
Figure 9.26 The star texture map
Figure 9.27 Flying through space with point sprites
Figure 9.28 Two potential orientations of textures on a point sprite
Figure 9.29 Analytically generated point sprite shapes
Figure 10.1 Global and local compute work group dimensions
Figure 10.2 Effect of race conditions in a compute shader
Figure 10.3 Effect of barrier()
on race conditions
Figure 10.4 Sample input and output of a prefix sum operation
Figure 10.5 Breaking a prefix sum into smaller chunks
Figure 10.7 Computing the sum of a rectangle in a summed area table
Figure 10.8 Variable filtering applied to an image
Figure 10.9 Depth of field in a photograph
Figure 10.10 Applying depth of field to an image
Figure 10.11 Effects achievable with depth of field
Figure 10.12 Stages in the iterative flocking algorithm
Figure 10.13 Output of compute shader flocking program
Figure 11.1 Output of the bindlesstex
example application
Figure 11.2 Output of the sparsetexture
example application
Figure 11.3 Representation of image data as endpoints of a line
Figure 11.4 Result of using RGTC texture compression on a distance field
Figure 11.5 Linear interpolation under high magnification
Figure 11.6 Graph showing linear interpolation
Figure 11.7 Graph showing smooth interpolation
Figure 11.8 Result of smooth interpolation
Figure 13.1 Vectors used in Phong lighting
Figure 13.2 Per-vertex lighting (Gouraud shading)
Figure 13.3 Per-fragment lighting (Phong shading)
Figure 13.4 Varying specular parameters of a material
Figure 13.5 Phong lighting (left) versus Blinn-Phong lighting (right)
Figure 13.6 Rim lighting vectors
Figure 13.7 Result of rim lighting example
Figure 13.8 Example normal map
Figure 13.9 Result of normal mapping example
Figure 13.10 A selection of spherical environment maps
Figure 13.11 Result of rendering with spherical environment mapping
Figure 13.12 Example equirectangular environment map
Figure 13.13 Rendering result of equirectangular environment map
Figure 13.14 The layout of six cube faces in the cubemap sample program
Figure 13.15 Cubemap environment rendering with a skybox
Figure 13.16 Pre-filtered environment maps and gloss map
Figure 13.17 Result of per-pixel gloss example
Figure 13.18 Depth as seen from a light
Figure 13.19 Results of rendering with shadow maps
Figure 13.20 Graphs of exponential decay
Figure 13.21 Applying fog to a tessellated landscape
Figure 13.22 A one-dimensional color lookup table
Figure 13.23 A toon-shaded torus
Figure 13.24 Visualizing components of a G-buffer
Figure 13.25 Final rendering using deferred shading
Figure 13.26 Deferred shading with (left) and without (right) normal maps
Figure 13.27 Bumpy surface occluding points
Figure 13.28 Selection of random vector in an oriented hemisphere
Figure 13.29 Effect of increasing direction count on ambient occlusion
Figure 13.30 Effect of introducing noise in ambient occlusion
Figure 13.31 Ambient occlusion applied to a rendered scene
Figure 13.32 A few frames from the Julia set animation
Figure 13.33 Simplified 2D illustration of ray tracing
Figure 13.34 Our first ray-traced sphere
Figure 13.35 Our first lit ray-traced sphere
Figure 13.36 Implementing a stack using framebuffer objects
Figure 13.37 Ray-traced spheres with increasing ray bounces
Figure 13.38 Adding a ray-traced plane
Figure 13.39 Ray-traced spheres in a box
Figure 13.40 Low-resolution texture used for a logo
Figure 13.41 High-resolution texture used for a logo
Figure 13.42 Distance field of the OpenGL logo
Figure 13.43 Distance fields for a line
Figure 13.44 Output of distance field rendering application
Figure 13.45 Distance field for English characters
Figure 13.46 Distance field of a Chinese character
Figure 13.47 Chinese text rendered using distance fields
Figure 13.48 Two textures to be mixed using a distance field
Figure 13.49 Landscape map texture and distance field
Figure 13.50 Result of landscape texturing with distance fields
Figure 13.51 Output of font rendering demo
Figure 14.1 Output of the OpenMP particle simulator
Figure 14.2 CPU utilization of the ompparticles
application
Figure 14.3 Indirect material parameters
Figure 14.4 Output of the cullindirect
application
Figure 14.5 Synchronizing access to a mapped buffer
Figure 14.6 Persistent mapped Julia fractal
Figure 14.8 Vsync seen in GPUView
Figure 14.9 A packet dialog in GPUView
Figure 14.10 GPU PerfStudio running an example application
Figure 14.11 GPU PerfStudio frame debugger
Figure 14.12 GPU PerfStudio HUD control window
Figure 14.13 GPU PerfStudio overlaying information
Figure 14.14 GPU PerfStudio showing AMD performance counters
Figure 14.15 GPUView showing the effect of glReadPixels() into system memory
Figure 14.16 GPUView showing the effect of glReadPixels() into a buffer