Computer Graphics Programming in OpenGL with Java

by V. Scott Gordon and John Clevenger

published by Mercury Learning ©2017.


  • Available in hardcover here at: Amazon.com
  • or, in electronic form on: Kindle
  • or, directly from the publisher at: Mercury Learning

    Instructor ancillaries available by contacting the publisher.


    Current list of errata
    For instructions on running the samples on a Mac, click here.

    Table of Contents

  • CHAPTER 1 - Getting Started
  • 1.1 Languages and Libraries
    1.2 Installation and Configuration

  • CHAPTER 2 - JOGL and the OpenGL Graphics Pipeline
  • 2.1 The OpenGL Pipeline
        2.1.1 Java/JOGL Application
        2.1.2 Vertex Shader
        2.1.3 Tessellation
        2.1.4 Geometry Shader
        2.1.5 Rasterization
        2.1.6 Fragment Shader
        2.1.7 Pixel Operations
    2.2 Detecting OpenGL and GLSL Errors
    2.3 Reading GLSL Source Code from Files
    2.4 Building Objects from Vertices
    2.5 Animating a Scene

  • CHAPTER 3 - Mathematical Foundations
  • 3.1 3D Coordinate Systems
    3.2 Points
    3.3 Matrices
    3.4 Tranformation Matrices
        3.4.1 Translation
        3.4.2 Scaling
        3.4.3 Rotation
    3.5 Vectors
        3.5.1 Uses for Dot Product
        3.5.2 Uses for Cross Product
    3.6 Local and World Space
    3.7 Eye Space and the Synthetic Camera
    3.8 Projection Matrices
        3.8.1 The Perspective Projection Matrix
        3.8.2 The Orthographic Projection Matrix
    3.9 Look-At Matrix
    3.10 GLSL Functions for Building Matrix Transforms

  • CHAPTER 4 - Managing 3D Graphics Data
  • 4.1 Buffers & Vertex Attributes
    4.2 Uniform Variables
    4.3 Interpolation of Vertex Attributes
    4.4 Model-View and Perspective Matrices
    4.5 Our First 3D Program - a 3D Cube
    4.6 Rendering Multiple Copies of an Object
        4.6.1 Instancing
    4.7 Rendering Multiple Different Models in a Scene
    4.8 Matrix Stacks
    4.9 Combating "Z-Fighting" Artifacts
    4.10 Other Options for Primitives
    4.11 Back-Face Culling

  • CHAPTER 5 - Texture Mapping
  • 5.1 Loading Texture Image Files
    5.2 Texture Coordinates
    5.3 Creating a Texture Object
    5.4 Constructing Texture Coordinates
    5.5 Loading Texture Coordinates into Buffers
    5.6 Using the Texture in a Shader: Sampler Variables and Texture Units
    5.7 Texture Mapping: Example Program
    5.8 Mipmapping
    5.9 Anisotropic Filtering
    5.10 Wrapping and Tiling
    5.11 Perspective Distortion
    5.12 Loading Texture Image Files Using Java AWT Classes

  • CHAPTER 6 - 3D Models
  • 6.1 Procedural Models - Building a Sphere
    6.2 OpenGL Indexing - Building a Torus
        6.2.1 The Torus
        6.2.2 Indexing in OpenGL
    6.3 Loading Externally Produced Models

  • CHAPTER 7 - Lighting
  • 7.1 Lighting Models
    7.2 Lights
    7.3 Materials
    7.4 ADS Lighting Computations
    7.5 Implementing ADS Lighting
        7.5.1 Gouraud Shading
        7.5.2 Phong Shading
    7.6 Combining Lighting and Textures

  • CHAPTER 8 - Shadows
  • 8.1 The Importance of Shadows
    8.2 Projective Shadows
    8.3 Shadow Volumes
    8.4 Shadow Mapping
        8.4.1 (PASS ONE) - "Draw" Objects from Light Position
        8.4.2 (intermediate step) - Copying the Z-Buffer to a Texture
        8.4.3 (PASS TWO) - Rendering the Scene with Shadows
    8.5 A Shadow Mapping Example
    8.6 Shadow Mapping Artifacts

  • CHAPTER 9 - Sky and Backgrounds
  • 9.1 Skyboxes
    9.2 Skydomes
    9.3 Implementing a Skybox
        9.3.1 Building a Skybox from Scratch
        9.3.2 Using OpenGL Cube Maps
    9.4 Environment Mapping

  • CHAPTER 10 - Enhancing Surface Detail
  • 10.1 Bump Mapping
    10.2 Normal Mapping
    10.3 Height Mapping

  • CHAPTER 11 - Parametric Surfaces
  • 11.1 Quadratic Bezier Curves
    11.2 Cubic Bezier Curves
    11.3 Quadratic Bezier Surfaces
    11.4 Cubic Bezier Surfaces

  • CHAPTER 12 - Tessellation
  • 12.1 Tessellation in OpenGL
    12.2 Tessellation for Bezier Surfaces
    12.3 Tessellation for Terrain / Height Maps
    12.4 Controlling Level of Detail (LOD)

  • CHAPTER 13 - Geometry Shaders
  • 13.1 Per-Primitive Processing in OpenGL
    13.2 Altering Primitives
    13.3 Deleting Primitives
    13.4 Adding Primitives

  • CHAPTER 14 - Other Techniques
  • 14.1 Fog
    14.2 Compositing / Blending / Transparency
    14.3 User-Defined Clipping Planes
    14.4 3D Textures
    14.5 Noise
    14.6 Noise Application - Marble
    14.7 Noise Application - Wood
    14.8 Noise Application - Clouds
    14.9 Noise Application - Special Effects

  • Bibliography

  • click here to return to Scott's homepage