
OpenGl ES
jeanszu
这个作者很懒,什么都没留下…
展开
-
Android OpenGL ES 简明开发教程三:3D绘图基本概念
前面介绍了使用Android 编写OpenGL ES应用的程序框架,本篇介绍3D绘图的一些基本构成要素,最终将实现一个多边形的绘制。一个3D图形通常是由一些小的基本元素(顶点,边,面,多边形)构成,每个基本元素都可以单独来操作。Vertex (顶点)顶点是3D建模时用到的最小构成元素,顶点定义为两条或是多条边交会的地方。在3D模型中一个顶点可以为多条边,面或是多边形所共享。一个顶点也可转载 2012-07-11 20:48:37 · 1095 阅读 · 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-07-18 17:15:28 · 549 阅读 · 0 评论 -
Android OpenGL ES 开发教程(14):三维坐标系及坐标变换初步
OpenGL ES图形库最终的结果是在二维平面上显示3D物体(常称作模型Model)这是因为目前的打部分显示器还只能显示二维图形。但我们在构造3D模型时必须要有空间现象能力,所有对模型的描述还是使用三维坐标。也就是使用3D建模,而有OpenGL ES库来完成从3D模型到二维屏幕上的显示。这个过程可以分成三个部分:坐标变换,坐标变换通过使用变换矩阵来描述,因此学习3D绘图需要了解一些空间转载 2012-07-18 17:30:34 · 1298 阅读 · 0 评论 -
Android OpenGL ES 开发教程(15):通用的矩阵变换指令
Android OpenGL ES 对于不同坐标系下坐标变换,大都使用矩阵运算的方法来定义和实现的。这里介绍对应指定的坐标系(比如viewmodel, projection或是viewport) Android OpenGL ES支持的一些矩阵运算及操作。OpenGL ES 中使用四个分量(x,y,z,w)来定义空间一个点,使用4个分量来描述3D坐标称为齐次坐标 :所谓齐次坐标就是将一个原本是转载 2012-07-18 17:43:22 · 772 阅读 · 0 评论 -
Android OpenGL ES 开发教程(16):Viewing和Modeling(MODELVIEW) 变换
Viewing和Modeling 变换关系紧密,对应到相机拍照为放置三角架和调整被拍物体位置及角度,通常将这两个变换使用一个modelview 变换矩阵来定义。对于同一个坐标变换,可以使用不同的方法来想象这个变换,比如将相机向某个方向平移一段距离,效果等同于将被拍摄的模型(model)向相反的方向平移同样的距离(相对运动)。两个不同的空间想象方法对于理解坐标变换各有其优缺点。你可以使用适合自己理解转载 2012-07-18 19:59:53 · 886 阅读 · 0 评论 -
Android OpenGL ES 开发教程(17):投影变换Projection
前面ModelView变换相当于拍照时放置相机和调整被拍物体的位置和角度。投影变换则对应于调整相机镜头远近来取景。下面代码设置当前Matrix模式为Projection投影矩阵:gl.glMatrixMode(GL_PROJECTION);gl.glLoadIdentity();后续的坐标变换则针对投影矩阵。投影变换的目的是定义视锥(viewing volume),视锥一方面定义了转载 2012-07-18 20:04:24 · 994 阅读 · 0 评论 -
Android OpenGL ES 开发教程(18):Viewport变换
摄影师调整好相机和被拍摄物体的位置角度(modelview) ,对好焦距(projection)后,就可以按下快门拍照了,拍好的照片可以在计算机上使用照片浏览器查看照片,放大,缩小,拉伸,并可以将照片显示窗口在屏幕上任意拖放。对应到3D绘制就是Viewport 变换,目前的显示器大多还是2D的,viewport(显示区域)为一个长方形区域,并且使用屏幕坐标系来定义:OpenGL ES 中使转载 2012-07-18 20:11:49 · 2605 阅读 · 0 评论 -
Android OpenGL ES 开发教程(19):绘制迷你太阳系
前面介绍了3D坐标系统和3D坐标变换以及在OpenGL ES中坐标变换的过程,并与相机拍照片的过程做类比,以便更好的理解这OpenGL中构造3D模型的一部步骤:本例提供绘制一个迷你太阳系系统作为前面知识的总结,这个迷你太阳系,有一个红色的太阳,一个蓝色的地图和一个白色的月亮构成:太阳居中,逆时针自转。地球绕太阳顺时针公转,本身不自转。月亮绕地球顺时针公转,自身逆时针自转。为简单起见转载 2012-07-19 20:18:25 · 2019 阅读 · 0 评论 -
Android OpenGL ES 开发教程(24):Depth Buffer
OpenGL ES 中Depth Buffer 保存了像素与观测点之间的距离信息,在绘制3D图形时,将只绘制可见的面而不去绘制隐藏的面,这个过程叫”Hidden surface removal” ,采用的算法为”The depth buffer algorithm”。一般来说,填充的物体的顺序和其顺序是一致的,而要准确的显示绘制物体在Z轴的前后关系,就需要先绘制距离观测点(ViewPoint)转载 2012-07-19 20:38:05 · 795 阅读 · 0 评论 -
Android OpenGL ES 开发教程(26):设置光照效果Set Lighting
上一篇简单介绍了OpenGL中使用的光照模型,本篇结合OpenGL ES API说明如何使用光照效果:设置光源定义法线设置物体材料光学属性光源OpenGL ES中可以最多同时使用八个光源,分别使用0到7表示。OpenGL ES光源可以分为平行光源(Parallel light source), 代表由位于无限远处均匀发光体,太阳可以近似控制平行光源。点光源(Spot l转载 2012-07-19 21:05:03 · 1773 阅读 · 0 评论 -
Android OpenGL ES 开发教程(22):绘制一个球体
OpenGL ES 只能通过绘制三角形来构造几何图形,比如前面绘制的20面体Android OpenGL ES 开发教程(12):绘制一个20面体,通过增加正多面体的边数,就可以构造出一个球体:在项目中创建一个Sphere 类,它的Draw 方法,通过绘制三角形来构造球体,并且为其添加法线,法线主要用于光照效果,将在后面介绍。public void draw(GL10 gl) { f转载 2012-07-19 20:25:42 · 1027 阅读 · 0 评论 -
Android OpenGL ES 开发教程(25):OpenGL光照模型
前面绘制球体时Android OpenGL ES 开发教程(22):绘制一个球体 ,为了能看出3D效果,给场景中添加光源。如果没有光照,绘出的球看上去和一个二维平面上圆没什么差别,如下图,左边为有光照效果的球体,右边为同一个球体但没有设置光源,看上去就没有立体效果,因此OpenGL 光照效果对显示3D效果非常明显。在OpenGL 光照模型中光源和光照效果可以细分为红,绿,蓝三个部分,光源由转载 2012-07-19 20:43:44 · 1729 阅读 · 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-07-19 21:24:38 · 1703 阅读 · 0 评论 -
Android OpenGL ES 开发教程(23):FrameBuffer
OpenGL ES 中的FrameBuffer 指的是存储像素的内存空间。对应一个二维图像,如果屏幕分辨率为1280X1024 ,如果屏幕支持24位真彩色 (RGB),则存储这个屏幕区域的内存至少需要1024X1280X3个字节。此外如果需要支持透明度(Alpha),则一个像素需要4个字节。对应3D图像来说,上面存储显示颜色的Buffer称为Color Buffer,除Color Buffer转载 2012-07-19 20:32:23 · 1459 阅读 · 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-07-19 20:20:17 · 1057 阅读 · 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_LINE转载 2012-07-14 19:31:57 · 720 阅读 · 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-07-14 16:24:25 · 484 阅读 · 0 评论 -
Android OpenGL ES 开发教程 从入门到精通
Android OpenGL ES 简明开发教程Android OpenGL ES 简明开发教程一:概述Android OpenGL ES 简明开发教程二:构造OpenGL ES ViewAndroid OpenGL ES 简明开发教程三:3D绘图基本概念Android OpenGL ES 简明开发教程四:3D 坐标变换Android OpenGL ES 简明开发教程五:添加颜色Andro转载 2012-07-14 16:14:23 · 644 阅读 · 0 评论 -
Android OpenGL ES 简明开发教程四:3D 坐标变换
本篇介绍3D 坐标系下的坐标变换transformations。Coordinate System坐标系OpenGL使用了右手坐标系统,右手坐标系判断方法:在空间直角坐标系中,让右手拇指指向x轴的正方向,食指指向y轴的正方向,如果中指能指向z轴的正方向,则称这个坐标系为右手直角坐标系。Translate平移变换方法public abstract void glTransla转载 2012-07-11 20:46:42 · 938 阅读 · 0 评论 -
Android OpenGL ES 简明开发教程六: 真正的3D图形
前面的例子尽管使用了OpenGL ES 3D图形库,但绘制的还是二维图形(平面上的正方形)。Mesh(网格,三角面)是构成空间形体的基本元素,前面的正方形也是有两个Mesh构成的。本篇将介绍使用Mesh构成四面体,椎体等基本空间形体。Design设计在使用OpenGL 框架时一个好的设计原则是使用“Composite Pattern”,本篇采用如下设计:Mesh首先定义一个基类 M转载 2012-07-14 15:53:51 · 1076 阅读 · 0 评论 -
Android OpenGL ES 简明开发教程七:材质渲染
前面讨论了如何给3D图形染色,更一般的情况是使用位图来给Mesh上色(渲染材质)。主要步骤如下:创建Bitmap对象使用材质渲染,首先需要构造用来渲染的Bitmap对象,Bitmap对象可以从资源文件中读取或是从网络下载或是使用代码构造。为简单起见,本例从资源中读取:帮助12Bitmap bitmap = BitmapFactory.de转载 2012-07-14 15:54:32 · 855 阅读 · 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-07-14 16:15:37 · 655 阅读 · 0 评论 -
Android OpenGL ES 开发教程(5):关于EGL
OpenGL ES的javax.microedition.khronos.opengles 包定义了平台无关的GL绘图指令,EGL(javax.microedition.khronos.egl )则定义了控制displays ,contexts 以及surfaces 的统一的平台接口。Display(EGLDisplay) 是对实际显示设备的抽象。Surface(EGLSurf转载 2012-07-14 16:50:34 · 609 阅读 · 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-07-14 17:58:14 · 746 阅读 · 0 评论 -
Android OpenGL ES 简明开发教程五:添加颜色
前面的例子显示的正方形都是白色,看其来不是很吸引人,本篇介绍如何给Mesh(网格)添加颜色。OpenGL ES使用颜色是我们熟知的RGBA模式(红,绿,蓝,透明度)。颜色的定义通常使用Hex格式0xFF00FF 或十进制格式(255,0,255), 在OpenGL 中却是使用0…1之间的浮点数表示。 0为0,1相当于255(0xFF)。最简单的上色方法叫做顶点着色(Vertxt color转载 2012-07-14 15:52:52 · 658 阅读 · 0 评论 -
Android OpenGL ES 开发教程(3):OpenGL ES管道(Pipeline)
大部分图形系统都可以比作工厂中的装配线(Assemble line)或者称为管道(Pipeline)。前一道的输出作为下道工序的输入。主CPU发出一个绘图指令,然后可能由硬件部件完成坐标变换,裁剪,添加颜色或是材质,最后在屏幕上显示出来。OpenGL ES 1.x 的工序是固定的,称为Fix-Function Pipeline,可以想象一个带有很多控制开关的机器,尽管加工的工序是固定的,但是可转载 2012-07-14 16:32:49 · 494 阅读 · 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-07-14 16:44:16 · 525 阅读 · 0 评论 -
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,转载 2012-07-14 17:48:40 · 785 阅读 · 0 评论 -
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-07-14 19:35:24 · 507 阅读 · 0 评论 -
Android OpenGL ES 开发教程(12):绘制一个20面体
前面介绍了OpenGL ES所有能够绘制的基本图形,点,线段和三角形。其它所有复杂的2D或3D图形都是由这些基本图形构成。本例介绍如何使用三角形构造一个正20面体。一个正20面体,有12个顶点,20个面,30条边构成:创建一个DrawIcosahedron Activity, 定义20面体的12个顶点,和20个面如下:static final float X=.5257转载 2012-07-14 19:40:51 · 607 阅读 · 0 评论 -
Android OpenGL ES 开发教程(8):基本几何图形定义
在前面Android OpenGL ES 开发教程(7):创建实例应用OpenGLDemos程序框架 我们创建了示例程序的基本框架,并提供了一个“Hello World”示例,将屏幕显示为红色。本例介绍OpenGL ES 3D图形库支持的几种基本几何图形,本篇部分内容与Android OpenGL ES 简明开发教程三:3D绘图基本概念 类似。通常二维图形库可以绘制点,线,多边形,圆弧,路转载 2012-07-14 19:12:08 · 582 阅读 · 0 评论 -
Android OpenGL ES 开发教程(9):绘制点Point
上一篇介绍了OpenGL ES能够绘制的几种基本几何图形:点,线,三角形。将分别介绍这几种基本几何图形的例子。为方便起见,暂时在同一平面上绘制这些几何图形,在后面介绍完OpenGL ES的坐标系统和坐标变换后,再介绍真正的3D图形绘制方法。在Android OpenGL ES 开发教程(7):创建实例应用OpenGLDemos程序框架 创建了示例应用的程序框架,并提供了一个“Hello Wor转载 2012-07-14 19:25:14 · 721 阅读 · 0 评论 -
Android OpenGL ES 开发教程(21):定义3D模型的前面和后面
OpenGL ES 使用也只能使用三角形来定义一个面(Face),为了获取绘制的高性能,一般情况不会同时绘制面的前面和后面,只绘制面的“前面”。虽然“前面”“后面”的定义可以应人而易,但一般为所有的“前面”定义统一的顶点顺序(顺时针或是逆时针方向)。 只绘制“前面”的过程称为”Culling”。下面代码设置逆时针方法为面的“前面”:gl.glFrontFace(GL10.GL_CCW);转载 2012-07-19 20:22:17 · 830 阅读 · 0 评论