一、图形编程的发展
1.早期的图形编程
2.图形标准的产生
3.固定管线
二、GPU渲染管线
渲染管线的功能:决定在给定虚拟相机、三维物体、光源、照明模式,以及纹理等诸多条件的情况下生成或绘制一幅二维图像的过程。
流水线中的四个阶段:
1.应用阶段
将需要在屏幕上显示出来绘制的几何体,也就是绘制图元,比如点、线、矩阵等输入到绘制管线的下一阶段。具体包括图元的顶点数据,摄像机位置,光照纹理等参数。这里是在CPU中机型计算的。
2.几何阶段
需要将顶点数据最终进行屏幕映射。这其中需要:
- 将各个图元放入到世界坐标系中,也就是进行模型变换;
- 根据光照纹理等计算顶点处材质的光照着色效果;
- 根据摄像机位置、取景范围进行观察变化和裁剪。
- 最后进行屏幕映射,也就是把三维模型转换到屏幕坐标系中。
(1)顶点着色器
(2)几何、曲面细分着色器
(3)裁剪
(4)屏幕映射
3.光栅化阶段
光栅化部分的输入是经过变化和投影后的顶点,颜色以及纹理坐标,他的工作是给每个像素正确配色,一遍绘制整幅图形。由于输入的是三角形顶点,所以需要根据三角形表面的差异,逐个遍历三角形计算各个像素的颜色值。之后根据其可见性等进行合并得到最后的输出。
(1)三角形设置:将顶点连接成三角形网格。
(2)三角形遍历:根据顶点信息,计算得到覆盖三角网格的像素位置。对应的这些像素就生成一个片元。而片元中每个像素的状态都是根据三角形三个顶点的信息进行插值得到的。
(3)片元着色:根据数据信息计算每个片元的颜色值。
4 逐片元操作:融合阶段
5 后处理
就是对这个数据做一些列如模糊,景深,高光等处理。
三、着色器编程
1.着色器语言
2.GLSL
OpenGL的着色器语言GLSL,也就是OpenGL Shading Language.
- 顶点着色器Vertex Shader
- 几何着色器Geometry Shader
- 曲面细分着色器Tessellation Shader
- 片元着色器Fragment Shader
在OpenGL中使用着色器的流程:
- 创建着色器对象
- 源码关联到着色器对象
- 编译着色器
- 创建一个程序对象
- 将着色器对象关联到程序对象
与OpenGL的通信
3.EBO、VBO和VAO
EBO(Element Buffer Object)也叫做IBO(Index Buffer Object)索引缓冲对象。这个缓冲区主要用于存储顶点索引信息
VBO(Vertex Buffer Object)顶点缓冲区对象,主要用来存储顶点的各种信息。好处是模型的顶点信息放进VBO,这样每次画模型时,数据不在从CPU的势力范围内存里取,而是直接从GPU的显存里取,从而提高效率。
VAO(Vertex Array Object)顶点数组对象,是一个保存了所有顶点数据属性的状态组合,它存储了顶点数据的格式以及顶点数据所需要的VBO对象的引用。