First Technology Transfer

Standard and Advanced Technical Training, Consultancy and Mentoring

AND107 OpenGL ES 2 and OpenGL ES 3 Android Programming (5 days)

Course Outline

OpenGL ES is a cross-platform API based on OpenGL for full-function 2D and 3D graphics on embedded systems. Early Android devices supported Open GL ES 1.1, later versions of Android supported OpenGL ES 2.0, and the more recent versions of Android support Open GL ES 3.0 / 3.1 .

This course introduces a novice OpenGL ES programmer to the theory and techniques needed to develop 3D graphics applications using OpenGL ES 2 and OpenGL ES 3.

It covers key Open GL ES programming technologies such as an overview of architecture, modeling, and lighting, and introduces more advanced topics such as the matrix palette skinning and animation.

The course concentrates mainly on OpenGL ES 2.0 Android programming and, once these have been mastered introduces the new features supported in OpenGL ES 3.0

Course Objectives

After completing this course attendees should:

  • Understand the architecture of OpenGL ES (both 2 and 3) and the Android Open GL ES API
  • Be able to read and understand OpenGL ES 2.0 programs
  • Be able to implement 3D graphics applications for embedded systems with OpenGL ES 2.0 and OpenGL ES 3.0 / 3.1
  • Understand the differences between OpenGL ES 2.0 and OpenGL ES 3.0 / 3.1
  • Be able to write vertex and fragment shaders for full control over 3D rendering
  • Be able to texture 3D objects procedurally and with images
  • Be able to render point clouds and make animated particle systems
  • Be able to create higher-level scene graphs powered by OpenGL rendering


Attendees should have a reasonable level of skill in writing C, C++ and Java code. Previous experience with writing graphics programs is not required.

The course will cover basic concepts from linear algebra (vector notation and matrix multiplication). Previous knowledge of these subjects is not required as they will be introduced and explained as needed.

Course Contents

  • The OpenGL ES approach to rendering 3D Graphics
    • Points, Lines and Triangles
    • Frame Buffers, Render Buffers and Buffer Objects
    • Rasterisation
    • OpenGL ES Graphics Pipelines
    • Vertex shaders
    • Primitive Assembly
    • Textures
    • Fragment shaders
    • 2D Graphics and OpenGL ES
  • OpenGL ES in the Android Context
    • Creating an Android Activity for OpenGL ES graphics
    • Creating a GLSurfaceView object
    • Creating a Renderer class
    • Defining shapes
    • Drawing shapes
    • Camera views
    • Projection and Camera Transformations
    • Basic rotation of shapes
    • Basic user interaction and handling touch events
    • Basics of animating views using Scenes and Transitions
  • Using Meshes
    • Creating polygon meshes using Blender
    • Rendering meshes in OpenGL ES 2.0
    • Rendering meshes in OpenGL ES 3 using the Wavefront OJB model
    • Loading 3D models with the min3D Framework for Android
  • Introduction to Light and Materials
    • Coding the per-vertex ambient light component
    • Coding the per-vertex diffuse light component
    • Coding the per-vertex specular light component
    • Gouraud shading – per-vertex shading technique
    • Phong shading – per-fragment shading technique
    • Adding directional and point light
    • Adding multiple lights into a scene
    • Implementing two-side shading
  • Introduction to working with Shaders, Textures and Mappings
    • Creating wobble and ripple effect
    • Procedural texture shading using object coordinates
    • Circular patterns static and revolving
    • Brick,Polka dot and other patterns
    • Procedural texture shading using texture coordinates
    • Reflection and refraction with environment mapping
    • Rendering to texture with Frame Buffer Objects
    • Terrain with displacement mapping
    • Bump mapping
  • Introduction to More Advanced topics
    • Introduction to scene management and scene graphs
    • Principles of Anti-Aliasing
    • Shadows and Particle Systems
    • Using JNI on Android to access C/C++ code