1. OpenGL & OpenGL ES
- OpenGL
是一个跨编程语言、跨平台的编程图形程序接口,它将计算机的资源抽象成为一个个OpenGL
的对象,对这些资源的操作抽象为一个个的OpenGL
指令 - OpenGL ES
是OpenGL
三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计,去除了不必要和性能较低的API接口
2. OpenGL 上下文
在应用程序调用任何OpenGL的指令之前,需要安排首先创建一个OpenGL
的上下文,这个上下文是一个非常庞大的状态机,保存了OpenGL
中的各种状态,这也OpenGL
指令执行的基础
3. OpenGL 状态机
状态机是一个抽象的模型,表示一组状态变量的集合,OpenGL
使用了一种状态模型(或称状态机)来追踪所有的OpenG
L状态变量,当一个状态值被设置之后,它就一直保持这个状态,直到其他函数对它进行修改为止
假设当我们想告诉OpenG
L去画线段而不是三角形的时候,我们通过改变一些上下文变量来改变OpenGL
状态,从而告诉OpenGL
如何去绘图。一旦我们改变了OpenGL
的状态为绘制线段,下一个绘制命令就会画出线段而不是三角形
4. 渲染
将数学和图形数据转换成3D空间图像操作叫做渲染
5. 顶点数组(VertexArray)和顶点缓冲区(VertexBuffer)
- 顶点
绘制一个图形时,顶点位置的数据 - 顶点数组
调用绘制方法的时候,直接从内存中传入顶点数据,这部分数据之前是存储在内存中的,称为顶点数组
- 顶点缓冲区
绘制更高效的方法是,提前分配一块显存,顶点数据存储到显存当中,这部分显存称为顶点缓冲区
6. 管线
- 管线
OpenGL
下渲染图像时,会经历一个个节点,这样的操作可以理解为管线
,处理数据的时候是按照一个固定的顺序来的 - 固定管线/存储着色器
早期OpenGL
版本,封装了很多种着色器程序块,来帮助开发者完成图形的渲染,开发者只需要传入响应的参数,就能快速完成图形的渲染
7. 着色器
- 着色器程序Shader
OpenGL
在实际调用绘制函数之前,还需要指定一个由shader编译成的着色器程序 - 顶点着色器(VertexShader)
一般用来处理图形每个顶点变换(旋转/平移/投影等)
顶点着色器是逐顶点运算的,每个顶点数据都会执行一次顶点着色器,是并行的 - 片元着色器(FragmentShader)
一般用来处理图形中每个像素点颜色计算和填充
片段着色器是逐像素运算的,每个像素都会执行一次片段着色器,是并行的 - OpenGL绘制过程
顶点着色器对传入的顶点数据进行运算
通过图元装配,将顶点转换为图元
进行光栅化,将图元这种矢量化图像,转换为栅格化数据
将栅格化数据传入片段着色器中进行运算
片段着色器会对栅格化数据中的每个像素进行运算,并决定像素的颜色
7. GLSL(OpenGL Shading Language)
OpenGL着色语言,GLSL的着色器代码分两个部分,Vertex Shader
(顶点着色器)和 Fragment
(片段着色器)
8. 光栅化
把顶点数据转换为片元的过程,片元中的每一个元素对应帧缓冲区中的一个像素
是一种将几何图形转变为二维图像的过程,光栅化过程产生的是片元
9. 纹理
可以理解为图片,渲染图形时需要在其编码填充图片,为了使场景更加逼真,
10. 混合
11.变换矩阵(Transformation)
图形发生平移、缩放、旋转变换需要使用变换矩阵
12.投影矩阵(Projection)
将3D坐标转换为二维屏幕坐标