1.OpenGL状态机
状态机描述了一个对象在在其生命周期内所经历的各种状态。我们可以理解为,状态机是一种行为,它说明了对象在它的生命周期内响应时间所经历的状态序列以及对状态事件的响应。
状态机的特点:
1.有记忆功能,能记录当前的状态
2.可接受输入,根据输入的内容和自己原先的状态,修改当前的状态,并有对应输出
3.当进入特殊状态(停机状态)的时候,会不在接受输入,停止工作
2.OpenGL 上下文 [context]
在调用任何OpenGL指令之前,都需要先创建一个上下文。这个上线文中包含了一个庞大的状态机,保存了OpenGL的各种状态,是OpenGL执行命令的基础。切换上下文会产生较大的开销,因此我们可以创建多个不同的上下文,让他们之间共享纹理,缓冲区等资源,会让我们的方案更加合理。
3.渲染
将图形/图像数据转换成3D空间图像的操作叫做渲染。将计算机存储的二进制图像数据转换为我们能看的3D图像作品。
4.顶点
指的是图形的顶点位置数据。(例如:三角形三个点的位置数据,正方体的八个顶点的位置数据)
5.顶点数组
存储在内存当中的顶点数据,被称为顶点数组。
6.顶点缓冲区
顶点数据预先存储在显存当中,这部分显存称作顶点缓冲区。性能高于顶点数组。
7.管线
OpenGL在渲染图形的过程中,会经历一个一个节点,这样的操作可以理解为管线。就像工厂的流水线生产过程,一步一步的按照先后顺序执行,这个顺序是不能打破的。
8.固定管线
OpenGL封装了一些固定的shader程序来完成图形的渲染,开发者只需要传入响应的参数即可快速完成图像的渲染。
9.着色器程序(shader)
将固定管线架构变为了可编程的渲染管线。常见的着色器有顶点着色器(VertexShader)、片段着色器(FregFragmentShader)、几何着色器(GeometryShader)、曲面细分着色器(TessellationShader)。开发者可编程的着色器顶点着色器和片段着色器。
10.顶点着色器(VertexShader)
顶点着色器是用于计算顶点属性的程序,每个顶点数据都执行一次顶点着色器,顶点着色器运算过程中无法访问其他顶点数据。一般用来处理图形顶点变换(旋转/平移/投影等)
11.片段着色器/片元着色器(FregFragmentShader)
一般用来计算图形中每个像素点颜色计算和填充。每个像素点都会执行一次片段着色器。
12.GLSL(OpenGL Shading Langguage)
是用来在OpenGL中着色编程的语言,在GPU上执行。
13.光栅化
就是将一个几何图元变为二位图像的过程。二维图象上每个点都包含了颜色、深度和纹理数据。
14.纹理
纹理是一个用来保存图像颜色元素值的OpenGL ES缓存,可以理解为图片/图像,在渲染图形的时候需要在其编码填充图片,为了使得场景更加逼真,在这里使用纹理。
15.混合(Blending)
在OpenGL中,混合通常是实现物体的透明度的一种技术,透明就是说一个物体并不是纯色的,它的颜色是它物体本身的颜色和它背后的其他物体的颜色的不同程度的结合。比如我们可以混合多个颜色为一种颜色,三原色红绿蓝和在一起之后就是黑色。
在测试阶段之后,如果像素依然没有被剔除,那么像素的颜色将会和帧缓冲区中颜色附着上的颜色进行混合。
16.变换矩阵(Transformation)
在图形绘制过程中,有三种变换,分别是平移,缩放,旋转。就需要使用变换矩阵。
17.投影矩阵(Projection)
用于将3D坐标转换为二维屏幕坐标,实际线条也将在二维坐标下进行绘制。
18.渲染上屏/交换缓冲区(SwapBuffer)
渲染缓冲区一般映射的是系统的资源比如窗口。如果将图像直接渲染到窗口对应的渲染缓冲区,则可以将图像显示到屏幕上。要注意的是,如果每个窗口只有一个缓冲区,那么在绘制过程中屏幕进行了刷新,窗口可能显示出不完整的图像。
为了解决这个问题,常规的OpenGL程序至少都会有两个缓冲区。显示在屏幕上的称为屏幕缓冲区,没有显示的称为离屏缓冲区。在一个缓冲区渲染完成之后,通过将屏幕缓冲区和离屏缓冲区交换,实现图像在屏幕上的显示。
由于显示器的刷新一般是逐行进行的,因此为了防止交换缓冲区的时候屏幕上下区域的图像分属于两个不同的帧,因此交换一般会等待显示器刷新完成的信号,在显示器两次刷新的间隔中进行交换,这个信号就被称为垂直同步信号,这个技术被称为垂直同步。