OpenGL ES的概念

GPU

GPU是图像处理单元,能够结合集合、颜色、灯光和其他的数据而产生一个屏幕图像的硬件组件

  1. GPU的在1s可以进行10亿次的矢量运算,以至于几乎不会影响性能

buffer

buffer分为 frame buffer 和 render buffer两大类,其中frame buffer相当于render buffer的管理者,frame buffer Object 即称为FBO,常用作离屏渲染缓存等。render buffer 又可以分为color buffer、depath buffer、stencil buffer三类。

  1. frame buffer 仅仅是管理者,不需要分配内存;render buffer需要分配内存,且只有在分内存的时候才能会确定类型。
  2. 只有在render buffer绑定到frame buffer,之后的绘制才能起作用

深度测试

3D绘制中有【深度】的概念。举个例子,A在z轴的2,B在z轴的1,摄像机在z轴的-10。那么A的深度就比B大。
openGLES默认是不开启深度测试的(虽然几乎所有app都会用到),这也就是说,后绘制的物体(颜色缓冲区中),会覆盖先绘制的物体。
深度缓存又称为Z缓存,片元渲染出来后,会

简单的使用【深度测试】
  1. 深度基准默认为GL_LESS

渲染

用一个3D数据生成一个2D图像的过程就是渲染。 计算机上显示的图片都是由对应的颜色点组成的,这些矩形的颜色点叫做像素。它会为GPU提供要处理的3D数据 (缓存是提供数据最好的方法)

  1. 在渲染时,GPU把纯数学OPenGL ES坐标系中 转化成帧缓存中对应的真实像素位置。帧缓存中像素位置叫做视口(viewport)坐标。
  2. 转化几何形状数据未帧缓存中的颜色像素的渲染过程叫做【光栅化rasterizing】,每一个颜色像素叫做片元【fragment】。
  3. 当openGL ES没有包含【纹理】,GPU根据包含该片元的对象的顶点颜色计算每一个片元的颜色;否则根据当前绑定的纹理缓存中的【纹素】来计算每一个片元的颜色

帧缓存

GPU需要知道应该在内存的那个地方存储渲染出来的2D图像像素数据、江西为GPU提供数据的缓存一样,接受渲染结果的缓冲区就叫做帧缓存(frame buffer)

  1. 帧缓存不需要初始化,因为渲染指令会在合适的时候替换缓存的内容。
  2. 同时可以存在很多个帧缓存
  3. 屏幕显示像素受到钱缓存帧的控制,前缓冲帧和后缓冲帧受操作系统的控制,后缓存帧渲染完后立刻交换。

openGl ES的上下文

用于配置OpenGL ES的保存在特定平台的软件数据结构中的信息会被封装到一个上下文context中。

纹理

纹理是一个用来保存图像的颜色元素值OpenGL ES缓存。保存颜色值需要耗费很多内存,所以尽量用最小的图像来产生可以接受的渲染结果。 纹理的尺寸永远是:0~1

纹理步骤:

  1. 纹理映射:对齐纹理和顶点,让GPU知道每一个片元的颜色由哪些纹素决定
  2. 纹理取样:从绑定的纹理中选择纹素。

取样 (纹理映射实际上就是就是片元取样的过程)

  1. 如果没有纹理,则GPU根据包含该片元的对象的顶点颜色计算每一个片元的颜色
  2. 如果有纹理,则GPU根据当前绑定的纹理缓存中的【纹素】来计算每一个片元的颜色。

取样方式

  1. 线性取样:GPU为计算一个片元的最终颜色而读取多个纹素的颜色
  2. MIP贴图取样:是一个为纹理存储多个细节级别的技术。高细节的纹理会在S和T轴上存储很多纹理。如果片元的u、v纹理坐标和S、T轴的纹素存在较紧关系,GPU可以减少取样纹素的数量,减少访问内存的次数。
    一般MIP贴图取样可以通过减少GPU取样次数的方式提高渲染的性能,但MIP贴图为每一个纹素的内存增加了1/3。通常的测量是通过分别测试在2种取样方法,获取最合适的取样方式。
openGL坐标和纹理坐标系.png

PS:iOS的纹理坐标系和安卓一样,都是以左上角为原点

static final float postion
![Uploading 屏幕快照 2017-10-30 下午3.03.10_009211.png . . .]
COORD1[] = {
            -1.0f, -1.0f,
            1.0f, -1.0f,
            -1.0f, 1.0f,
            1.0f, 1.0f,
    };

    static final float TEXTURE_COORD1[] = {
            0.0f, 1.0f,
            1.0f, 1.0f,
            0.0f, 0.0f,
            1.0f, 0.0f,
    };

纹素取样,坐标映射关系.png

PS:详情见:http://blog.csdn.net/yellowcath/article/details/46534559

纹理压缩

  1. 用来初始化压缩纹理的图像要求是尺寸是2的幂,同事还是个正方形。例如1个256*256的图像可以用在一个压缩纹理缓存中

光照

所谓光照指的是GPU为每一个顶点进行光线计算,然后进行插值计算,计算出每一个片元的最终颜色

  1. openGLES的颜色模拟主要有:环境光、漫反射光diffuseColor、镜面反射光
  2. 光线取决于3个关联因素:关系的设置,三角形相对光线的角度、三角形的材质
  3. 大部分应用都是通过某种灯光和纹理来决定片元的颜色
  4. 光线和几何图形相互作用的关键是:计算出每个物体照射和发散出的光线数量
  5. 光线计算过程还包括材质、聚光灯效果、衰减因子等,但是GLKit简化了这一过程。

深度渲染缓存

基本所有的openGL应用都会用到【深度缓存】,大部分情况下可以使用它来消除对三角形、线段、点的进行排序(渲染的顺序)的需求。通常被称为Z缓存(Z轴上的缓存)

projectionMatrix 和modelviewMatrix

projectionMatrix 定义了用于整个场景的坐标系;modelviewMatrix定义了一个控制对象的显示位置的坐标系,简单的对象移动效果,可以通过改变modelviewMatrix来实现。


矩阵转化.png
动画移动

动画一般有2种情况,

  1. 对面相对于用户【视点】的移动
  2. 用户视点相对于对象的移动
    上面2种情况是通过矩阵变化,定义了几何图形是如何映射到像素颜色缓冲区的片元位置。通过改变了变化矩阵,来改变最终的映射。实际上用户的位置是不会变的,只是计算出来的对象位置相对于用户发生了改变

对象的绘画

几何坐标数据、纹理通过GPU绘画出来的步骤:

  1. 将几何坐标数据存储到GPU内存中
  2. 启动GPU中的顶点数据、纹理数据的,设置指针
  3. 装饰器属性设置、并编译启动 baseEffect.prepareToDraw
  4. 调用gldraw方法开始绘图

PS:同一个几何数据,可以通过编译启动2次着色器,绘画2个对象

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容