2018-07-12

初识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()方法.要想的三角形就出现啦!

你可能感兴趣的:(2018-07-12)