概念解释:
在具体看代码之前,需要先对几何着色器阶段有个初步了解,大概需要知道需要下面几两个概念:
1.图元(graphics primitive)
几乎所有的图形渲染入门书籍里,都要提到这个概念,我们知道,所有的几何模型都是有点,线,三角形等基本单元组成的(这里以三角形为例),每个图元又是由若干个顶点构成。在渲染管线的开始,GPU处理的是每一个顶点,但是GPU是知道每一个顶点是属于哪个三角形的。所有顶点经过顶点着色器处理后输出的结果会经过一个图元装配(Primitive Assembly)的阶段,这个阶段就是把这些处理后的顶点组装成成一个个三角形。为什么这么做呢?因为之后的无论是光栅化和顶点信息插值过程,以及视椎体的裁剪,都是以图元为单位进行的(如果你对这个过程不是非常了解,可以查查资料,或者去看一下刘鹏翻译的《计算机图形学—基于3D图形开发技术》),经过上述的这些阶段后再到达我们熟悉的片元着色阶段,也就离最终渲染结果不远了。
2.几何着色器(Geometry Shader)
对于VS,FS我们都比较熟悉,那GS出现在哪呢?从下面这种图中我们可以看到GS是位于VS和FS之间的。并且是虚线连接,即是可选的。GeometryShader所接收的实际是对VS输出的图元进行添加,删除,或修改,然后输出新的图元信息。再之后的流程就和之前的一样了。
进行线框渲染,一个比较困扰的地方就是我们不知道一个顶点是属于哪一个图元的。但是有了GS的参与之后,这一切就迎刃而解了。后面解释代码时会具体说。