一、认识一下图形 API
-
OpenGL(Open Graphics Library)
是一个跨编程语言、跨平台的编程图形程序接口,它将计算机的资源抽象为一个个 OpenGL 的对象,对这些资源的操作抽象为一个个的 OpenGL 指令。 -
OpenGL ES(OpenGL for Embedded Systems)
是OpenGL 三维图形 API 的子集,针对手机、游戏主机等嵌入式设备而设计,去除了许多不必要的和性能较低的API接口。 -
DirectX
并不是一个单纯的图形API,而是由很多API组成。它属于Windows上一个多媒体处理API,不支持WIndows以为的平台。 -
Metal
是Apple 为了解决3D渲染而推出的框架,为游戏开发者推出的新的平台技术,该技术能够为 3D图像提高10倍的渲染性能。
二、图形 API 的作用
游戏场景或人物的渲染;
图片、视图、图层渲染;
视频解码后数据的渲染;
核心动画的绘制(旋转、缩放、移动);
滤镜效果等等。
也是 iOS 开发者唯一可接近 GPU 的方式
解决问题的本质就是利用 GPU 来高效渲染图形图像。
三、OpenGL 中专业名词解析
以下名词解析大体上纯属个人理解
-
上下文 context
包含所发生的事件的整个生命周期。 -
OpenGL 状态机
一个在一定条件下记录着不同状态的对象
特点:- 有记忆功能,能够记住自己当前的状态;
- 可以输入,根据条件修改自身的状态,而且可以有输出,例如glClearColor(1.0,1.0,1.0,1.0),输入不同数据,就可以显示不同颜色;
- 可以根据停机状态,停止工作。
-
渲染
图形图像绘制到屏幕上的过程 -
顶点数组 VertexArray
顶点数据的集合,类似三角形三个顶点的坐标数据的集合。这部分数据存储在 内存 中。 -
顶点缓冲区 VertexBuffer
顶点数据存储在显存中,那么这部分显存就被称为顶点缓存区。 -
管线
类似一个固定,先后顺序不变的生产流水线 -
固定管线
类似一个染布生产流水线,只能固定染一种颜色的布。 -
可编程管线
上面的染布流水线为了满足市场要求,提供开放式接口,大家想要什么颜色,就可以染不同颜色的布。
这里的开放式,指的是自定义编程,OpenGL 里面是用 GLSL 语法来驱使 GPU ,这也是开发者唯一可以接近 GPU 的方式。
-
着色器 Shader
好比染布流水线上的一个阶段,传入不同条件,就会染出不同颜色的布。类似开发中的函数或者方法。 -
固定着色器
类似固定管线上的一个阶段,只染一种颜色布的接口,比较束缚,不自由。(Apple 提供只可调用的 API) -
自定义着色器
可编辑的着色器,染布流水线开始满足不同需求了。 -
顶点着色器 VertexShader
顾名思义,用来处理顶点数据的着色器,也可以说是函数或方法。
例如:确定位置、旋转/缩放/平移位置换算、3D 到 2D 图形投影换算等
-
片段着色器 FragmentShader/像素(片元)着色器 PixelShader
除了顶点以外的部分,每个像素都可支持编辑的函数或方法。 -
GLSL (OpenGL Shading Language)
染布阶段的不同染料。专业来说是编写着色器的语言,有了它才使得着色器可编辑。编程代码分为两个部分:顶点着色器 (VertexShader)和片段着色器 (FragmentShader)/像素(片元)着色器 (PixelShader)。 -
光栅化 Rasterization
将顶点数据转换为线段或者三角形形状的过程,也可以理解为用两点或者三点确定一个被像素填充的形状。
该过程分为两个部分:
1、确定两点之间或者三点连线区域的每个像素范围;
2、为每个像素附上对应颜色。 -
纹理
即为图片 -
混合 Blending
颜色的叠加,叠加部分颜色是通过着色器进行计算的。 -
变换矩阵 Transformation
例如图形的旋转、缩放、平移,都需要使用变换矩阵。 -
投影矩阵 Projection
将 3D 坐标转换为二维屏幕坐标,可分为正投影(2D效果)和透视投影(3D效果)。