前言
OpenGL,一个跨平台的图像渲染引擎框架;
OpenGL ES,作为OpenGL的一个子集,针对移动端设备或者游戏主机等嵌入式设备的渲染框架;
Metal,Apple推出的图形渲染框架,目前作为iOS底层的渲染的核心;
常见名词
-
状态机(Context):在使用OpenGL指令前,需要创建一个OpenGL的上下文(Context),来保存一些配置信息(或者叫状态信息),可以保存状态,接收输入,停止状态。就比如我们在使用iOS中的
CoreGraphics
绘图的操作一样:
//获取上下文
CGContextRef context = UIGraphicsGetCurrentContext();
//更新/设置上下文状态
CGContextAddEllipseInRect(context, CGRectMake(0,0,100,100));
//更新/设置上下文状态
CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor);
//更新/设置上下文状态
CGContextFillPath(context);
-渲染(Render):绘制到屏幕的过程。
-顶点数组(VertexArray):屏幕上的位置信息集合(顶点数据),比如UIView.frame,通常存放在内存中。
-顶点缓冲区(VertexBuffer):将顶点数据缓存到GPU的显存中。
-管线:就像工厂的生产流水线,一个接一个的环节。
-固定管线:一个设定好的生产方式;比如调用一些系统固定功能的API,我们不需要关注内部实现,而且无法改变它的内部实现;在OpenGL中就是固定着色器(OpenGL提供了一些预设好的渲染API).
-可编程管线:可自定义,正好跟固定管线相反,在OpenGL下使用GLSL语法来自定义。
-着色器(shader):运行在GPU上的一个代码段。
-固定着色器(存储着色器):预设好的代码段,直接调用,不可更改。
-自定义着色器:使用GLSL语法自定义代码段,比如顶点着色器(确实要显示图形的位置;缩放/平移/旋转;3D效果的投影换算),片元着色器(对图形每一个像素点的处理,GPU并行计算)。
-GLSL: OpenGL Shader Language 的缩写
-光栅化:将代码逻辑位置转换为屏幕像素物理位置的过程,首先确认图像像素范围,然后将颜色映射上去。
-纹理:理解为一张图片,位图(bitmap);
-混合(Blend):对两个图层重叠部分的渲染计算。比如两个半透明视图重叠部分的颜色计算。
-变换矩阵:矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,是数学线性代数中的一个概念。比如iOS下CGAffineTransform
,可以实现视图的平移,缩放,旋转。
-投影矩阵:⽤用于将3D坐标转换为⼆二维屏幕坐标,实际线条也将在⼆二维坐标下进⾏行行绘制。
-正投影:又称为平行投影,1:1的绘制,描述2D效果
-透视投影:描述3D效果,具有空间感(远小近大)
-物体坐标系:类似于UIView.layer.bounds
-世界坐标系:类似于UIView.layer.frame
以上的解释可能不是很标准,只是个人对这些名词的一些理解,如果有错误的地方,请指正,谢谢!
图片的渲染流程
图片的渲染是有CPU和GPU共同完成的
- CPU:计算显示的位置(Frame),图片解压(png->bitmap)等,通过总线交给GPU;
- GPU:顶点着色->图元装配->光栅化->片元着色->帧缓存区->渲染显示
CoreGraphics 解压图片
1.CGBitmapContextCreate()
2.CGContextDrawImage()
3.CGBitmapContextCreateImage()
总结
以上信息待完善。这里先记录一下!!!
网友评论