下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

学习关于在Android下如何使用OpenGL接口

作者:课课家教育     来源: http://www.kokojia.com点击数:1689发布时间: 2016-04-18 18:49:36

标签: AndroidOpenGLOpenGL安卓开发

      对于OpenGL,或许有很多没学Android开发的人在脑海中打了无数个问号了,那么OpenGL是什么?OpenGL的全写是Open Graphics Library,其是个定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。那么接下来介绍一下OpenGL基本内容。

学习关于在Android下如何使用OpenGL接口_AndroidOpenGL_OpenGL_安卓开发_课课家

  1、什么是 OpenGL?

  OpenGL 是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库。OpenGL 的前身是 SGI 公司为其图形工作站开的 IRIS GL。IRIS GL 是一个工业标准的3D图形软件接口,功能虽然强大但是移植性不好,于是 SGI 公司便在 IRIS GL 的基础上开发 OpenGL 。

  2、OpenGL 的发展历程

  1992年7月 发布了 OpenGL 1.0 版本,并与微软共同推出 Windows NT 版本的 OpenGL 。

  1995年 OpenGL 1.1 版本面市,加入了新功能,并引入了纹理特性等等。

  一直到 2009年8月Khronos小组发布了OpenGL 3.2,这是一年以来OpenGL进行的第三次重要升级。

  具体特点及功能、 OpenGL 现状、发展历程、OpenGL 规范、编程入门请 点击这里 。

  3、OpenGL ES 简介

  Android 3D 引擎采用的是OpenGL ES。OpenGL ES是一套为手持和嵌入式系统设计的3D引擎API,由Khronos公司维护。在PC领域,一直有两种标准的3D API进行竞争,OpenGL 和 DirectX。一般主流的游戏和显卡都支持这两种渲染方式,DirectX在Windows平台上有很大的优势,但是 OpenGL 具有更好的跨平台性。

  由于嵌入式系统和PC相比,一般说来,CPU、内存等都比PC差很多,而且对能耗有着特殊的要求,许多嵌入式设备并没有浮点运算协处理器,针对嵌入式系统的以上特点,Khronos对标准的 OpenGL 系统进行了维护和改动,以期望满足嵌入式设备对3D绘图的要求。

  4、 Android OpenGL ES 简介

  Android系统使用 OpenGL 的标准接口来支持3D图形功能,android 3D 图形系统也分为 java 框架和本地代码两部分。本地代码主要实现的 OpenGL 接口的库,在 Java 框架层,javax.microedition.khronos.opengles 是 java 标准的 OpenGL包,android.opengl包提供了 OpenGL 系统和 Android GUI 系统之间的联系。

  5、Android 支持 OpenGL 列表

  1、GL

  2、GL 10

  3、GL 10 EXT

  4、GL 11

  5、GL 11 EXT

  6、GL 11 ExtensionPack

  我们将使用 GL10 这个类开始接触 OpenGL ,探索3D 领域。

  6、一步一步实现自己的 Renderer 类

  在 Android 中我们使用 GLSurfaceView 来显示 OpenGL 视图,该类位于 android.opengl 包里面。它提供了一个专门用于渲染3D 的接口 Renderer 。接下来我们就来一步步构建自己的 Renderer 类。

  1、为 Renderer 类赶回命名空间

  2、新建一个类来实现 Renderer 接口,代码如下:

  3、如上代码所写,程序实现了 Renderer 类,则必须重写以下方法

  4、当窗口被创建时需要调用 onSurfaceCreate ,我们可以在这里对 OpenGL 做一些初始化工作,例如:

  glHint 用于告诉 OpenGL 我们希望进行最好的透视修正,这会轻微地影响性能,但会使得透视图更好看。

  glClearColor 设置清除屏幕时所用的颜色,色彩值的范围从 0.0f~1.0f 大小从暗到这的过程。

  glShadeModel 用于启用阴影平滑度。阴影平滑通过多边形精细地混合色彩,并对外部光进行平滑。

  glDepthFunc 为将深度缓存设想为屏幕后面的层,它不断地对物体进入屏幕内部的深度进行跟踪。

  glEnable 启用深度测试。

  5、当窗口大小发生改变时系统将调用 onSurfaceChange 方法,可以在该方法中设置 OpenGL 场景大小 ,代码如下:

  6、场景画出来了,接下来我们就要实现场景里面的内容,比如:设置它的透视图,让它有种越远的东西看起来越小的感觉,代码如下:

  gl.glMatrixMode(GL10.GL_PROJECTION); 指明接下来的代码将影响 projection matrix (投影矩阵),投影矩阵负责为场景增加透视度。

  gl.glLoadIdentity(); 此方法相当于我们手机的重置功能,它将所选择的矩阵状态恢复成原始状态,调用 glLoadIdentity(); 之后为场景设置透视图。

  gl.glMatrixMode(GL10.GL_MODELVIEW); 指明任何新的变换将会影响 modelview matrix (模型观察矩阵)。

  gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10); 此方法,前面4个参数用于确定窗口的大小,而后面两个参数分别是在场景中所能绘制深度的起点和终点。

  7、了解了上面两个重写方法的作用和功能之后,第三个方法 onDrawFrame 从字面上理解就知道此方法做绘制图操作的。嗯,没错。在绘图之前,需要将屏幕清除成前面所指定的颜色,清除尝试缓存并且重置场景,然后就可以绘图了, 代码如下:

  8、Renderer 类在实现了上面的三个重写之后,在程序入口中只需要调用

  即可将我们绘制的图形显示出来。

  下面分享一段使用Renderer类绘制的三角形和四边形的代码:

  到此基本对 OpenGL 有一些了解,当然OpenGL 还有更多的东西需要我们去探索,努力吧。

     综上文,主要介绍了OpenGL和OpenGL ES的基本内容,还运用了八个详细的步骤一步步地实现Renderer 类,以及运用代码来实现使用Renderer类绘制的三角形和四边形。

赞(20)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程