[android] OpenGL与OpenGL ES简介

简介

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);
}
时间: 2024-07-31 10:04:02

[android] OpenGL与OpenGL ES简介的相关文章

Chapter 1 : OpenGLES 3.0 简介 (1)—— OpenGL ES 简介

OpenGL ES (OpenGL for Embedded Systems 的缩写)是一套在手持设备和嵌入式设备上实现高级3D图形化的应用变成接口(API).OpenGL ES作为图形API在当今的智能机领域占据了主导地位,并且已经将其应用扩展到了台式机.支持OpenGL ES的平台包括iOS.Android.BlackBerry.bada.Linux和Windows.OpenGL ES也支持WebGL——一种实现基于浏览器3D图形化的web标准. 2009年六月,苹果发布了iPhone 3G

Android学习笔记——OpenGL ES的基本用法、绘制流程与着色器编译

首先声明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. 在Android.iOS等移动平台上,开发者可以使用跨平台应用编程接口创建二维或者三维图形,或进行图像处理和计算机视觉应用,结合两者将能构建丰富有趣的交互体验.前者称为OpenGL,后者称为OpenCV,不过本文主要介绍前者,OpenCV在后续文章中涉及.OpenGL应用于桌面系统的历史已经很长了,但考虑到移动平台的特点(计算能力.性能等),将

在Android中使用OpenGL ES进行开发第(一)节:概念先行

一.前期基础是知识储备笔者计划写三篇文章来详细分析OpenGL ES基础的同时也是入门关键的三个点: ①OpenGL ES是什么?与OpenGL的关系是什么?——概念部分 ②使用OpenGL ES绘制2D/3D图形的第一步:定义图形:——运用部分 ③使用OpenGL ES绘制出②步骤中定义好的图形:——运用部分,难点所在 通过这三篇文章的分析,就像给万丈高楼垫定了基石,万丈高楼平地起,后面利用OpenGLES做各种效果,各种变换都是建立在这三步的图形编程理解之上的. 话不多说正文开始 (1)什么

有关于OpenGL、OpenGL ES、WebGL的小结

转自原文 有关于OpenGL.OpenGL ES.WebGL的小结 一.   OpenGL简介 OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言.跨平台的编程接口的规格,它用于三维图西象(二维的亦可).OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库. 关于其他的介绍我就不说了.这边我说一下有OpenGL的资源网站: OpenGL官网:http://www.opengl.org/resources/libraries/glut/ Ne

Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤

原文地址: Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤 - 网络资源是无限的 - 博客频道 - CSDN.NET http://blog.csdn.net/fengbingchun/article/details/11192189   1.  先按照http://blog.csdn.net/fengbingchun/article/details/10439281中操作搭建好基本的Android开发环境: 2.  打开Eclipse,-->Window-->

[转帖]Android平台下OpenGL初步

原文请看 Android平台下OpenGL初步 本文只关注于如何一步步实现在Android平台下运用OpenGl. 1.GLSurfaceView GLSurfaceView是Android应用程序中实现OpenGl画图的重要组成部分.GLSurfaceView中封装了一个Surface.而android平台下关于图像的现实,差不多都是由Surface来实现的 2.Renderer 有了GLSurfaceView之后,就相当于我们有了画图的纸.现在我们所需要做的就是如何在这张纸上画图.所以我们需

Android提供的LruCache类简介[转载]

转自:here 1 package android.util; 2 3 import java.util.LinkedHashMap; 4 import java.util.Map; 5 6 /** 7 * A cache that holds strong references to a limited number of values. Each time 8 * a value is accessed, it is moved to the head of a queue. When a

发现一个好用的Android文件访问工具--es文件管理器,可以在同局域网下的浏览器中查看手机中的文件

如题,发现一个好用的Android文件访问工具--es文件管理器,可以在同局域网下的浏览器中查看手机中的文件 1.在手机上打开es文件管理器的远程管理器,如图:                   2.保证手机和电脑在同一个局域网下(有线或者Wifi都可以) 贴一下我的地址: (1)我电脑的IP地址(有线宽带连接): (2)手机的地址(Wifi): 3.在别的手机或者电脑上打开上面的Url(我的是:ftp://192.168.1.115:3721/),打开后就是这样的: 3. 看一下刚才在手机上

Android中Toast的用法简介

转自:http://www.cnblogs.com/GnagWang/archive/2010/11/26/1888762.html Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动消失.下面用一个实例来看看如何使用Toast. 1.默认效果 代码 Toast.makeText(getApplicationContext(), "默认Toast样式",     Toast.LEN