Android OpenGL ES 教程
文章平均质量分 77
Android OpenGL ES开发教程
引路蜂
这个作者很懒,什么都没留下…
展开
-
Android OpenGL ES->Translucent GLSurfaceView
本例介绍使用透明背景绘制OpenGL 图形。步骤如下: 1. 对于Activity使用透明主题 android:label=”Graphics/OpenGL ES/Translucent GLSurfaceView” android:theme=”@style/Theme.Translucent” android:configChanges=”keyboardHidden|orie原创 2012-06-26 09:45:38 · 9475 阅读 · 4 评论 -
Android OpenGL ES->Frame Buffer Object
Frame Buffer 对象的概念可以参见前面文章Android OpenGL ES 开发教程(23):FrameBuffer。 简单的和2D图像类比,Frame Buffer 如果 对应到二维图形环境中,就是一个2D的内存数组空间,缺省情况为屏幕的显存,也可以创建Offscreen 内存空间,此时Frame Buffer 可以是一个二维数组,数组每个元素代表一个像素颜色。 对于三维图形来说原创 2012-06-24 02:29:33 · 14139 阅读 · 3 评论 -
Android OpenGL ES->GLSurfaceView
这个例子是使用OpenGL ES绘图最简单的例子,说明如何使用GLSerfaceView,前面的例子Android OpenGL ES 开发教程(6):GLSurfaceView 已经详细说明了,本篇不再具体描述。几何图形顶点定义参见Android OpenGL ES 开发教程(8):基本几何图形定义,颜色定义参见Android OpenGL ES 开发教程(20):颜色Color。 本例对原创 2012-06-17 16:30:40 · 7455 阅读 · 0 评论 -
Android OpenGL ES->Cube Map
Cube Map,中文可以翻译成立方环境映射,下面是摘自维基百科的说明: 立方反射映射是用立方映射使得物体看起来如同在反射周围环境的一项技术。通常,这通常使用户外渲染中使用的 skybox 完成。尽管由于反射物周围的物体无法在结果中看到,所以这并不是一个真正的反射,但是通常仍然可以达到所期望的效果。 通过确定观察物体的向量就可以进行立方映射反射,照相机光线在照相机向量与物体相交的位置按照曲面法原创 2012-06-17 00:59:09 · 7792 阅读 · 0 评论 -
Android OpenGL ES->Compressed Texture
本例和上例Android ApiDemos示例解析(200):Graphics->OpenGL ES->Textured Triangle 非常类似,所不同的是调用图像(Texture)的方法不同。 本例介绍如何使用ETC1 压缩格式的图像,一种方式是从资源文件中读取ETC1格式的图像作为三角形的材质(本例使用res.raw 中的androids.pkm文件),一种是通过代码动态创建ETC1格式原创 2012-06-16 18:09:59 · 7020 阅读 · 0 评论 -
Android OpenGL ES->Textured Triangle
前面介绍Android ApiDemos 跳过了其中与OpenGL 相关的例子,而是专为OpenGL编程写了教程。 这里将接着补上Android ApiDemos中有关OpenGL ES的例子的解析。 Textured Triangle 主要介绍了如何为图形添加材质。其具体步骤可以参见Android OpenGL ES 简明开发教程七:材质渲染。 本例对应的Activity为TriangleA原创 2012-06-12 06:40:30 · 6012 阅读 · 0 评论 -
Android OpenGL ES 开发教程(27):材质及光照示例
设置物体表面材料(Material)的反光属性(颜色和材质)的方法如下: public void glMaterialf(int face,int pname,float param) public void glMaterialfv(int face,int pname,float[] params,int offset) public void glMaterialfv(int face原创 2012-06-09 09:55:53 · 8828 阅读 · 2 评论 -
Android OpenGL ES 开发教程(26):设置光照效果Set Lighting
上一篇简单介绍了OpenGL中使用的光照模型,本篇结合OpenGL ES API说明如何使用光照效果: 设置光源定义法线设置物体材料光学属性 光源 OpenGL ES中可以最多同时使用八个光源,分别使用0到7表示。 OpenGL ES光源可以分为 平行光源(Parallel light source), 代表由位于无限远处均匀发光体,太阳可以近似控制平行光源。点光源(Spot l原创 2012-06-08 09:32:50 · 8148 阅读 · 0 评论 -
Android OpenGL ES 开发教程(25):OpenGL光照模型
前面绘制球体时Android OpenGL ES 开发教程(22):绘制一个球体 ,为了能看出3D效果,给场景中添加光源。如果没有光照,绘出的球看上去和一个二维平面上圆没什么差别,如下图,左边为有光照效果的球体,右边为同一个球体但没有设置光源,看上去就没有立体效果,因此OpenGL 光照效果对显示3D效果非常明显。 在OpenGL 光照模型中光源和光照效果可以细分为红,绿,蓝三个部分,光源由原创 2012-06-07 16:12:19 · 7721 阅读 · 1 评论 -
Android OpenGL ES 开发教程(24):Depth Buffer
OpenGL ES 中Depth Buffer 保存了像素与观测点之间的距离信息,在绘制3D图形时,将只绘制可见的面而不去绘制隐藏的面,这个过程叫”Hidden surface removal” ,采用的算法为”The depth buffer algorithm”。 一般来说,填充的物体的顺序和其顺序是一致的,而要准确的显示绘制物体在Z轴的前后关系,就需要先绘制距离观测点(ViewPoint)原创 2012-06-06 18:56:45 · 7482 阅读 · 2 评论 -
Android OpenGL ES 开发教程(23):FrameBuffer
OpenGL ES 中的FrameBuffer 指的是存储像素的内存空间。对应一个二维图像,如果屏幕分辨率为1280X1024 ,如果屏幕支持24位真彩色 (RGB),则存储这个屏幕区域的内存至少需要1024X1280X3个字节。此外如果需要支持透明度(Alpha),则一个像素需要4个字节。 对应3D图像来说,上面存储显示颜色的Buffer称为Color Buffer,除Color Buffer原创 2012-06-04 09:35:14 · 7443 阅读 · 0 评论 -
Android OpenGL ES 开发教程(22):绘制一个球体
OpenGL ES 只能通过绘制三角形来构造几何图形,比如前面绘制的20面体Android OpenGL ES 开发教程(12):绘制一个20面体,通过增加正多面体的边数,就可以构造出一个球体: 在项目中创建一个Sphere 类,它的Draw 方法,通过绘制三角形来构造球体,并且为其添加法线,法线主要用于光照效果,将在后面介绍。 public void draw(GL10 gl) { f原创 2012-06-02 10:57:50 · 12128 阅读 · 10 评论 -
Android OpenGL ES 开发教程(21):定义3D模型的前面和后面
OpenGL ES 使用也只能使用三角形来定义一个面(Face),为了获取绘制的高性能,一般情况不会同时绘制面的前面和后面,只绘制面的“前面”。虽然“前面”“后面”的定义可以应人而易,但一般为所有的“前面”定义统一的顶点顺序(顺时针或是逆时针方向)。 只绘制“前面”的过程称为”Culling”。 下面代码设置逆时针方法为面的“前面”: gl.glFrontFace(GL10.GL_CCW);原创 2012-06-01 21:58:37 · 7242 阅读 · 0 评论 -
Android OpenGL ES 开发教程(20):颜色Color
OpenGL ES 支持的颜色格式为RGBA模式(红,绿,蓝,透明度)。颜色的定义通常使用Hex格式0xFF00FF 或十进制格式(255,0,255), 在OpenGL 中却是使用0…1之间的浮点数表示。 0为0,1相当于255(0xFF)。 我们在Android OpenGL ES 开发教程(19):绘制迷你太阳系 绘制了红太阳,蓝地球,白月亮。使用的是glColor4f 来指定颜色的. 这原创 2012-05-31 08:58:31 · 6549 阅读 · 0 评论 -
Android OpenGL ES 开发教程(19):绘制迷你太阳系
前面介绍了3D坐标系统和3D坐标变换以及在OpenGL ES中坐标变换的过程,并与相机拍照片的过程做类比,以便更好的理解这OpenGL中构造3D模型的一部步骤: 本例提供绘制一个迷你太阳系系统作为前面知识的总结,这个迷你太阳系,有一个红色的太阳,一个蓝色的地图和一个白色的月亮构成: 太阳居中,逆时针自转。地球绕太阳顺时针公转,本身不自转。月亮绕地球顺时针公转,自身逆时针自转。 为简单原创 2012-05-30 08:19:31 · 8253 阅读 · 1 评论 -
Android OpenGL ES 开发教程(18):Viewport变换
摄影师调整好相机和被拍摄物体的位置角度(modelview) ,对好焦距(projection)后,就可以按下快门拍照了,拍好的照片可以在计算机上使用照片浏览器查看照片,放大,缩小,拉伸,并可以将照片显示窗口在屏幕上任意拖放。对应到3D绘制就是Viewport 变换,目前的显示器大多还是2D的,viewport(显示区域)为一个长方形区域,并且使用屏幕坐标系来定义: OpenGL ES 中使原创 2012-05-29 08:15:32 · 6635 阅读 · 0 评论 -
Android OpenGL ES 开发教程(17):投影变换Projection
前面ModelView变换相当于拍照时放置相机和调整被拍物体的位置和角度。投影变换则对应于调整相机镜头远近来取景。 下面代码设置当前Matrix模式为Projection投影矩阵: gl.glMatrixMode(GL_PROJECTION); gl.glLoadIdentity(); 后续的坐标变换则针对投影矩阵。投影变换的目的是定义视锥(viewing volume),视锥一方原创 2012-05-28 08:27:57 · 7229 阅读 · 0 评论 -
Android OpenGL ES 开发教程(16):Viewing和Modeling(MODELVIEW) 变换
Viewing和Modeling 变换关系紧密,对应到相机拍照为放置三角架和调整被拍物体位置及角度,通常将这两个变换使用一个modelview 变换矩阵来定义。对于同一个坐标变换,可以使用不同的方法来想象这个变换,比如将相机向某个方向平移一段距离,效果等同于将被拍摄的模型(model)向相反的方向平移同样的距离(相对运动)。两个不同的空间想象方法对于理解坐标变换各有其优缺点。你可以使用适合自己理解原创 2012-05-27 10:48:48 · 7108 阅读 · 1 评论 -
Android OpenGL ES 开发教程(15):通用的矩阵变换指令
Android OpenGL ES 对于不同坐标系下坐标变换,大都使用矩阵运算的方法来定义和实现的。这里介绍对应指定的坐标系(比如viewmodel, projection或是viewport) Android OpenGL ES支持的一些矩阵运算及操作。 OpenGL ES 中使用四个分量(x,y,z,w)来定义空间一个点,使用4个分量来描述3D坐标称为齐次坐标 :所谓齐次坐标就是将一个原本是原创 2012-05-26 14:59:07 · 6720 阅读 · 1 评论 -
Android OpenGL ES 开发教程(14):三维坐标系及坐标变换初步
OpenGL ES图形库最终的结果是在二维平面上显示3D物体(常称作模型Model)这是因为目前的打部分显示器还只能显示二维图形。但我们在构造3D模型时必须要有空间现象能力,所有对模型的描述还是使用三维坐标。也就是使用3D建模,而有OpenGL ES库来完成从3D模型到二维屏幕上的显示。 这个过程可以分成三个部分: 坐标变换,坐标变换通过使用变换矩阵来描述,因此学习3D绘图需要了解一些空间原创 2012-05-25 08:11:28 · 10657 阅读 · 0 评论 -
Android OpenGL ES 开发教程(13):阶段小结
之前介绍了什么是 OpenGL ES ,OpenGL ES 管道的概念,什么是EGL,Android中OpenGL ES的开发包以及GLSurfaceView,OpenGL ES所支持的基本几何图形:点,线,面,已及如何使用这些基本几何通过构成较复杂的图像(20面体)。 Android OpenGL ES 开发教程(1):导言Android OpenGL ES 开发教程(2):关于OpenG原创 2012-05-24 08:38:41 · 5924 阅读 · 0 评论 -
Android OpenGL ES 开发教程(12):绘制一个20面体
前面介绍了OpenGL ES所有能够绘制的基本图形,点,线段和三角形。其它所有复杂的2D或3D图形都是由这些基本图形构成。 本例介绍如何使用三角形构造一个正20面体。一个正20面体,有12个顶点,20个面,30条边构成: 创建一个DrawIcosahedron Activity, 定义20面体的12个顶点,和20个面如下: static final float X=.5257311121原创 2012-05-23 08:14:29 · 7286 阅读 · 2 评论 -
Android OpenGL ES 开发教程(11):绘制三角形Triangle
三角形为OpenGL ES支持的面,同样创建一个DrawTriangle Activity,定义6个顶点使用三种不同模式来绘制三角形: float vertexArray[] = { -0.8f, -0.4f * 1.732f, 0.0f, 0.0f, -0.4f * 1.732f, 0.0f, -0.4f, 0.4f * 1.732f, 0.0f, 0.0f, -0.0f * 1.原创 2012-05-22 08:32:49 · 6136 阅读 · 0 评论 -
Android OpenGL ES 开发教程(10):绘制线段Line Segment
创建一个DrawLine Activity,定义四个顶点: float vertexArray[] = { -0.8f, -0.4f * 1.732f, 0.0f, -0.4f, 0.4f * 1.732f, 0.0f, 0.0f, -0.4f * 1.732f, 0.0f, 0.4f, 0.4f * 1.732f, 0.0f, }; 分别以三种模式GL_LINES,GL_LINE原创 2012-05-21 08:32:04 · 7791 阅读 · 0 评论 -
Android OpenGL ES 开发教程(9):绘制点Point
上一篇介绍了OpenGL ES能够绘制的几种基本几何图形:点,线,三角形。将分别介绍这几种基本几何图形的例子。为方便起见,暂时在同一平面上绘制这些几何图形,在后面介绍完OpenGL ES的坐标系统和坐标变换后,再介绍真正的3D图形绘制方法。 在Android OpenGL ES 开发教程(7):创建实例应用OpenGLDemos程序框架 创建了示例应用的程序框架,并提供了一个“Hello Wor原创 2012-05-18 08:26:17 · 6726 阅读 · 3 评论 -
Android OpenGL ES 开发教程(8):基本几何图形定义
在前面Android OpenGL ES 开发教程(7):创建实例应用OpenGLDemos程序框架 我们创建了示例程序的基本框架,并提供了一个“Hello World”示例,将屏幕显示为红色。 本例介绍OpenGL ES 3D图形库支持的几种基本几何图形,本篇部分内容与Android OpenGL ES 简明开发教程三:3D绘图基本概念 类似。 通常二维图形库可以绘制点,线,多边形,圆弧,路原创 2012-05-17 08:55:41 · 6445 阅读 · 0 评论 -
Android OpenGL ES 开发教程(7):创建实例应用OpenGLDemos程序框架
有了前面关于Android OpenGL ES的介绍,可以开始创建示例程序OpenGLDemos。 使用Eclipse 创建一个Android项目 Project Name: OpenGLDemosBuild Target: Android 1.6 ( >1.5 即可)Application Name: Android OpenGL ES DemosPackage Name: com.ps原创 2012-05-16 08:19:03 · 7381 阅读 · 3 评论 -
Android OpenGL ES 开发教程(6):GLSurfaceView
Android OpenGL ES 相关的包主要定义在 javax.microedition.khronos.opengles GL 绘图指令javax.microedition.khronos.egl EGL 管理Display, surface等android.opengl Android GL辅助类,连接OpenGL 与Android View,Activityjavax.nio Bu原创 2012-05-15 07:16:18 · 7523 阅读 · 1 评论 -
Android OpenGL ES 开发教程(5):关于EGL
OpenGL ES的javax.microedition.khronos.opengles 包定义了平台无关的GL绘图指令,EGL(javax.microedition.khronos.egl ) 则定义了控制displays ,contexts 以及surfaces 的统一的平台接口。 Display(EGLDisplay) 是对实际显示设备的抽象。Surface(EGLSu原创 2012-05-14 08:32:47 · 13599 阅读 · 0 评论 -
Android OpenGL ES 开发教程(4):OpenGL ES API 命名习惯
OpenGL ES是个跨平台的3D图形开发包规范,最常见的实现是采用C语言实现的,Android OpenGL ES 实现上是使用Java 语言对底层的C接口进行了封装,因此在android.opengl javax.microedition.khronos.egl ,javax.microedition.khronos.opengles 包中定义的OpenGL相关的类和方法带有很强的C语言色彩。原创 2012-05-13 08:50:47 · 6268 阅读 · 0 评论 -
Android OpenGL ES 开发教程(3):OpenGL ES管道(Pipeline)
大部分图形系统都可以比作工厂中的装配线(Assemble line)或者称为管道(Pipeline)。前一道的输出作为下道工序的输入。主CPU发出一个绘图指令,然后可能由硬件部件完成坐标变换,裁剪,添加颜色或是材质,最后在屏幕上显示出来。 OpenGL ES 1.x 的工序是固定的,称为Fix-Function Pipeline,可以想象一个带有很多控制开关的机器,尽管加工的工序是固定的,但是可原创 2012-05-12 11:20:58 · 7880 阅读 · 0 评论 -
Android OpenGL ES 开发教程(2):关于OpenGL ES
什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库。为桌面版本OpenGL 的一个子集。OpenGL ES 定义了一个在移动平台上能够支持OpenGL最基本功能的精简标准,以适应如手机,PDA或其它消费者移动终端的显示系统。Khronos Group 定义和管理了OpenGL ES标准原创 2012-05-11 08:11:52 · 7024 阅读 · 0 评论 -
Android OpenGL ES 开发教程(1):导言
Android ApiDemos到目前为止,介绍完了出View以外的所有例子,在介绍Graphics示例时跳过了和OpenGL ES 相关的例子,OpenGL ES 3D图形开发需要专门的开发教程,因此从今天开始一边继续Android ApiDemos Views例子的解析,同时开始Android OpenGL ES 开发教程。 在学习Android OpenGL ES开发之前,你必须具备Jav原创 2012-05-10 08:10:52 · 8988 阅读 · 1 评论 -
Android OpenGL ES 开发中的Buffer使用
在前面介绍Android OpenGL ES简明开发教程 说过为了提高性能,通常将顶点,颜色等值存放在java.nio 包中定义的Buffer类中。 ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4); vbb.order(ByteOrder.nativeOrder()); vertexBuffer = vbb.asF原创 2012-05-13 08:59:40 · 7082 阅读 · 0 评论 -
Android OpenGL ES 简明开发教程七:材质渲染
前面讨论了如何给3D图形染色,更一般的情况是使用位图来给Mesh上色(渲染材质)。主要步骤如下: 创建Bitmap对象 使用材质渲染,首先需要构造用来渲染的Bitmap对象,Bitmap对象可以从资源文件中读取或是从网络下载或是使用代码构造。为简单起见,本例从资源中读取: Bitmap bitmap = BitmapFactory.decodeResource(contect.getReso原创 2012-05-02 13:35:51 · 10105 阅读 · 1 评论 -
Android OpenGL ES 简明开发教程六: 真正的3D图形
前面的例子尽管使用了OpenGL ES 3D图形库,但绘制的还是二维图形(平面上的正方形)。Mesh(网格,三角面)是构成空间形体的基本元素,前面的正方形也是有两个Mesh构成的。本篇将介绍使用Mesh构成四面体,椎体等基本空间形体。 Design设计 在使用OpenGL 框架时一个好的设计原则是使用“Composite Pattern”,本篇采用如下设计: Mesh 首先定义一个基类原创 2012-05-02 08:26:14 · 9167 阅读 · 5 评论 -
Android OpenGL ES 简明开发教程五:添加颜色
前面的例子显示的正方形都是白色,看其来不是很吸引人,本篇介绍如何给Mesh(网格)添加颜色。OpenGL ES使用颜色是我们熟知的RGBA模式(红,绿,蓝,透明度)。 颜色的定义通常使用Hex格式0xFF00FF 或十进制格式(255,0,255), 在OpenGL 中却是使用0…1之间的浮点数表示。 0为0,1相当于255(0xFF)。 最简单的上色方法叫做顶点着色(Vertxt color原创 2012-05-02 08:23:13 · 7055 阅读 · 1 评论 -
Android OpenGL ES 简明开发教程四:3D 坐标变换
本篇介绍3D 坐标系下的坐标变换transformations。 Coordinate System坐标系 OpenGL使用了右手坐标系统,右手坐标系判断方法:在空间直角坐标系中,让右手拇指指向x轴的正方向,食指指向y轴的正方向,如果中指能指向z轴的正方向,则称这个坐标系为右手直角坐标系。 Translate平移变换 方法public abstract void glTransla原创 2012-05-02 08:19:21 · 8474 阅读 · 8 评论 -
Android OpenGL ES 简明开发教程三:3D绘图基本概念
前面介绍了使用Android 编写OpenGL ES应用的程序框架,本篇介绍3D绘图的一些基本构成要素,最终将实现一个多边形的绘制。 一个3D图形通常是由一些小的基本元素(顶点,边,面,多边形)构成,每个基本元素都可以单独来操作。 Vertex (顶点) 顶点是3D建模时用到的最小构成元素,顶点定义为两条或是多条边交会的地方。在3D模型中一个顶点可以为多条边,面或是多边形所共享。一个顶点也可原创 2012-05-01 22:07:47 · 12840 阅读 · 5 评论 -
Android OpenGL ES 简明开发教程二:构造OpenGL ES View
在Andorid平台上构造一个OpenGL View非常简单,主要有两方面的工作: GLSurfaceView Android平台提供的OpenGL ES API主要定义在包android.opengl ,javax.microedition.khronos.egl ,javax.microedition.khronos.opengles ,java.nio 等几个包中,其中类GLSurfac原创 2012-05-01 21:59:54 · 12793 阅读 · 0 评论