OpenGL实例教程04:着色器
什么是着色器?
着色器(Shader)是用来实现图像渲染的,用来替代固定渲染管线的可编辑程序。

顶点处理器:负责(对通过流水线的每个顶点)执行顶点着色器。顶点的数量由调用draw时的参数决定。顶点着色器不知道被渲染基元的拓扑结构。此外,不能在顶点处理器中丢弃顶点。每个顶点只进入顶点处理器一次,经过变换后继续向下传递。
几何处理器:即几何图形处理器,负责执行几何着色器,输入是一个图元的一组顶点。几何着色器可以改变图形的拓扑结构,即就是将一个图元变换为另一个完全不同的图元(例如:改变顶点数量),或者修改图元的位置。
裁剪器:它将图元剪切到标准化框(-1,1之间的立方体)中。它还将它们剪切到近Z和远Z面(离“摄像头”太近,或太远的地方)。还支持自定义裁剪面。
光栅器:在裁剪器中幸存的顶点将映射到屏幕空间坐标。光栅化器根据它们的拓扑将它们渲染到屏幕上。例如,对于三角形来说,这意味着找出所有在三角形内的像素。对于每个三角形内的像素,光栅化器调用片段处理器(负责执行片段着色器)。在这里,你可以选择通过从纹理中采样或使用任何你想要的技术来确定像素的颜色。
C++ 源码中的着色器管理(OpenGL API调用)
着色器与C/ C++程序非常相似,生成一个在GPU上运行的着色器程序,就是创建一条虚拟的流水线:
首先,编写着色器文本,并在程序中使用它(将文本包含在源代码本身的字符数组中,或者通过外部文本文件加载到字符数组中)。
然后一个接一个地将着色器编译成着色器对象。
之后,将这些着色器链对象接到单个程序中,并将其加载到GPU中。
着色器源码
着色器的编写采用的是GLSL(GL Shading Language),类似C语言。生成的程序将在图形卡的GPU (Graphic Processor Unit图形处理单元)上执行。
顶点着色器
顶点着色器是流水线上的第一道工序,主要负责导入并处理顶点数据。
片段着色器
片段着色器的工作是确定片段(像素)的颜色。
C++ 代码展示:
运行效果:
