1002--OpenGL专业名词解析及渲染执行流程图
一.图形API
1.有什么
- OpenGL(Open Graphics Library)是⼀个跨编程语言、跨平台的编程图形程序接口,针对PC端(MAC,Windows)图形图像处理。
扩展OpenGL 和OpenCV/face++(商业识别API)
OpenGL. 渲染(显示->位图->屏幕)
OpenCV. 识别(⼈脸识别/身份识别/物体->OpenCV) -> 与⼈⼯智能结合;
-
OpenGL ES (OpenGL for Embedded Systems)是 OpenGL三维图形 API 的⼦集,去除了许多不必要和性能较低的API接口,针对移动端(iOS, Android)图形图像处理。
-
DirectX 是Windows上⼀个多媒体处理框架。 按照性质分类,可以分为四大部分,显示部分、声音部分、输入部分和⽹络部分。
-
Metal : Apple为游戏开发者推出的新的平台技术Metal,该技术能够为 3D 图像提高 10 倍的渲染性能。Metal是Apple为了解决3D渲染而推出的框架。
OpenGL ES让GPU做一下图形图像的处理
Metal让GPU 做一下编码解码,识别,⼤量并发运算
CoreAnimation ,CoreImage ,CoreGraphics都是基于OpenGL ES/Metal完成GPU的驱动
2.作用-->渲染问题
- 系统针对按钮.图⽚,视图,图层渲染问题
- 游戏引擎->⼈物/场景渲染(图形API)
- 视频播放框架->ijkplayer,kxmovie 视频解码->渲染(图形API)
- 核⼼动画->动画操作 (旋转,缩放,移动, 图层特效)
- 视频/图⽚->特效(图形API)
- 离屏渲染
二.OpenGL专业名词解析
1. OpenGL上下⽂(context)
记录一个功能的状态:打开,运行,关闭
2.OpenGL状态机
- 状态机是理论上的⼀种机器.这个⾮常难以理解.所以我们把这个状态机这么理解.状态机描述了⼀个对象在其⽣命周期内所经历的各种状态,状态间的转变,发⽣转变的动因,条件及转变中所执⾏的活动。或者说,状态机是⼀种⾏为,说明对象在其⽣命周期中响应事件所经历的状态序列以及对那些状态事件的响应。因此具有以下特点:
- 有记忆功能,能记住其当前的状态
- 可以接收输⼊,根据输⼊的内容和⾃⼰的原先状态,修改⾃⼰当前状态,并且可以有对应输出
- 当进⼊特殊状态(停机状态)的时候,变不再接收输⼊,停⽌⼯作;
3.渲染
将图形/图像数据转换成2D空间图像的操作叫做渲染(Rendering),即将图片/按钮/视频显示到屏幕上的过程
4.顶点数组
将顶点数据存储在内存中
顶点数据:图形顶点的信息(xyz)
OpenGL中只有点,线 ,三角形,如四边形是由2个三角形组成
5.顶点缓存区
将顶点数据存储在GPU显存中,为了更高效
6.位图(bitmap)
也称为点阵图像或栅格图像,是由称作像素(图片元素)的单个点组成的。这些点可以进行不同的排列和染色以构成图样。
7.管线(流水线)
是一个过程,如 绿豆->绿豆汤->磨具->绿豆糕的整个流程
8.固定管线(固定着⾊器)
对应于管线中的磨具,制作绿豆糕的时候,可以根据卖家提供的不同的模具,做成各种各样的绿豆糕
9.可编程管线
对应于管线中的磨具,制作绿豆糕的时候,可以自己做一些任意的模具(OpenGL ES->GLSL语法驱使CPU),做成自己想要形状的绿豆糕
10.着⾊器(shader)
- 类似于一个API/方法/函数/代码段 -> GPU使用
常⻅的着⾊器主要有:
- 顶点着⾊器(VertexShader)处理顶点相关代码
1.主要是确定位置
2.旋转,缩放,平移
3.3D图形数据->2D(投影换算),如:拍照(人->照片)
- ⽚段/片元着⾊器(FragmentShader)/像素着⾊器(PixelShader)
处理一个一个的像素点,比如修改一个图片的饱和度,就将图片的所有像素点进行更改
- ⼏何着⾊器(GeometryShader),
- 曲⾯细分着⾊器(TessellationShader)
暂未支持
11.固定着⾊器(存储着⾊器)
调用系统提供的的API/方法/函数/代码段
12.⾃定义着⾊器
自定义基于GLSL语法进行编写的API/方法/函数/代码段
着色器渲染流程图,
转自:逻辑教育CC老师
着色器渲染流程.jpg
在OpenGL进⾏绘制的时候,⾸先由顶点着⾊器对传⼊的顶点数据进⾏运算。再通过图元装配,将顶点转换为图元。然后进⾏光栅化,将图元这种⽮量图形,转换为栅格化数据。最后,将栅格化数据传⼊⽚段着⾊器中进⾏运算。⽚段着⾊器会对栅格化数据中的每⼀个像素进⾏运算,并决定像素的颜⾊
13.光栅化(将上图第三步->第四部:映射屏幕上并使用像素点框起来)
1.确定图片在屏幕上的像素范围
2.把计算好的颜色(通过片元着⾊器)附着上去
14.纹理(纹理文件 .tga)
纹理可以理解为图⽚.⼤家在渲染图形时需要在其编码填充图⽚,为了使得场景更加逼真.⽽这⾥使⽤的图⽚,就是常说的纹理.但是在OpenGL,我们更加习惯叫纹理,⽽不是图⽚.
移动端图片显示是把压缩图片(png,jpeg)-> 位图来显示
15.混合
layer的几个图层叠加在一起,即颜色混合行为(有运算)
16.变换矩阵:
例如图形想发⽣平移,缩放,旋转变换.就需要使⽤变换矩阵(操作顶点).
投影矩阵:
⽤于将3D坐标转换为⼆维屏幕坐标,实际线条也将在⼆维坐标下进⾏绘制
17.交换缓存区
理解为日班和夜班交替,休息好了,我来上班你下班,保证工作
18.开启深度测试
在绘制时,打开深度测试; 则表示,如果在同一个区域的像素点上有2个图层颜色. 会比较谁更接近观察者. 如果有被覆盖部分,被覆盖部分就不会绘制,想要绘制就关闭深度测试
三.坐标系
- 2D笛卡尔坐标系(x,y)
- 3D笛卡尔坐标系(x,y,z)
- 摄像机(观察者)坐标系:如拍照想把人拍摄大点,可以移动己方相机/对方,另外角度也可不同
- 世界(物理)坐标系:物理本身的坐标系,类似于OC中的bounds
- 视口:对应屏幕区域的范围,可以理解为窗口大小,自己设置
四.投影方式
- 正投影(平行投影)1:1投影,大小不变,显示2D效果
- 透视投影,符合有近大远小,显示3D效果
五.渲染流程图 渲染流程图.jpg
扩展
cpu:运算核心/控制中心/缓存,时间片切换(类似多线程),适合处理依赖性高的任务
gpu:绘图运算的微处理器,多计算单元,实现高并发,适合处理依赖性低的任务
cpu:媳妇生孩子(10个月)
gpu:找对象,找10个对象