Figure 1.1 Image from our first OpenGL program: triangles.cpp
Figure 2.1 Shader-compilation command sequence
Figure 3.1 Vertex layout for a triangle strip
Figure 3.2 Vertex layout for a triangle fan
Figure 3.3 Packing of elements in a BGRA-packed vertex attribute
Figure 3.4 Packing of elements in a RGBA-packed vertex attribute
Figure 3.5 Simple example of drawing commands
Figure 3.6 Using primitive restart to break a triangle strip
Figure 3.7 Two triangle strips forming a cube
Figure 3.8 Result of rendering with instanced vertex attributes
Figure 3.9 Result of instanced rendering using gl_InstanceID
Figure 4.1 Region occupied by a pixel
Figure 4.2 Polygons and their depth slopes
Figure 4.3 Aliased and antialiased lines
Figure 5.1 Steps to configure and position the viewing frustum
Figure 5.2 Coordinate systems required by OpenGL
Figure 5.3 User coordinate systems unseen by OpenGL
Figure 5.5 Pipeline subset for user/shader part of transforming coordinates
Figure 5.6 One-dimensional homogeneous space
Figure 5.7 Translating by skewing
Figure 5.8 Translating an object 2.5 in the x direction
Figure 5.9 Scaling an object to three times its size
Figure 5.10 Scaling an object in place
Figure 5.13 Frustum projection
Figure 5.14 Orthographic projection
Figure 5.16 Transform feedback varyings packed in a single buffer
Figure 5.17 Transform feedback varyings packed in separate buffers
Figure 5.18 Transform feedback varyings packed into multiple buffers
Figure 5.19 Schematic of the particle system simulator
Figure 5.20 Result of the particle system simulator
Figure 6.1 Byte-swap effect on byte, short, and integer data
Figure 6.2 Subimage identified by *SKIP_ROWS, *SKIP_PIXELS, and *ROW_LENGTH parameters
Figure 6.3 *IMAGE_HEIGHT pixel storage mode
Figure 6.4 *SKIP_IMAGES pixel storage mode
Figure 6.5 Output of the simple textured quad example
Figure 6.6 Effect of different texture wrapping modes
Figure 6.7 Two textures used in the multitexture example
Figure 6.8 Output of the simple multitexture example
Figure 6.9 Output of the volume texture example
Figure 6.10 A sky box, shown as seen from the outside, from close up, and from the center
Figure 6.11 A golden environment mapped torus
Figure 6.12 A visible seam in a cube map
Figure 6.13 The effect of seamless cube-map filtering
Figure 6.14 Effect of texture minification and magnification
Figure 6.15 Resampling of a signal in one dimension
Figure 6.16 Bilinear resampling
Figure 6.17 A prefiltered mipmap pyramid
Figure 6.18 Effects of minification mipmap filters
Figure 6.19 Illustration of mipmaps using unrelated colors
Figure 6.20 Result of the simple textured point sprite example
Figure 6.21 Analytically calculated point sprites
Figure 6.22 Smooth edges of circular point sprites
Figure 6.23 Close-up of RGB color elements in an LCD panel
Figure 7.1 Elements of the classic lighting model
Figure 7.2 A sphere illuminated using the hemisphere lighting model
Figure 7.3 Analytic hemisphere lighting function
Figure 7.4 Lighting model comparison
Figure 7.8 Effects of diffuse and specular environment maps
Figure 7.9 Spherical harmonics lighting
Figure 7.11 Final rendering of shadow map
Figure 8.1 Procedurally striped torus
Figure 8.4 Visualizing the results of the half-space distance calculations
Figure 8.5 Intermediate results from “in” or “out” computation
Figure 8.6 Intermediate results from the toy ball shader
Figure 8.7 The lattice shader applied to the cow model
Figure 8.8 Inconsistently defined tangents leading to large lighting errors
Figure 8.9 Simple box and torus with procedural bump mapping
Figure 8.11 Aliasing artifacts caused by point sampling
Figure 8.13 Using the s texture coordinate to create stripes on a sphere
Figure 8.14 Antialiasing the stripe pattern
Figure 8.15 Visualizing the gradient
Figure 8.16 Effect of adaptive analytical antialiasing on striped teapots
Figure 8.17 The periodic step function
Figure 8.18 Periodic step function (pulse train) and its integral
Figure 8.19 Brick shader with and without antialiasing
Figure 8.20 Checkerboard pattern
Figure 8.21 A discrete 1D noise function
Figure 8.22 A continuous 1D noise function
Figure 8.23 Varying the frequency and the amplitude of the noise function
Figure 8.25 Basic 2D noise, at frequencies 4, 8, 16, and 32 (contrast enhanced)
Figure 8.26 Summed noise, at 1, 2, 3, and 4 octaves (contrast enhanced)
Figure 8.27 Teapots rendered with noise shaders
Figure 8.28 Absolute-value noise or “turbulence”
Figure 8.29 A bust of Beethoven rendered with the wood shader
Figure 9.2 Isoline tessellation
Figure 9.3 Triangle tessellation
Figure 9.4 Even and odd tessellation
Figure 9.5 The tessellated patches of the teapot
Figure 9.6 Tessellation cracking
Figure 10.1 Lines adjacency sequence
Figure 10.2 Line-strip adjacency sequence
Figure 10.3 Triangles adjacency sequence
Figure 10.4 Triangle-strip adjacency layout
Figure 10.5 Triangle-strip adjacency sequence
Figure 10.6 Texture used to represent hairs in the fur rendering example
Figure 10.7 The output of the fur rendering example
Figure 10.8 Schematic of geometry shader sorting example
Figure 10.9 Final output of geometry shader sorting example
Figure 10.10 Output of the viewport-array example
Figure 11.1 Output of the simple load-store shader
Figure 11.2 Timeline exhibited by the naïve overdraw counter shader
Figure 11.3 Output of the naïve overdraw counter shader
Figure 11.4 Output of the atomic overdraw counter shader
Figure 11.5 Cache hierarchy of a fictitious GPU
Figure 11.6 Data structures used for order-independent transparency
Figure 11.7 Inserting an item into the per-pixel linked lists
Figure 11.8 Result of order-independent transparency
Figure 12.1 Schematic of a compute workload
Figure 12.2 Relationship of global and local invocation ID
Figure 12.3 Output of the physical simulation program as simple points
Figure 12.4 Output of the physical simulation program
Figure 12.6 Image processing artifacts
Figure G.1 AMD’s GPUPerfStudio2 profiling Unigine Heaven 3.0
3.137.221.163