最近在用到了OpenGL ES做Android 开发,总结一下学习的历程。
本章将从OpenGL ES的基础讲起。总结有关OpenGL ES的基本常识。

一、轻松入门话题:

OpenGL for Embedded System(OpenGL ES),是一种适用于嵌入式系统的免费2维和3维图形库。反正就是个绘制图形的工具(暂且这么理解吧)。

Android OpenGL ES多线程 安卓opengl es_Android


这张是OpenGL 与 OpenGL ES之间的关系图。因为OpenGL是早就有了的,而ES是可以引用在手机上的版本。

二、OpenGL ES在Android 中的包和重要的类
(一)、集中了大量OpenGL ES对象、方法的包:(了解一下)
1. package android.opengl —->GL辅助,连接Activity View与OpenGL ES
2. package javax.microedition.khronos.egl —->Display、Surface管理包
3. package javax.microedition.khronos.opengles —->绘图指令包
4. javax.nio —->数据存储包,Buffer

说明:这些包中的类,基本上是将C/C++的库(底层绘图方法),封装成了Java类库。其中的方法和底层的方法或者指令有点像。

特点:
1. 常量一般以GL_开头,方法一般以gl开头
2. 方法中大都指定了参数的数据类型,比如方法名结尾为f表示参数需是float,结尾为x表示参数需是int,结尾为v表示图形是矢量图等等。数据类型前有数字,例如4f表示支持4位float

核心类有:

1. javax.microedition.khronos.egl.EGL/EGL10/EGL11/EGL14等等

EGL 是 OpenGL ES与底层Native平台视窗系统之间的接口。

Android OpenGL ES多线程 安卓opengl es_Android_02


EGL 的产生:OpenGL ES为附加功能和可能的平台特性开发提供了扩展机制,但是这还不够,还必须要有一个可以让OpenGL ES 与本地视窗系统交互且与平台无关的层。OpenGL ES 的本质是一个图形渲染管线(PipeLine)的状态机,而EGL则是用于监控这些状态以及维护FrameBuffer 和其他渲染Surface的外部层

EGL中的重要类:

1>EGLDisplay –> 实际显示设备的抽象

2>EGLSurface –> 存储图像的内存区域FrameBuffer

3>EGLContext –> 存储OpenGL ES 绘图的状态信息

EGL的绘图步骤:
1> EGLDisplay 对象的获取
2> 初始化与EGLDisplay对象的连接
3> 获取EGLConfig对象
4> 创建EGLContext对象
5> 创建EGLSurface对象
6> 建立EGLContext与EGLSurface之间的连接
7> 使用指令集绘制图形
8> 断开EGLSurface与EGLContext之间的连接
9> 销毁EGLContext、EGLSurface对象
10> 断开与EGLDisplay的连接


2. android.opengl.GLSurfaceView
这个类的作用是:
1) 起到连接OpenGL ES与Android View的作用;
2) 使得OpenGL ES库适应Android Activity的生命周期;
3) 方便选择和合适的FrameBuffer,使得像素数据在Java中使用更方便;
4) 创建和管理单独的线程,使得绘制的效果平滑;
3. android.opengl.GLSurfaceView.Renderer
1) 这是一个统一的图形绘制接口
2) 实现其中的三大方法即可实现图形的绘制。
1> onSurfaceCreate 此方法在创建GLSurfaceView的时候执行。在此方法中主要设置一些不经常变化的参数比如说背景、是否打开z-Buffer等参数
2> onDrawFrame 此方法在绘制当前的Frame时执行。此方法定义一些实际的绘图操作。
3> onSurfaceChanged 此方法在Surface尺寸发生改变时执行。在设备支持横竖切换时,发生横竖屏切换可以进行相关的操作。

——————————不怎么华丽的分割线——————————–

下一章将从基本图形绘制、数据格式与存储进行详细总结。