初识OpenGL ES
要在Android应用程序中使用OpenGL ES绘制图形,就必须为他们创建一个视图容器,使用这边需要引入GLSurfaceView和GLSurfaceView.Renderer.GLSurfaceView是使用OpenGL和GLSurfaceView.Renderer绘制的图形的视图容器,用于控制在该视图中绘制内容.
下面就介绍如何用GLSurfaceView和GLSurfaceView.Renderer完成简单的三角形绘制.
1.在清单文件中声明OpenGL的使用
如果我们的应用程序要使用OpenGL ES 2.0API,清单文件的声明则为:
2.创建一个Activity
3.创建GLSurfaceView对象
GLSurfaceView是一个专门的视图,在上面可以绘制OpenGL ES图形,本身并没有太大的作用,实际的对象绘制是在GLSurfaceView.Renderer中进行控制的.
4.创建渲染器Renderer
Renderer控制在于其关联的SurfaceView上绘制内容,Renderer有三个方法供Android系统调用.
(1) onSurfaceCreated() -调用一次,设置OpenGL ES环境.
(2) onDrawFrame() -每次重绘进行时调用
(3) onSurfaceChange() -视图几何图形发生改变时进行调用(eg:设备的屏幕方向发生改变)
5.定义三角形
OpenGL ES允许使用三维空间中的坐标定义绘制对象,所以在定义三角形之前,必须先定义其坐标.在OpenGL中,执行此操作的典型方法是为坐标定义浮点数的顶点数组。为了获得最大效率,可以将这些坐标写入ByteBuffer,并将其传递到OpenGL ES图形管道进行处理。
6.初始化三角形
在进行绘图之前,必须初始化并加载计划绘制的形状,除非程序中使用的形状的结构(原始坐标)在执行过程中发生变化,否则应在渲染器的onSurfaceCreated()方法中初始化它们,以获得内存和处理效率。
7.绘制三角形
首先需要定义如下内容:
(1) Vertex Shader -顶点着色器,用于渲染形状顶点的OpenGL ES图形代码。
(2)Fragment Shader -OpenGL ES代码,用于渲染具有颜色或纹理的形状的面。
(3) Program -一个OpenGL ES对象,包含要用于绘制一个或多个形状的着色器。
我们需要至少一个顶点着色器来绘制形状,并使用一个片段着色器为该形状着色。必须编译这些着色器,然后将其添加到OpenGL ES程序中,然后使用该程序绘制形状。以下是如何定义可用于在Triangle类中绘制形状的基本着色器的示例:
着色器包含OpenGL着色语言(GLSL)代码,必须在OpenGL ES环境中使用它之前进行编译。要编译此代码,要Renderer类中创建以下该方法:
创建draw()方法以绘制形状。
最后在Renderer的onDrawFrame()方法中调用draw()方法.要想的三角形就出现啦!