OpenGL是一套针对PC端进行图像处理的接口,OpenGL ES是嵌入式设备上图像处理的接口,OpenGL ES是OpenGL除去了一些不必要的API。苹果在2014年推出了Metal,该技术为3D图像提高10倍的渲染性能。
已下是OpenGL中常见的专业术语:
- context:上下文,context是一个状态机,用来保存OpenGL的各种状态,在应用程序调用OpenGL指令之前,都要先创建一个context状态机。
- 渲染:将图形数据绘制到屏幕,变成2D图像的过程叫做渲染。
- 图元:OpenGL中的图形是由图元构成的,OpenGL ES中只有点、线、三角形三种图元,这三种图片进行组合构成不同的图形。
- 顶点数组和顶点缓冲区:OpenGL绘制图形时,需要知道每个图元的顶点的位置信息,构成图形的所有图元的顶点的位置信息放在一个一位数组中,也就是顶点数组。顶点数组存在CPU内存中,而OpenGL绘制图形是GUP完成的,使用CPU内存中的数据会降低效率,更高效的方法是在GPU中存储顶点信息,也就是在GPU的显存中开辟一个区域用来存储顶点信息,这一部分区域就是顶点缓冲区。
- 管线:指的是OpenGL 绘制图形的流程。
- 固定管线:是OpenGL封装好的很多的模板管线。
- 可编程管线:是可以进行自定义的管线。
- 着色器:类似于CPU中调用的一个一个的函数方法。在GPU中调用着色器。
- 固定着色器:由OpenGL提供的固定的、可直接调用的着色器。
- 自定义着色器:各式各样的需求使得固定着色器不能满足所有的需要,于是OpenGL提供给开发者可以自己定义着色器的能力。
- 顶点着色器和片元着色器:只有这两个着色器是可以自定义的。
顶点着色器用来做顶点相关的处理:确定位置;缩放、平移、旋转位置换算;3D图形数据进行投影换算转成2D数据(ES)在手机屏幕上显示。
片元着色器(像素着色器):片源(像素),处理一个一个的像素点(不用担心像素点很多,GPU是并行运算的)。举例:图片进行饱和度调整。 - 光栅化:光栅化有两个过程:一是确定图形的像素范围;二是将像素点的颜色附着上去。(光栅化是物理动作,不可编程)。
- 纹理:也可以理解为一张图片,.tga是纹理文件。在移动端ES 为了避免将.tga转成PNG格式再转为位图显示的繁琐流程,直接把纹理作为PNG格式转成位图。
- 混合:混合计算,计算图层重合处的颜色数据。如下图,混合的过程要计算出重合部分的颜色信息。
- 变换矩阵和投影矩阵:图形想平移、旋转、缩放,使用变换矩阵;3D图形转屏幕2D坐标使用投影矩阵。投影方式有正投影(2D效果)、透视投影(3D效果:远小近大)。
补充:PNG和JPG等图片格式都是压缩图片,图片如果想要在屏幕上显示出来,需要将压缩图片解压成位图,位图占用的内存是较大的。以120px*120px的图片A为例。
A的像素点的个数:120*120 = 14400;
每一个像素点包含的R、G、B、A信息各占一个字节。
也就是说,A占用的内存大小为14400*4byte = 57600byte