OpenGLES - Graphics Programming in Android
-
Upload
arvind-devaraj -
Category
Technology
-
view
3.234 -
download
0
description
Transcript of OpenGLES - Graphics Programming in Android
Graphics Programming in OpenGLES
Arvind Devaraj
GDG DevFest, Bangalore
[email protected] OpenGL Discussion GroupArvind Devaraj
About me
� @ NVIDIA - Android Graphics � OpenGLES Driver � Android Applications� Android Middleware
[email protected] OpenGL Discussion GroupArvind Devaraj
Demos and Additional Material
� https://www.facebook.com/groups/opengl/� 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
[email protected] OpenGL Discussion GroupArvind Devaraj4
OpenGLES Overview
�� OpenGL is graphics API.OpenGL is graphics API.�� Makes programming Makes programming h/wh/w independentindependent
�� OpenGLESOpenGLES is a subsetis a subset for embedded for embedded platformplatform
[email protected] OpenGL Discussion GroupArvind Devaraj
OpenGLES Overview
�� Triangles used to approximate any Triangles used to approximate any geometrygeometry
[email protected] OpenGL Discussion GroupArvind Devaraj
OpenGLES Overview
� Renders 3D geometry defined by Triangles
� GPU is efficient in processing geometry and images
[email protected] 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
[email protected] OpenGL Discussion GroupArvind Devaraj
Graphics Pipeline
[email protected] OpenGL Discussion GroupArvind Devaraj
Transformations
[email protected] OpenGL Discussion GroupArvind Devaraj
Camera Analogy
3D model 3D model �� 2D image 2D image
[email protected] OpenGL Discussion GroupArvind Devaraj12
Camera Analogy
�� Everything inside the viewing volume is Everything inside the viewing volume is capturedcaptured
camera
model
viewingvolume
[email protected] OpenGL Discussion GroupArvind Devaraj
Clipping – objects outside view volume are discarded
[email protected] OpenGL Discussion GroupArvind Devaraj14
Transformations
� Transform the model� Transform the camera� Project from 3D to 2D
[email protected] OpenGL Discussion GroupArvind Devaraj15
Transformations
�� Transform the Transform 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
[email protected] OpenGL Discussion GroupArvind Devaraj16
Transformations - APIs
�� Transform the Transform the modelmodel�� glRotateglRotate / / glTranslateglTranslate etcetc
�� Transform the camera (Transform the camera (viewview))� gluLookAt
�� ProjectionProjection from 3D to 2Dfrom 3D to 2D�� glFrustumglFrustum
[email protected] OpenGL Discussion GroupArvind Devaraj
Transformations
Any transformation is combination of these
basic transformations
[email protected] OpenGL Discussion GroupArvind Devaraj
Transformation Matrix
[email protected] OpenGL Discussion GroupArvind Devaraj19
vertex
Modelview Projection
Object space Eye space Screen space
Transformation
Each triangle (vertex) from 3D model is converted to screen space
[email protected] OpenGL Discussion GroupArvind Devaraj
Transformation Demo
[email protected] OpenGL Discussion GroupArvind Devaraj
Graphics Pipeline
[email protected] OpenGL Discussion GroupArvind Devaraj
Rasterization
Converts primitives to pixels/fragments
Rasterizationdetermines the pixels
inside the triangle
[email protected] OpenGL Discussion GroupArvind Devaraj
Rasterization
� Each vertex has attribute like Color
� Attributes get interpolated
[email protected] OpenGL Discussion GroupArvind Devaraj
RasterizationHow about overlapping region
Pixels in individual triangles are called fragments
Combine fragments to get final output pixel
[email protected] OpenGL Discussion GroupArvind Devaraj
Fragment Processing
There are many ways to combine Fragments
[email protected] OpenGL Discussion GroupArvind Devaraj
Fragment Processing
There are many ways to combine Fragments
Display nearest to camera Blend with existing image
[email protected] OpenGL Discussion GroupArvind Devaraj
Graphics pipeline
pixelsvertices fragmentsvertices
[email protected] OpenGL Discussion GroupArvind Devaraj
Graphics pipeline
pixelsvertices fragmentsvertices
Add Lighting
[email protected] OpenGL Discussion GroupArvind Devaraj
Graphics pipeline
pixelsvertices fragmentsvertices
Add Texturing
[email protected] OpenGL Discussion GroupArvind Devaraj
Graphics Pipeline
[email protected] OpenGL Discussion GroupArvind Devaraj
Lighting
[email protected] OpenGL Discussion GroupArvind Devaraj32
Lighting
�� Lighting simulates how objects reflect Lighting simulates how objects reflect lightlight
[email protected] OpenGL Discussion GroupArvind Devaraj
[email protected] OpenGL Discussion GroupArvind Devaraj34
Lights
�� Lighting depends onLighting depends on� Surface material � Direction and Position of Light
�� Mathematical modelsMathematical models
[email protected] OpenGL Discussion GroupArvind Devaraj
Lighting
� N is surface normal. H is between light and viewer
H.N.cosθ
[email protected] OpenGL Discussion GroupArvind Devaraj
Texture Mapping
[email protected] OpenGL Discussion GroupArvind Devaraj37
Texture Mapping
�� Apply image to geometry Apply image to geometry
�� UsesUses
� Add Realism � Effects like Reflections
[email protected] OpenGL Discussion GroupArvind Devaraj
Texture Mapping – adds realism
[email protected] OpenGL Discussion GroupArvind Devaraj40
Texture Mapping
s
t
x
y
z
image
geometry screen
[email protected] OpenGL Discussion GroupArvind Devaraj
Shaders
� Allow these transformations to be user programmable
[email protected] OpenGL Discussion GroupArvind Devaraj
Graphics Pipeline
[email protected] OpenGL Discussion GroupArvind Devaraj
Shaders
� User defined programs � Custom vertex transformation� Custom fragment generation
[email protected] OpenGL Discussion GroupArvind Devaraj
Shader - Examples
Pattern Generation / Procedural textures
[email protected] OpenGL Discussion GroupArvind Devaraj
Shader Example
Particle / Effects Generation
[email protected] OpenGL Discussion GroupArvind Devaraj
Shader Examples
Complex Lighting / Image Transformations
[email protected] OpenGL Discussion GroupArvind Devaraj
Shader - Examples
Reflection / Shadow Effects
[email protected] OpenGL Discussion GroupArvind Devaraj
Shader Examples
[email protected] OpenGL Discussion GroupArvind Devaraj
Shader Examples (circle)
� void main(void) {
dist = (x*x) + (y*y);color = (dist < r*r) ? white: blue
}
[email protected] OpenGL Discussion GroupArvind Devaraj
Blending
[email protected] OpenGL Discussion GroupArvind Devaraj
Graphics Pipeline
[email protected] 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
[email protected] OpenGL Discussion GroupArvind Devaraj
Android – Rendererclass 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();
}}
[email protected] OpenGL Discussion GroupArvind Devaraj
Android - Renderer
draw_triangle() {// set the vertex info from user data
glVertexAttribPointer(…, 3, FLOAT,…..vertexData);
glDrawArrays(GL_TRIANGLES)}
[email protected] OpenGL Discussion GroupArvind Devaraj
Additional slides
[email protected] OpenGL Discussion GroupArvind Devaraj
Hidden surface removal
� surface closest to eye is drawn
� Others surfaces are discarded
� Using Z/depth-Buffer
[email protected] OpenGL Discussion GroupArvind Devaraj57
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
�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������