什么是OpenGL
相信有很多人把它认为是API(Application Programming Interface, 应用程序编程接口),实际上并不是,它只是Khronos组织定义和维护的一套接口规范(Specification)
固定管线和可编程管线
- 固定管线
固定管线下,不允许开发者自己定义顶点渲染和像素渲染的具体逻辑,内部已经固定好了一套完整的渲染流程,开发者只需要按照要求调用对应的接口传入需要的数据和设置对应的参数即可完成渲染工作 - 可编程管线
需要开发者自行实现渲染逻辑。开发者可以根据具体的需求实现渲染流程中各个步骤的具体逻辑,可以简化渲染流程提高渲染效率。同时开发者可以实现特定的算法和逻辑来实现固定管线无法实现的渲染效果,具有很高的可定制性
可编程管线
- 可编程管线基本流程(图片来自https://learnopengl-cn.github.io/)
- 顶点数据一系列顶点的集合,而一个顶点是一个3D坐标的数据集合也就是说一个顶点除了位置数据以外还可以包含其它的数据,而如何描述一个顶点就需要顶点属性来描述了
- 顶点着色器是图形渲染中的第一步,它是逐顶点处理的,主要是对于输入的顶点坐标做一些变换等操作,另外也可以对于顶点的其它属性做一些基本的处理工作
- 图元装配,图元是指O图形的基本单位,该阶段则是将顶点着色器输出的所有顶点作为输入(如果是GL_POINTS,那么就是一个顶点),并将所有的点装配成指定图元的形状。
- 几何着色器这个是在OpenGL3.2版本中才加入的。主要把图元形式的一系列顶点的集合作为输入,它可以通过产生新顶点构造出新的(或是其它的)图元来生成其他形状。
- 光栅化即像素化,这里它会把图元映射为最终屏幕上相应的像素,生成供片段着色器(Fragment Shader)使用的片段(Fragment)。在片段着色器执行执行会进行裁剪,去除视图意外的像素,提高效率
-
片段着色器主要目的是计算一个像素的最终颜色,这也是所有OpenGL高级效果产生的地方。通常,片段着色器包含3D场景的数据(比如光照、阴影、光的颜色等等),这些数据可以被用来计算最终像素的颜色。
- 顶点缓冲对象(Vertex Buffer Object, VBO)
它是在显卡存储空间中开辟出的一块内存缓存区,用于存储顶点的各类属性信息,如顶点坐标,顶点法向量,顶点颜色数据等。在渲染时,可以直接从VBO中取出顶点的各类属性数据,由于VBO在显存而不是在内存中,不需要从CPU传输数据,处理效率更高。 - 索引缓冲对象(Element Buffer Object,EBO)
它和VBO一样,也是显卡中的一块内存缓冲区,只不过存储的是顶点索引 - 顶点数组对象(Vertex Arrary Object,VAO)
保存模型顶点的属性信息,描述了每个顶点属性对应的数据如何从vbo中获取,一个VAO可以同时关联多个VBO
由于VAO会存储target是GL_ELEMENT_ARRAY_BUFFER的时候glBindBuffer函数的操作,所以VAO和EBO配合使用的时候要注意EBO的绑定和解绑都要晚于VAO
网友评论