您的位置:首页 > 移动开发 > Android开发

[android] OpenGL与OpenGL ES简介

2015-06-04 21:11 507 查看

简介

OpenGL

OpenGL的全称是Open Graphics Library,即开放的图形库接口,它定义了一个跨编程语言,跨平台的编程接口的规范,它主要用于3D图形(2D也可以)编程。OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL。IRIS RL是一个工业标准的3D图形软件接口,功能虽然强大,但是移植性不好,于是SGI公司在IRIS
GL的基础上开发了OpenGL。

OpenGL体系简单,而且具有跨平台特性,它不像Direct3D,是Microsoft开发的windows平台下的图形接口,只能在windows系统上运行。因此OpenGL具有很广泛的适应性,不仅用于大型工作站,也用于个人PC。

OpenGL ES

在图形工作站,个人PC上,OpenGL都可以很好的工作。但三维图形计算需要处理大量数据,因此在一些手机之类小型设备上,如果继续用OpenGL,就显得比较困难。为了解决这个问题,Khronos集团问OpenGL提供了一个子集:OpenGL
ES(OpenGL for Embedded System,即为嵌入式系统优化的OpenGL)。

Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准,Khronos协会针对手机,PDA(个人数据助手)和游戏主机等嵌入式设备设置了OpenGL
ES。

OpenGL
ES是免费的、跨平台的、功能完备的2D/3D图形库接口API,它针对多种嵌入式系统(包括控制台,手机,手持设备,家电,汽车)专门设计,他是一个精心提取的OpenGL子集。

OpenGL
ES剔除了OpenGL中的glBegin/glEnd,四边形(GL_QUADS)、多边形(GL_POLYGONS)等许多非绝对必要的特性。经过多年发展,目前OpenGL ES主要有两个版本,OpenGL ES 1.x针对固定管线硬件;OpenGL
ES 2.x针对可编程管线硬件。

OpenGL
ES 1.0是以OpenGL 1.3规范为基础的,OpenGL ES 1.1是以OpenGL ES 1.5规范为基础的,分别支持common和common lite两种profile。lite profile只支持定点实数,而common
profile及支持定点数又支持浮点数。

目前Android
SDK已经支持OpenGL ES 2.0绝大多数功能,封装在android.opengl包里。

绘制2D图形

android中OpenGL
ES提供了GLSurfaceView组件,用于显示3D图形。GLSurfaceView本身布提供3D绘图功能,而是由GLSurfaceView.Renderer来进行SurfaceView中的3D图形绘制。

OpenGL
ES使用步骤:

1、创建GLSurfaceView组件,使用Activity来显示GLSurfaceView组件。

2、为GLSurfaceView组件创建GLSurfaceView.Renderer实例,实现它时,需要重写该接口的三个方法:

abstract void onDrawFrame(GL10 gl):Renderer对象调用该方法绘制GLSurfaceView的当前帧。
abstract void onSurfaceChanged(GL10 gl,int width,int height):当前GLSurfaceView的大小改变时,
回调该方法。
abstract void onSurfaceCreated(GL10 gl,EGLConfig config):当GLSurfaceView被创建时回调该方法

3、调用GLSurfaceView组件的setRenderer()方法,指定Renderer对象,该Renderer对象将会完成GLSurfaceView里的3D图形绘制。

所以,绘制3D图形的难点,不是如何使用GLSurface组件,而是实现Renderer类。实现Renderer类时的三个方法(如上)中的GL10形参,为GLOpen
ES的“画笔”,类似重写View时,onDraw()方法里的Canvas组件。

当SurfaceView被创建时,回调Renderer对象的onSurfaceCreated()方法,该方法里执行一些无需任何改变的初始化。如下:

@Override
public void onSurfaceCreated(GL10 gl,EGLConfig config){
	//关闭抗抖动
	gl.dlDisable(GL10.GL_DITHER);
	//设置系统对透视进行修正
	gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,GL10.GL_FASTEST);
	gl.glClearColor(0,0,0,0);
	//设置阴影平滑模式
	gl.glShadeModel(GL10.GL_SMOOTH);
	//启用深度测试
	gl.glEnable(GL10.GL_DEPTH_TEXT);
	//设置深度测试类型
	gl.glDepthFunc(GL10.GL_LEQUAL);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: