OpenGLES-理论准备

OpenGLES-理论准备

GitHub地址

https://github.com/softwarefaith/OpenGLES-Guide/tree/master

基础概念

  • GPU

图形处理单元,结合几何,颜色,灯光和其他数据产生屏幕硬件组件

CPU与GPU区别

  • 渲染

用3D数据生成一个2D图像的过程

  • 像素

一张图片由矩形的颜色点组成,这些颜色点为像素。

图像由像素构成,每个像素有红,蓝,绿 3个元素

OpenGL ES

什么是OpenGL-ES

OpenGL是一套应用程序编程接口(API),借助这个API我们开发人员就可以开发出对图形硬件具有访问的能力的程序。OpenGL ES是OpenGL的剪裁版本.

特性
  • 过程性

OpenGL不是面向对象的,所以OpenGL无法利用面向对象的特性

  • 双重实现

1软件

OpenGL-software.png

2硬件

OpenGL-hardware.png
与硬件关系

部分运行在CPU,部分运行在GPU上,横跨两个处理器之间,协调两个内存区域的数据交换。

OpenGL的组成
  • 图元函数:指定要生成图形或图像的图元。主要有两种类型,一种是绘制二维或三维的几何图元,如点,线,多边形等;另一种是离散型的实体,例如:位图。

  • 属性函数:属性函数主要是控制图元的外观及样式,例如:对图元的颜色、线型、光照及纹理等效果处理。

  • 观察函数:观察函数主要是对摄像机属性的操作。我们可以操作摄像机显示图形或图像近距或是远距效果。

  • 控制函数:能够让我们启用或禁用各种OpenGL的特性。

  • 查询函数:可以让我们查询OpenGL状态变量的值。

  • 输入与窗口控制函数:这个本身不属于OpenGL,但是由于我们会经常在程序中输入输出或是窗口控制操作,所以,这些函数还是比较重要的。

在iOS中需要类库:

iOS-OpenGL-FrameWork.png
开发约定

我们以后会见到OpenGL的函数多是以gl开头,因为OpenGL的函数遵循一定的命名约定,它可以告诉我们这个函数来自哪个函数库,并且还可以告诉我们这个函数的参数个数和类型。

OpenGL的函数是采用以下的书写格式:

<函数库前缀><根命令><可选的参数数量><可选的参数类型>

坐标系与变换

在开发OpenGL程序时,需要用到两个坐标系。一个称为对象坐标系,另一个称为世界坐标系。

第一个坐标系是我们在开发中使用的坐标系;第二个坐标系又称为窗口坐标系或屏幕坐标系,在这个坐标系中的单位是像素。

在绘制的过程中,OpenGL会自动实现从对象到窗口坐标系的转换,所需要的信息是屏幕中显示窗口的尺寸和用户希望显示对象空间的大小。OpenGL中所需要的坐标系变换由两个矩阵决定,即模型视图矩阵和投影矩阵,这些矩阵是OpenGL的状态的一部分。设置这两种矩阵的典型步骤包括以下三个步骤:

(1) 指定我们希望修改的矩阵。

(2) 将矩阵设为单位矩阵。

(3) 修改当前矩阵为用户期望的矩阵。
  </br>
  <code>
 glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluortho2D(-1.0,1.0,-1.0,1.0)
  </code>

状态保存

OpenGL在内部就是一个状态机,函数调用会修改其内部的状态,OpenGL的状态决定了图元的行为和绘制方式。我们对图元的属性和其他状态变量所进行的全部修改。在OpenGL中提供了两种类型的堆栈,可将当前状态保存在堆栈中,以便以后使用。

矩阵堆栈可用于保存投影矩阵和模型视图矩阵。每种类型的堆栈只能用来容纳相应类型的矩阵。所使用的矩阵由当前矩阵模式(GL_MODELVIEW或GL_PROJECTION)所决定的。可用函数glPushMatrix()和glPopMatrix()使矩阵入栈或出栈。

矩阵堆栈的主要作用:一是在构建层次模型时,使用堆栈来遍历这些层次模型的树型数据结构;二是在进行绘制时可以回到先前的视图,而不需要我们重新计算绘制。

缓存

图形处理器能够控制和管理的连续RAM.目的是在两个内存区域间数据交换时,更加快速。

OPenGL提供了以下七个步骤:

1.生成Generate:缓存标示符。【glGenBuffers()】

2.绑定(Bind):接下来的运算使用缓存。【glBindBuffers()】

3.缓存数据(Buffer Data):为当前绑定的缓存分配并初始化足够的连续内存。【glBufferData() / glBuferSubData()】

4.启用(Enable)| 禁止(Disable): 是否使用缓存数据。 【glEnableVertexAttribArray()/glDisableVertexAttribArray()】

5.设置指针(set Pointers): 数据类型以及数据内存偏移值。【glVertexAttribPointer()】

6.绘图(Draw):使用绑定的缓存数据渲染场景。【glDrawArrays()/glDrawElements()】

7.删除(Delete):删除以前生成的缓存并释放相关资源.【glDeleteBuffers()】

帧缓存(FrameBuffer)

接收渲染结果的缓冲区叫帧缓存。它不需要被初始化,因为他会在适当的时候替换缓存的内容。绑定时,隐式开启。

屏幕显示像素受到保存在前帧缓存的特定缓存中像素颜色元素控制,而程序和操作系统会把渲染结果保存到包括后帧缓存在内的其他帧缓存。

framebuffer.jpg

当渲染后的后帧缓存包含一个完成的图像时,前帧缓存与后帧缓存几乎会瞬间切换。后帧缓存会变成新的前帧缓存,同时旧的前帧缓存会变成后帧缓存。

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

推荐阅读更多精彩内容