前言
第一篇咱们提到了不少的着色器相关的名词,那么什么是着色器呢?着色器他们又有一个什么样的流程呢?着色器分哪些种类呢?不一样的着色器分别有什么功能呢?咱们就带着这些问题,开启咱们这一片文章的内容。编程
一、着色器的基本认识
讲到着色器,咱们首先提到的应该会图元,那么什么是图元呢?编程语言
图元:组成图像的基本单元。测试
那么说完图元,咱们就要说说渲染管线了,怎么理解渲染管线呢?设计
OpenGL渲染管线:一系列有序处理阶段的序列,用于把咱们应用中的数据转化到OpenGL生成一个最终的图像的一个过程。3d
怎么理解?其实咱们能够把管线想象称为一个流水线,流水线上面的每一个过程都是固定好了的,顺序不能错乱的,那么咱们把流水线上面的一个工人或者是机器设备就能够理解为一个着色器。那么咱们怎么去指挥流水线工人或者是流水线上的机器干活呢?咱们就须要有一种交流沟通的命令,这个命令咱们就能够理解为是专门为图形开发设计的编程语言,也就是咱们常说的GLSL。cdn
二、着色器的分类
- 顶点着色器(必要):是最初用来处理顶点坐标的,通常会对坐标作一些计算
- 细分着色器(可选):描述物体的形状,在管线中生成新的几何体处理(平顺)模型生成最终形态
- 几何着色器(可选):是对原坐标进行一些修改,我的感受适用于一些特效
- 片元着色器(必要):是对图形进行涂色,并最终输出 其中顶点着色器和片元着色器是咱们必需要要使用的,然而细分着色器和几何着色器咱们是可选的,通常用的不多。
三、着色器的渲染流程
第一节里面提到了渲染管线,其实咱们能够理解就是着色器的渲染流程。下面一幅图就是着色器的渲染流程 blog
流程:
- 拿到顶点数据传给顶点着色器,顶点着色器根据你的投影等等不一样的状况进行处理一番
- 顶点着色器处理完了以后交给细分着色器,生成新的几何体处理(平顺)模型生成最终形态,对全部的图像进行修改几何图元类型或者放弃全部的凸缘
- 而后交给几何着色器对原坐标进行一些修改(通常用于特效方面的)
- 接着进行图元设置,其实能够理解为描述图片到底长啥样
- 接下来进行剪切,剪切顾名思义就是剪切视口以外的绘制
- 下面就是光栅化,光栅化就是输入图元的数学描述,转化为与屏幕对应的位置像素片元。其实很好理解,就是把这个图片切成一个个的像素点而后交给片元着色器
- 片元着色器就会处理每个像素点,给每个像素点进行着色,其实就是片元颜色以及深度值传递到片元测试和混合模块。因此说有多少个像素点就要执行多少次片元着色器。
四、管线
其实咱们通俗的理解,上面说的这个流程就是管线。管线也是分两类的:图片
- 固定管线:OpenGL刚出来的时候,你们都是用的固定管线,就是全部的流程都是固定死了的,你就只能按照这个顺序来,中间的过程你不用管。可是随着后面的业务场景愈来愈丰富,固定管线已经没法知足需求了,因而出现了可编程管线。
- 可编程管线:顾名思义就是能够编程的管线,那么哪一些着色器是能够编程的呢?到目前为止,咱们可以经过GLSL语言编程的着色器是顶点着色器和片元着色器。