OpenGLES应用开发实践指南
OpenGL ES 2.0编程指南中文版 pdf版本适合从事安卓下开发OpenGL ES应用6.顶点属性、顶点矩阵和缓冲区日标指定顶点属性数据顶点属性常量顶点矩阵在顶点着色器里声明顶点属性绑定顶点属性在顶点着色器了改变顶点缓冲区目标缓冲区目标匹配Tp性能7.基本图元装配和光栅化基本图元三角形直线点类型基本draw执行tips集坐标系统边透视分割视口转换旋转选择多边形设置8.顶点着色器顶点着色器预览顶点着色器变量向前兼容ES2.0顶点着色器限制顶点着色器例子个顶点着色器例子顶点着色器光照普通贴图坐标系顶点皮肤OpenGl ES1.1固定顶点管道与ES2.0顶点着色器9.贴图贴图基础2D贴图方体贴图贴图对象和装载贴图贴图过滤和Mip贴图自动Mip贴图产生贴图坐标系封装翻译:江湖游侠QQ;86864472cmal: mazhaovang2005 agnail. com本翻泽花费作者3个月有佘,能力有限,错误在所难免,欢迎交流、指出错误,转载请注明出处,在片段着色器上使用贴图使用立体贴图的例子压缩贴图贴图 subimage详述从颜色缓冲区拷贝贴图数据可选的扩展3D贴图压缩 ericsson贴图浮点数贴图Non power of two贴图10片段着色器固定行为片段着色器片段着色器概述刂建特殊变量创建恒量精度质量FS20片段着色器限制使用固定行为技术的着色器多重贴图雾透明测试使用平滑着色1片段着色器行为缓冲器请求额外的缓冲区清除缓冲区对帧缓冲区使用遮挡只读片段着色器测试和运行使用剪裁测试Stencil测试深度缓冲区测试混合抖动多重采样和抗锯齿帧缓冲区读写像素数据12帧缓冲区什么是帧缓冲区帧缓冲区和 render缓冲区选择一个 render缓冲区贴图作为帧缓冲区属性帧缓冲区FGL窗口创造个帧缓冲区和 render缓冲区目标使用render缓冲区使用帧缓冲区使用 render缓冲区作为帧缓冲区属性翻译:江湖游侠QQ;86864472cmal: mazhaovang2005 agnail. com本翻泽花费作者3个月有佘,能力有限,错误在所难免,欢迎交流、指出错误,转载清注明出处,使用2D贴图作为帧缓冲区属性使用3D贴图作为帧缓冲区属性检查帧缓冲 completeness删除帧缓冲区和 render缓冲区淜除 render缓冲区目标仍然使用帧缓冲区属性读像素和帧缓冲区日标例子Tips和 Tricks性能13Opcn(iI.FS20先进编程Per片段光照正常地图的光照光照阴影光照方程环境地图微粒系统和点 sprites微粒系统设置微粒系统顶点阴影微粒系统片段着色器图像post过程Render对贴图设置片段着色器模糊光照 bloomProjective贴图Projective贴图基础Projective贴图矩阵Projective聚光灯阴影3D贴图噪声噪声产生使用噪声贴图程序个贴图程序例子贴图抗模糊处理对 procedural更好的 render贴图14 state queriesOpengl es20创建一个 queries字符串执行 querying的限制Querying OpenGL ES状态HintsQueries名字实体NON编程运行控制和 queries明影和矩阵属性贴图属性据帧缓冲区翻译:江湖游侠QQ;86864472cmal: mazhaovang2005 agnail. com本翻泽花费作者3个月有佘,能力有限,错误在所难免,欢迎交流、指出错误,转载请注明出处,Render缓冲区和平的缓冲区15在不同平台使用 OpengL ES和EGL不同半台概述在线资源C++便携性OpenKoDE与平台有关的进制码扩展A GL HALF FLOAT OES16位浮点数转换浮点数为半浮点数B编译行为角和三角法行为Exponential行为ommon行为儿何图形行为矩阵行为矢量关系行为贴图表派生行为C着色器编程语言诂法DES框架API框架源码转变行为翻译:江湖游侠QQ;86864472cmal: mazhaovang2005 agnail. com本翻泽花费作者3个月有佘,能力有限,错误在所难免,欢迎交流、指出错误,转载请注明出处,1什么是 OpenGL Es?OpenGL ES是一个为便携或嵌入式设备例如:移动电话、PDAs、监视器、等,发展的3D绘图APs(应用编程接口)。 OpenGL ES是一个被叫做 Khronos联盟的组织创造的一系列APIs中的一个。 Khronos联盟成立于2000年一月,是一个专注为于持和嵌入式设备建立开放标准和自由版权的APIs的⊥业联盟。在桌面设备中有两个3DAPI接口, Directx和 OpengL。 DirectX是运行 Window系统平台事实上的3D标准,在3D游戏平台中主要的标准。 OpenG1是一个跨平台的3DAP标准,能够运行在linx系统,各种UNX系统, Mac osx和 Wicrosol系统等等。它是广泛接受的3DAPI,这个API被Dom和 Quake系列游戏使用。用于 Mac os x的接口,在CAD应用像CATA、数字建模应用像Maya和 Softimage/XSI。因为 Opengl作为3DAPI的广泛使用,这是很自然的从桌面的 OpenGL开始发展为手持设备和便携式开放标准的3DAPI;又因为仗用 OpenGL Es的设备地址空间和内存的限制低的内存带宽、敏感的电源功耗、缺乏浮点运算硬件,所以修改它以适用与手持和便携设备领域。工作组对 OpengL ES做了下面的一些定义限制。OpenGL ES APl是巨大的和复杂的,L作组的目标是建立个适合设备驱动程序。为此工作组删除了一些 OpenGLAPl的冗余没训,对同一种操作有多种实现方法,只留下主要的,多氽的技术被删除,例如:一个几何体,Opn(中可以使用立即模式、显示列表、顶点矩阵,在 OpenGL ES中只能使用顶点矩阵,显示列表和立即模式被移除。移除冗余是重要的,但保持兼容性也是重要的。尽可能的 OpengLEs被设计成 OpengL的嵌入式子集, Opengl将也能运行 OpenGL Es的程序。原因是作为一个子集能更好的应用桌面程序的代佔和工貝。虽然如此,也有偏离,特别是 OpenGL ES2.0,细节将在后面的章节讨论手持和便携设各的限制被引入,例如减少电力消耗、减少着色器性能,渲染质量被引入着色器语言。OpenGL es的设计者目标是确保最小的图像质量,大多数的手持设备只用一个有限的屏幕,在屏幕上做图尽可能的保持好的质量,将是重要的一项工作。类的mFs工作组提供确保各种 OpenGL ES设各正常T作、提供好的图像质量、健壮性的测试,这些设各必须通过完整的测试。共有三个 OpenGL Es白皮书被释放, OpengLES1.0、 OpenGLES1.和 OpenGL ES20Opengl es1.0和 OpenGL ES1.1描述固定功能管线从 Opengl13和 OpenGL1.5发展而米,Open(LES2.0描述可编程绘图管线,发展自 Open gL2.0,因为发展自 OpenGL,意味着Open(L是 OpengL Es的基础,决定着未来 Engl es的版本,Open(LES2.0来自Open(L2.0AP,桷保了对游戏的支持,例如在颜色调色板1用的图片来自demo球游戏, OpengL ES2.0的日标和他使用的着色器优良的效果例如环境绘制和per-fragment光照。这个游戏的例子在 OpenGL es2.0是很普遍的。有了 OpengL es2.0在桌面的应用将可以用」使携设备。在本章里,我们给 OpengL es2.0的管线一个介绍。Opengl es 2.0OpengL es2.0是本书中要讲的AP,日标是讲述完整的细节(核心和扩展),给出怎么使用的例子,讨论各种优化技术,读完本书希望能你能懂的 OpengL es2.0的核心AP,能够开发 Opengl es2.0的应用程序,不要担心技术细节,懂得怎么去⊥作。OpenGLES20包含两部分: OpengL ES20API说明和 OpenGL ES着色器话言说明,图11显示 Opengl es2.0图像管线,图11中的的着色器盒子描述了 OpenGL Es2.0的管道可编程阶段, Opengl es2.0可编程管线的每个阶段预览在下面介绍翻译:江湖游侠QQ;86864472cmal: mazhaovang2005 agnail. com本翻泽花费作者3个月有佘,能力有限,错误在所难免,欢迎交流、指出错误,转载清注明出处,Vertex arrays/Butter objectsVertexPrimitiveRasterizationShaderAssemblyAPITextureMemoryFragmentPer-FragmentShaderFramebufferOperationsFigure 1-1 OpenGL ES 2.0 Graphics Pipeline顶点着色器本节给出概述,后面章节深入介绍顶点着色器一般的编稈方法;属性顶点矩阵攴持的 Per vertex数据Uniforms一顶点着色器使用的常量数据Samplers被 Uniforms使用的特殊类型,在顶点着色器的贴图中使用,是可选项着色器编程一顶点着色器编程源码或可执行的部分顶点看色器的输出叫做 varying变量,在最初的光栅化阶段,这些变量被计算,作为片段着色器的输入,从顶点着色器的矩阵使用插补的方法产生片段着色器的变量,输入和输出在图12描述:翻译:江湖游侠QQ;86864472cmal: mazhaovang2005 agnail. com本翻泽花费作者3个月有佘,能力有限,错误在所难免,欢迎交流、指出错误,转载请注明出处,UniformsSamplers(optional)Attribute oVarying 0Attribute 1Varying 1Attribute 2Varying 2Attribute 3Varying 3Attribute 4Vertex shaderVarying 4Attribute 5varying 5Attribute 6Varying 5Attribute 7Varying 7gl_PositionTemporaryVariablesgl_ FrontFacinggl_PointsizeFigure 1-2 OpenGL ES 2.0 Vertex Shader顶点着色器被使用在传统的基于顶点的操作,例如位移炬阵、计算光照方程、产生贴图丛标。顶点着色器被应用指定,应用于客户的顶点转化。例1_1显示使用 OpenGL ES编程语言编写顶点着色器,后面章节再介绍编程的细节,现在仅需要知道它的大致就可以了,顶点着色器需要个位置和颜色数据作为输入属性,输入位置数据是4×4的矩阵,输出是变换后的位置和颜色。Example1-1 A Vertex Shader Example1. uniforms used by the vertex shader2. uniform mat4 u mvp Matrix; / matrix to convert P from model3i space to normalized device space5. /attributes input to the vertex shader6. attribute vec a position; / position value7. attribute vec a color; /input vertex color9. //varying variables C input to the fragment shade10. varying vecv color/output vertex col1112. void13. maino14.{15y color=a colorgl Position=u mvpMatrix"a position;17.}翻译:江湖游侠QQ;86864472cmal: mazhaovang2005 agnail. com本翻泽花费作者3个月有佘,能力有限,错误在所难免,欢迎交流、指出错误,转载请注明出处,第2行定义一个 uniform变量 u mvpMatriⅸx应用存储模型的关联视图和投射矩阵,6、7行定义输入顶点矩阵和顶点属性,10行定义顶点着色器输出的变量 per vertex。编译时gl Position被编详器自动定义,片段着色器的唯一的入口点是main函数,15行读入顶点属性 a color,输出顶点颜色 y color,16行变换后的矩阵位置输出到 gI Position基元装配基元是能够被 OpenGL ES绘制的几何物体,这些绘图命令描述了一个顶点属性和基元几何体以及基元类型的集合。顶点属性包括计算位置、颜色和贴图坐标的信息,他们将被输入到片段着色器中顶点着色器能绘制的几何图元包括三角形、直线、点,对每个图元必须判断是否位于投影平截体内,如果图元不完全在屮截体内部,将被视图平截体剪贴,如果完全在半截体外,将被丢弃,然后顶点位置被转变为屏幕坐标,剔除操作也能够舍弃一些图元,依据图元位于正面还是背面,剪切和剔除后,图元进入光栅化阶段光棚化图13所小,光栅化是转化图元为二维片段的过程,被片段着色器执行,二维的片段像素能够被绘制在屏幕上。Point-SpriteRasterizationFromPrimitiveLineRasterizationAssemblyOutput for each fragment-screen(xv, yw)coordinate,attributes such as colorTriangletexture coordinates. etcRasterizationTo Fragment Shader StageFigure 1-3 OpenGL ES 2.0 Rasterization Stage片段着色器如图14片段着色器使用下面的输入,执行光栅化后形成片段。Varying变量一光栅化阶段使用插补技术为片段着色器产生,顶点着色器的输出Uniforms-常量数据Samplers- Uniforms中特殊的类型,在图吋使用着色器程序—一片段着色器编程源码或可执行的部分翻译:江湖游侠QQ;86864472cmal: mazhaovang2005 agnail. com本翻泽花费作者3个月有佘,能力有限,错误在所难免,欢迎交流、指出错误,转载请注明出处,
用户评论