View
3.240
Download
0
Category
Tags:
Preview:
DESCRIPTION
Presentation at Google Developer Group GDG DevFest Bangalore on OpenGLES Graphics Programming
Citation preview
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/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
arvind.iisc@gmail.com 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
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 any Triangles 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 model 3D model �� 2D image 2D image
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj12
Camera Analogy
�� Everything inside the viewing volume is Everything inside the viewing volume is capturedcaptured
camera
model
viewingvolume
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
Clipping – objects outside view volume are discarded
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj14
Transformations
� Transform the model� Transform the camera� Project from 3D to 2D
arvind.iisc@gmail.com 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
arvind.iisc@gmail.com 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
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 Devaraj19
vertex
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
Rasterizationdetermines 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
RasterizationHow 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 Devaraj32
Lighting
�� Lighting simulates how objects reflect Lighting simulates how objects reflect lightlight
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj
arvind.iisc@gmail.com OpenGL Discussion GroupArvind Devaraj34
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 Devaraj37
Texture Mapping
�� Apply image to geometry Apply 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 Devaraj40
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 – 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();
}}
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 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
�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
Recommended