OpenGL入门详解(3.OpenGL基本流程)
前期文章:
看了不少的OpenGL书或者文章,有如下特征
- 上来就是一堆代码,看的莫名其妙;
- 上来就是很片面的介绍概念,看了也不知道如何使用
- 越看越糊涂,不知道如何使用,为什么这样使用
本系列文章主要从入门的角度总结OpenGL的基本流程概念和所使用的语言,尽量避免学的糊涂。
OpenGL宏观流程
先列一下整体处理流程:
- 读取顶点
- 顶点着色器
- 组装图元
- 光栅化图元
- 片段着色器
- 写入帧缓冲
- 显示在屏幕上
再贴一张图
看到这可能会是一脸懵逼,完全不懂,当初我也是这样的,看了流程和图,脑海里大大的几个❓ what are you 说啥呢?下面自能尽量以我自己的语言合理的来解释了,可能解释的不充分。
读取顶点
- 图片显示在屏幕上,需要2个因素,位置,颜色。
- 显示的图形从几何角度上看是一个多面体(凹,凸)
- 多面体有其顶点和边,边可通过顶点链接,因此有顺序的顶点可代表一个多面体。
因此以上决定了OpenGL处理流程的第一步,读取顶点,这些顶点定义了一个多面体的边界。在程序里,就是一个个坐标,用数组存储,对应着流程图片里面的顶点缓冲区/数组对象。
顶点着色器
确定了顶点,那么就需要把这些顶点的位置通过一种方式,告诉OpenGL,这里就使用到顶点着色器。
- 顶点着色器生成每个坐标的最终位置,每个顶点执行一次
- 它的输入需要顶点数据和着色器程序,着色器程序定义了一种方式把外部的顶点数据告知给OpenGL,并设置一些额外的属性如大小,颜色等
- 精度要很高,因为位置对精确性要求很高
- 输出就是OpenGL最终识别的最终位置
通过读入顶点和顶点着色器,OpenGL最终拿到了多面体的边界顶点。接下来就是组装图元和光栅化图元。
组装图元和光栅化图元
要把物体画到屏幕上,类似电视机上的显示画面,需要一个点一个点的显示,每一个点有其ARGB等组成的颜色。因此OpenGL定义了图元的概念:图元是三角形、直线或者点几何对象。因此OpenGL里面最基本的几何单元是点、直线、三角形。点和直线毋庸置疑,这里使用三角形是因为,三角形是最小的多面体,任何一个多面体都可以用多个三角形构成。圆也可以看作是由很多个三角形组成或者可以看作尺寸比较大的点。
读入顶点,并组装成一个个图元,接下来就是光栅化图元。
总所周知,移动设备的显示屏由成千上万个小的,独立的部件组成,被称之为像素;每个像素通常由三个单独的子组建构成,发出红色、绿色和蓝色的光,每个像素都非常小,人的眼睛会把红色、绿色和蓝色的光混合在一起,从而创造出巨量的颜色范围;
OpenGL通过光栅化技术把每个点、直线以及三角形分解成大量的小片段映射到显示屏上,从而形成一副图像。 类似于显示屏上的像素,每一个都是单一的纯色,用ARGB来构成,下图解释了这一过程。
片段着色器
在上图中,2个顶点生成一条直线,通过光栅化技术转化为一个片段集合。显示系统会把这些片段直接映射到屏幕上的像素,通常情况下一个片段就对应一个像素。
- 片段着色器主要目就是告诉GPU每个片段的最终颜色应该是什么。
- 基本图元的每个片段,片段着色器都会调用一次。
- 输入为每个片段生成的顶点着色器输出
- 输出就是每个片段的最终颜色。
确认了每个片段(对应到屏幕的像素)的颜色,最终就可绘制在显示屏幕上。
小结
本篇总结了宏观上的处理流程,深入理解这些流程很重要。
本文地址:https://blog.csdn.net/Scott_S/article/details/85794473