状态机
描述了一个对象在生命周期中经历的各种状态,并且根据输入改变当前状态的机制。
特点:
- 有记忆功能,能记住当前的状态;
- 可以根据输入改变当前的状态;
- 进入特殊状态后,不在接受输入,停止工作。
OpenGL上下文
OpenGL中的一种状态机,可以保存OpenGL中的各种状态。任何OpenGL指令都需要依赖于上下文,是OpenGL指令的基础。
顶点数组(VertextArray)和顶点缓冲区(VertextBuffer)
顶点: 绘制图形时顶点位置数据。 顶点数组和顶点缓冲区的区别在于顶点数组的存储位置不同。
- 存储在内容中,称为顶点数组;
- 存储在显存中,称为顶点缓冲区。
管线
OpenGL渲染图形的流水线,任务按照固定的顺序执行。
固定管线/存储着色器
- 固定管线:封装好的着色器程序,只能传递参数,不能修改。
- 可编程管线:顶点着色器和片元着色器。
顶点着色器
- 处理图形中每个顶点的变换(旋转/平移/投影等);
- 顶点是并行运算的;
- 自身坐标系转化归一化坐标系。
片元着色器
- 并行计算每个像素点的颜色。
GLSL(OpenGL Shading language)
OpenGL着色语言,开发者使用该语言编写自定义着色器代码。
光栅化(Rasterization)
定义:将物体的数学描述以及与物体相关的颜色转化为屏幕上用于对应位置的像素以及用于填充像素的颜色。 包含了两个过程:
- 决定窗口坐标中哪些整形栅格区域被基本图元占用;
- 分配一个颜色值和深度值到各个区域
纹理
可以理解为图片。在OpenGL中叫做纹理。
混合(Blending)
多种颜色进行叠加计算得到混合后的颜色。
变换矩阵(Transformation)
图片发生平移、缩放、旋转变化,就需要使用变化矩阵。
投影矩阵(Projection)
用于将3D坐标转化为2D坐标。
渲染上屏/交换缓冲区(SwapBuffer)
- 渲染缓冲区:一般映射的是系统的资源比如窗口。
- 渲染上屏:将图片渲染到窗口对应的渲染缓冲区,则显示到了屏幕上。 如果每个窗口只有一个缓冲区,那么在绘制过程中屏幕刷新,窗口可能显示出不完整的图像。为了解决这个问题,引入了双缓存区。
- 双缓冲区:显示在屏幕上的为屏幕缓冲区;没有显示的为离屏缓冲区。一个缓冲区渲染完成后,将屏幕缓冲区和离屏缓冲区交换,实现图片在屏幕上的显示。
- 垂直同步:为了防止屏幕上下区域的图片分别属不同的帧,因此交换缓冲区的时候一般会等待显示器刷新完成的信号,在两次刷新的间隔中进行交换,这个信号被称为垂直信号,这个技术被称为垂直同步。
- 使用了双缓冲区和垂直同步技术后,由于总是要等待缓冲区交换后才能进行下一帧的渲染。为了充分利用硬件性能,引入的三缓冲区。
视口
坐标系在屏幕上的对应的区域叫做视口。
OpenGL投影方式
- 正投影:远近一样大;
- 透视投影:远小近大。