上篇了解了下 OpenGL,那接下来就开始进一步了解一下它吧。在开发 OpenGL 程序过程中我们会经常用到 着色器(顶点着色器、片元着色器),话不多说进入正题
着色器语言
在这之前先来了解一下必要的名词
图元:是图形软件中用来描述各种图形元素的函数(图像组成的基本单元)
GLSL :专门为图形开发设计的编程语言
可编程管线的编程阶段 渲染管线
渲染管线(又称渲染流水线):是显示芯片内部处理图形信号互相独立的并行处理单元!
图有些糙 凸(艹皿艹 )(下图)
渲染流程
流程:OpenGL首先接收用户提供的几何数据,并且将他输入的数据经过一系列着色阶
段中进行处理,包括顶点着色 ,细分着色,以及几何着色器,然后被送入光栅化单元,光栅化负责剪切区域内的图元并生成片元数据,然后对每一个片元都执行一个片元着色器,然后产生我们最终想要的效果。
那在这些步骤 里面都做了什么呢?
那前面我们也讲了,OpenGL需要将所有的数据都保存到缓存对象中,这也就相当于在OpenGL的服务端维护一块内存区域。当缓存初始化完毕后,我们通过调用OpenGL的绘制命令来渲染几何图元(例:glDrawArray命令,就是一个常用的绘制命令)
1、那我们把数据传过来之后OpenGL首先是顶点着色,
顶点着色器(必要)
:接收顶点缓存对象的顶点数据,单独处理每个顶点
2、当顶点处理完后,会激活细分着色器,
细分着色器(可选)
:接收到来自顶点着色阶段的输出数据,并对收到的数据进一步处理
(用Patch描述一个物体的形状,在OpenGL线管内部生成新的几何体,并且模型的外观也会变得更加平顺,细分作色器会用到两个阶段来分别管理patch数据,并生成最终状态)
3、
几何着色器(可选):
在管线内部会对所有的图元进行修改,改变几何图元的类型,或者放弃所有的几何体。如果启用,那么输入可能会来自顶点着色阶段完成的几何图元,也可能来自细分阶段的图元数据
4、
那以上的阶段都是顶点数据的处理,顶点着色决定了一个图元应该位于屏幕的什么位置,那接下来我们会用片元着色决定片元的颜色。
接下来这些顶点数据和顶点之间如何让构成几何图元的所有信息会被传入到OpenGL当中。然后将这些顶点与相关的几何图元之间组织起来,准备光栅化(
图元装配
)
5、在光栅化之前,有些顶点会落在视口之外,那此时与顶点相关的图元会做出改动,来保证相关像素不会