1.1 Vertex operations 的处理对象是顶点,而Fragment operations 的处理对象是片元。
1.2 数据的流转为:顶点数据→光栅化→片元数据;
- 光栅化:以三角面片为处理单元,输入的是三个顶点的数据,输出是三角形所覆盖的所有像素的数据。线段的则是一线段为单位来进行插值的;
- 光栅化可以对顶点数据、颜色、法向量、三维坐标、纹理坐标等进行处理。
- 处理方式:双线性插值、常数明暗处理;
- 在光栅化之前,有一个图元装配阶段,该阶段会把多并行剖分为三角形,或者把两个顶点组合为一条线段,即会把顶点数据组合成一个个primitive,作为光栅化的输入数据,光栅化以primitive为处理单位。
1.3 光栅化模块没有直接的接口函数,无法对光栅化进行Shader编程。
- glShaderMode(GL_FLAT/GL_SMOOTH);
- glPolyonMode(GLenum face,GLEnum mode):可以指定多边形绘制的模型,是采用线框、面、顶点的方式来绘制多边形,影响图元装配阶段。
1.4 帧缓冲区(Frame buffer)
- 缓冲区的每个单元对应一个屏幕像素;
- 对片元的处理就是利用并修改缓冲区的数据;
- 像素的颜色都存储在一块缓冲区中,需要不断重复绘制,即不断刷新屏幕。
- 帧缓冲区存储视口中每个像素的信息,与视口像素一一对应;
1.5 刷新率(Refresh Rate)
- 存储视口中每个像素的信息;
- 常用单位:FPS,Frame per second;
1.6 帧缓冲区的类型,存储在显存上面;
- 颜色缓冲区(Color buffer);
- 深度缓冲区(Depth buffer);
- 模板缓冲区(Stencil buffer);
- 累积缓冲区(Accumulation buffer);
- 用户自定义缓冲区
1.7 在画图之前需要清除缓存;
glClearColor(0.0,0.0,0.0,0.0); //定义清除的颜色
glClear(GL_COLOR_BUFFER_BIT); //清除
glClearDepth(1.0); //采用1.0来清深度缓冲区
glClear(GL_DEPTH_BUFFER_BIT); //清除
//常用写法
glClearColor(0.0,0.0,0.0,0.0); //定义清除的颜色
glClearDepth(1.0); //采用1.0来清深度缓冲区
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除,同时清除,效率较高
1.8 单缓冲与双缓冲
- 单缓冲区,绘制后立即显示到屏幕上,称为Front Buffer;
- 双缓冲区,设置了一个Back buffer,总是绘制到Back Buffer,绘制完后,立即拷贝到Front Buffer,然后显示;可以避免因绘制速度慢导致的屏幕闪烁;
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); //双缓冲
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); //单缓冲