Graphics Programming in
OpenGLES
Arvind Devaraj
GDG DevFest, Bangalore
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
About me
� @ NVIDIA - Android Graphics
� OpenGLES Driver
� Android Applications
� Android Middleware
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Demos and Additional Material
� https://www.facebook.com/groups/ope
ngl/
� Is a community of OpenGL professionals
� Join the community to get more info
� We have tons of demos – Graphics
programming using GLUT, Android, iPhone
� Get your queries answered by expert
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj4
OpenGLES Overview
�� OpenGL is graphics API.OpenGL is graphics API.
�� Makes programmingMakes programming h/wh/w independentindependent
�� OpenGLESOpenGLES is a subsetis a subset for embeddedfor embedded
platformplatform
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
A
OpenGLES Overview
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
OpenGLES Overview
�� Triangles used to approximate anyTriangles used to approximate any
geometrygeometry
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
OpenGLES Overview
� Renders 3D geometry defined by Triangles
� GPU is efficient in processing geometry and
images
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
OpenGLES Overview
� Represent Objects as Triangles
� Apply Transformations on triangles
� Rasterize the triangles to get pixels
� Add realism by adding Light and
Texture
� More realism using Shaders
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Graphics Pipeline
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Transformations
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Camera Analogy
3D model3D model �� 2D image2D image
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj1
2
Camera Analogy
�� Everything inside the viewing volume isEverything inside the viewing volume is
capturedcaptured
camera
model
viewing
volume
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Clipping – objects outside view
volume are discarded
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj1
4
Transformations
� Transform the model
� Transform the camera
� Project from 3D to 2D
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj1
5
Transformations
�� Transform theTransform the modelmodel
�� i.ei.e move the objectmove the object
�� Transform the camera (Transform the camera (viewview))
� i.e change the viewing volume
�� ProjectionProjection from 3D to 2Dfrom 3D to 2D
� adjust the lens of the camera
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj1
6
Transformations - APIs
�� Transform theTransform the modelmodel
�� glRotateglRotate // glTranslateglTranslate etcetc
�� Transform the camera (Transform the camera (viewview))
� gluLookAt
�� ProjectionProjection from 3D to 2Dfrom 3D to 2D
�� glFrustumglFrustum
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Transformations
Any transformation is
combination of these
basic transformations
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Transformation Matrix
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj1
9
v
e
r
t
e
x
Modelview Projection
Object space Eye space Screen space
Transformation
Each triangle (vertex) from 3D model is
converted to screen space
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Transformation Demo
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Graphics Pipeline
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Rasterization
Converts primitives to
pixels/fragments
Rasterization
determines the pixels
inside the triangle
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Rasterization
� Each vertex
has attribute
like Color
� Attributes get
interpolated
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Rasterization
How about overlapping
region
Pixels in individual
triangles are called
fragments
Combine fragments to
get final output pixel
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Fragment Processing
There are many ways to combine Fragments
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Fragment Processing
There are many ways to combine Fragments
Display nearest to camera Blend with existing image
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Graphics pipeline
pixelsvertices fragmentsvertices
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Graphics pipeline
pixelsvertices fragmentsvertices
Add Lighting
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Graphics pipeline
pixelsvertices fragmentsvertices
Add Texturing
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Graphics Pipeline
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Lighting
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj3
2
Lighting
�� Lighting simulates how objects reflectLighting simulates how objects reflect
lightlight
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj3
4
Lights
�� Lighting depends onLighting depends on
� Surface material
� Direction and Position of Light
�� Mathematical modelsMathematical models
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Lighting
� N is surface normal.
H is between light and viewer
H.N.cosθ
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Texture Mapping
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj3
7
Texture Mapping
�� Apply image to geometryApply image to geometry
�� UsesUses
� Add Realism
� Effects like Reflections
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Texture Mapping – adds realism
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Texture Mapping
Effects like
Reflection
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj4
0
Texture Mapping
s
t
x
y
z
image
geometry screen
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Shaders
� Allow these transformations to be user
programmable
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Graphics Pipeline
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Shaders
� User defined programs
� Custom vertex transformation
� Custom fragment generation
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Shader - Examples
Pattern Generation /
Procedural textures
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Shader Example
Particle / Effects Generation
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Shader Examples
Complex Lighting / Image Transformations
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Shader - Examples
Reflection / Shadow Effects
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Shader Examples
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Shader Examples (circle)
� void main(void)
{
dist = (x*x) + (y*y);
color = (dist < r*r) ? white: blue
}
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Blending
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Graphics Pipeline
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
public class ClearActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGLView = new GLSurfaceView(this);
mGLView.setRenderer(new ClearRenderer());
setContentView(mGLView);
}
private GLSurfaceView mGLView;
}
Android - Activity
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Android – Renderer
class ClearRenderer implements GLSurfaceView.Renderer {
public void onSurfaceCreated(GL10 gl, EGLConfig config) {}
public void onSurfaceChanged(GL10 gl, int w, int h) {
gl.glViewport(0, 0, w, h);
}
public void onDrawFrame(GL10 gl) {
draw_triangle();
}
}
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Android - Renderer
draw_triangle() {
// set the vertex info from user data
glVertexAttribPointer
(…, 3, FLOAT,…..vertexData);
glDrawArrays(GL_TRIANGLES)
}
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Additional slides
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Hidden surface removal
� surface closest
to eye is drawn
� Others surfaces
are discarded
� Using Z/depth-Buffer
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj5
7
OpenGL Geometric
Primitives
GL_QUAD_STRIPGL_QUAD_STRIP
GL_POLYGONGL_POLYGON
GL_TRIANGLE_STRIPGL_TRIANGLE_STRIP GL_TRIANGLE_FANGL_TRIANGLE_FAN
GL_POINTSGL_POINTS
GL_LINESGL_LINES
GL_LINE_LOOPGL_LINE_LOOPGL_LINE_STRIPGL_LINE_STRIP
GL_TRIANGLESGL_TRIANGLES
GL_QUADSGL_QUADS
���������������������������������������������������������������������������
���������������������������������������������������������������������������������
�����������������������������������������������������

OpenGLES - Graphics Programming in Android