1st Edition

Introduction to Computer Graphics A Practical Learning Approach

    422 Pages 204 B/W Illustrations
    by Chapman & Hall

    422 Pages 204 B/W Illustrations
    by Chapman & Hall

    Teach Your Students How to Create a Graphics Application

    Introduction to Computer Graphics: A Practical Learning Approach guides students in developing their own interactive graphics application. The authors show step by step how to implement computer graphics concepts and theory using the EnvyMyCar (NVMC) framework as a consistent example throughout the text. They use the WebGL graphics API to develop NVMC, a simple, interactive car racing game.

    Each chapter focuses on a particular computer graphics aspect, such as 3D modeling and lighting. The authors help students understand how to handle 3D geometric transformations, texturing, complex lighting effects, and more. This practical approach leads students to draw the elements and effects needed to ultimately create a visually pleasing car racing game. The code is available at www.envymycarbook.com


    • Puts computer graphics theory into practice by developing an interactive video game
    • Enables students to experiment with the concepts in a practical setting
    • Uses WebGL for code examples
    • Requires knowledge of general programming and basic notions of HTML and JavaScript
    • Provides the software and other materials on the book’s website

    Software development does not require installation of IDEs or libraries, only a text editor.

    What Computer Graphics Is
    Applications Domains and Areas of Computer Graphics
    Color and Images
    Algorithms to Create a Raster Image from a 3D Scene

    The First Steps
    The Application Programming Interface
    The WebGL Rasterization-Based Pipeline
    Programming the Rendering Pipeline: Your First Rendering
    WebGL Supporting Libraries
    Meet NVMC

    How a 3D Model Is Represented
    Polygonal meshes
    Implicit surfaces
    Parametric surfaces
    Constructive solid geometry (CSG)
    Subdivision surfaces
    Data Structures for Polygon Meshes
    The First Code: Making and Showing Simple Primitives

    Geometric Transformations
    Geometric entities
    Basic geometric transformations
    Affine transformations
    Rotations in Three Dimensions
    Viewing transformations
    Transformations in the Pipeline
    Upgrade your client: Our First 3D Client
    The Code
    Handling the Transformations Matrices with a Matrix Stack
    Manipulating the View and the Objects
    Upgrade your client: Create the Observer Camera

    Turning Vertices into Pixels
    Hidden Surface Removal
    From Fragments to Pixels

    Lighting and Shading
    Light and Matter Interaction
    Radiometry in a Nutshell
    Reectance and BRDF
    The Rendering Equation
    Evaluate the Rendering Equation
    Computing the Surface Normal
    Light Source Types
    Phong Illumination Model
    Shading Techniques
    Advanced Reection Models

    Introduction: Do We Need Texture Mapping?
    Basic Concepts
    Texture Filtering: from per-Fragment Texture Coordinates to per-Fragment Color
    Perspective Correct Interpolation: From per-Vertex to per-Fragment Texture Coordinates
    Upgrade Your Client: Add Textures to the Terrain, Street and Building
    Upgrade Your Client: Add the Rear Mirror
    Texture Coordinates Generation and Environment Mapping
    Texture Mapping for Adding Detail to Geometry
    Notes on Mesh Parametrization
    3D Textures and Their Use

    The Shadow Phenomenon
    Shadow Mapping
    Upgrade Your Client: Add Shadows
    Shadow Mapping Artifacts and Limitations
    Shadow Volumes

    Image-Based Impostors
    Ray-Traced Impostors

    Advanced Techniques
    Image Processing
    Ambient Occlusion
    Deferred Shading
    Particle Systems

    Global Illumination
    Ray Tracing
    Multi-Pass Algorithms

    Appendix A: NVMC Class
    Appendix B: Properties of Vector Products




    Fabio Ganovelli, Massimiliano Corsini, Sumanta Pattanaik, Marco Di Benedetto

    "The book is presented in a very accessible fashion. The authors give many examples illustrating the notations and problems considered, making the learning easier. Every chapter ends with exercises, both theoretical and programming. The book is suitable for upper-level computer science/math/physics undergraduate students with at least basic programming skills and at least elementary understanding of linear algebra and calculus."
    —Krzystof Gdawiec, in Zentralblatt MATH 1308, 2015