OpenGL渲染管线
渲染管线指的是一系列的数据处理过程,将数据转换到最终渲染的图像。
着色器
着色器指的是数据处理程序。图形渲染管线的整个处理流程可有被划分为几个阶段,上一个阶段的输出数据作为下一个阶段的输入数据,是一个串行的,面向过程的执行过程。每一个阶段分别在GPU运行各自的数据处理程序,这个程序就是着色器。
(图为顶点处理的流程图)
顶点
在OpenGL中,所有的顶点都是三维空间内的顶点。(只要把深度定义为0,就可以保证他们在一个平面上。比如:(-0.5,0.5,0,0),(0.5,-0.5,0.0),(0.0,0.5,0.0))。
顶点数据
顶点的集合。比如很多个顶点坐标
图元(Primitives)
图元(Primitives)包括点,线段,三角形等,是构成实体模型的基本单位*
顶点着色器(Vertex Shader)
包含对一些顶点数据的基本处理。(上面已经介绍了着色器就是一段数据处理程序)。
几何着色器(Geometry Shader)
把基本图元形式的顶点的集合作为输入,可以通过产生新顶点构造出新的(其他的)基本图元来生成其他形状。
细分着色器(Tessellation Shaders)
可以把基本图元细分为更多的基本图形,创建出更加平滑的视觉效果。
光栅化(Rasterization)
即像素化,把细分着色器输出的基本图形映射为屏幕上网格的像素点,生成供片段着色器处理的片段,光栅化包含一个剪裁操作,会舍弃超出定义的视窗之外的像素。
片段着色器(Fragment Shader)
计算每一个像素点的最终的颜色,通常片段着色器会包含3D场景的一些额外的数据,如光线,阴影等。
测试和混合
是对每个像素点进行深度测试,Alpha测试等测试并进行颜色混合的操作,这些测试与混合操作决定了屏幕视窗上每个像素点最终的颜色和透明度。
在整个渲染管线中需要自定义处理的主要是顶点着色器和片段着色器。
顶点缓冲对象:VBO
保存一系列的顶点的数据。
VBO保存了一个模型的顶点属性信息,每次绘制模型之前需要绑定顶点的所有信息,当数据量很大时,重复这样的动作变得非常麻烦。VAO可以把这些所有的配置都存储在一个对象中,每次绘制模型时,只需要绑定这个VAO对象就可以了
顶点数组对象:VAO
保存了所有顶点数据属性的状态结合,它存储了顶点数据的格式以及顶点数据所需的VBO对象的引用。
VAO本身并没有存储顶点的相关属性数据,这些信息是存储在VBO中的,VAO相当于是对很多个VBO的引用,把一些VBO组合在一起作为一个对象统一管理
索引缓冲对象:EBO
索引缓冲对象EBO相当于OpenGL中的顶点数组的概念,是为了解决同一个顶点多洗重复调用的问题,可以减少内存空间浪费,提高执行效率。当需要使用重复的顶点时,通过顶点的位置索引来调用顶点,而不是对重复的顶点信息重复记录,重复调用。
EBO中存储的内容就是顶点位置的索引indices,EBO跟VBO类似,也是在显存中的一块内存缓冲器,只不过EBO保存的是顶点的索引。