一、什么是OpenGL
-
OpenGL
OpenGL是一个编程图形程序的接口,是一组用于操作计算机资源的指令
-
OpenGL ES
OpenGL ES是OpenGL的子集,应用在手机,pad等嵌入式设备
-
Metal
Metal是Apple为了3D渲染而推出的框架,用于代替OpenGL ES
二、OpenGL可以用来做什么
-
在游戏开发中对游戏场景/游戏人物的渲染
-
在音视频开发中对视频解码后的数据渲染
-
在地图引擎中对地图上的数据渲染
-
在动画中实现动画的绘制
-
在视频处理中加上滤镜效果
OpenGL /OpenGL ES/ Metal解决问题的本质就是利⽤GPU芯⽚来⾼效渲染图形图像
三、专业名词解析
1. OpenGL上下文(context)
上下文就是一个庞大的状态机,描述了对象在生命周期的各种状态。
通过对OpenGL指令的封装,可以将OpenGL的相关调⽤封装成一个⾯向对象的图形API。
在不同线程中可以创建多个不同的上下文,上下⽂之间共享纹理、缓冲区等资源。
2.渲染
将图形,图像数据转换成2D空间图像操作叫渲染
3.顶点数组(VertexArray) 顶点缓冲区(VertexBuffer)
顶点是我们绘制一个图形时的顶点位置数据,一系列的顶点数据构成了顶点数组。
绘制时,可以由内存传入顶点数组,也可以提前分配一块显存,将顶点数组数据预先传入到
显存当中,这部分的显存称为顶点缓冲区
4.着色器(Shader)
调⽤绘制函数之前,需要指定⼀个由shader编译成的着⾊器程序。
常⻅的着⾊器主要有顶点着⾊器(VertexShader),
⽚段着⾊器(FragmentShader)/像素着⾊器(PixelShader),
⼏何着⾊器(GeometryShader),
曲⾯细分着⾊器(TessellationShader)
目前仅有顶点着色器和片段着色器可编程。
OpenGL在进行绘制的时候,⾸先由顶点着色器对传⼊的顶点数据进行运算。
再通过图元装配,将顶点转换为图元。
然后进⾏栅化,将图元这种⽮量图形,转换为栅格化数据。
最后,将栅格化数据传入片段着⾊器中进⾏运算。
片段着⾊器会对栅格化数据中的每⼀个像素进行运算,并决定像素的颜⾊。
5.顶点着色器(VertexShader)
主要用于处理图形中每个顶点的变换,包括旋转,平移,投影等
每个顶点都会执行一次顶点着色器
6.片元着色器(FragmentShader)
主要用于处理图形中每个像素点的颜色计算和填充
每个像素都会执行一次片元着色器
7.光栅化
光栅化就是把顶点数据转换为片元的过程,片元的每一个元素对应于帧缓冲区的每一个像素。
光栅化就是把物体的数学描述以及与物体相关的颜色信息转换为屏幕上对应的像素和用于填充像素的颜色
光栅化一是要决定窗口坐标中哪些栅格区被基本图元覆盖
二是要分配一个颜色值和深度值到各个区域
8.混合
测试阶段,像素的颜⾊会和帧缓冲区中颜色进⾏混合形成混合色,
混合的算法可以通过OpenGL的函数进⾏指定
9.变换矩阵(Transformation)
图形发⽣平移,缩放,旋转就需要使用变换矩阵.
10.投影矩阵(Projection)
用于将3D坐标经过投影矩阵转换为二维屏幕坐标
11.交换缓冲区(SwapBuffer)
1.如果每个窗口只有一个缓冲区,那么在绘制过程中屏幕进⾏了刷新,窗⼝可能显示
出不完整的图像。
2.常规的OpenGL程序⾄少都会有两个缓冲区。显示在屏幕上的称为屏幕缓冲区,没有显示
的称为离屏缓冲区。在一个缓冲区渲染完成之后,通过将屏幕缓冲区和离屏缓冲区交换,实
现图像在屏幕上的显示。
3.由于显示器的刷新一般是逐⾏进⾏的,因此为了防止交换缓冲区的时候屏幕上下区域的图
像分属于两个不同的帧,因此交换一般会等待显示器刷新完成的信号,在显示器两次刷新的
间隔中进行交换,这个信号就被称为垂直同步信号,这个技术被称为垂直同步
4.双缓冲区要等待缓冲区交换之后再进行下一帧的渲染,使得帧率无法完全达到硬件允许的
最⾼水平,可以用三缓冲区技术在等待垂直同步时,来回交替渲染两个离屏的缓冲区,而垂
直同步发生时,屏幕缓冲区和最近渲染完成的离屏缓冲区交换,充分利用硬件性能