顶点着色器
顶点着色器是处理VBO/VAO提供的顶点信息的程序。VBO/VAO提供的每个顶点都执行一遍顶点着色器。Uniforms(一种变量类型)在每个顶点保持一致,属性(Attribute)每个顶点都不同(可以理解为输入顶点属性)。执行一次VertexShader输出一个Varying(可变变量)和gl_positon。
顶点着色器的结构
顶点着色器的输入输出
顶点着色器的输入
- 着色器程序:描述顶点上执行操作的顶点着色器程序源代码或者可执行文件
- 顶点着色器输入(或者属性(Attributs)):用顶点数组提供的每个顶点的数据
- 统一变量(Uniform):顶点/片段 着色器使用的不变数据
- 采样器(Samplers):代表顶点着色器使用纹理的特殊统一变量类型
顶点着色器的输出
顶点着色器的输出数据是varying(易变)变量,在图元光栅化阶段,这些varying值为每个生成的片元进行计算,并将结果作为片元着色器的输入数据。从分配给每个顶点的原始varying值来为每个片元生成一个varying值的机制叫做插值。其余的特殊输出有很多,关于点的包括:
- gl_Position 指定了着色器在推出执行之后顶点的最终位置。这个变量必须写入到着色器中.
- gl_PointSize 用于控制点的输出大小,如果想要顶点着色器程序内部控制点的大小,可以调用
片段着色器
片段着色器为片段(像素)上的操作实现了通用的可编程方法,光栅化输出的每个片段都执行一遍片段着色器,对光栅化阶段生成每个片段执行这个着色器,生成一个或多个(多重渲染)颜色值作为输出。
片段着色器的结构
片段着色器的输入输出
片段着色器的输入
片段着色器接受顶点管线最终输出的迭代值,这些输入包括:
- 片段的位置,
- 已解析的主颜色和辅助颜色
- 一系列的纹理坐标
- 片段雾坐标距离。
片段着色器的输出
在片段着色器中,特殊的输入值经过组合,产生片段的最终值,一些特殊的输出值如下:
- gl_FragColor 是片断的最终颜色。
- gl_FragDepth 片断的深度值
- gl_FragData 允许把数据写入到额外的缓冲区中
重点可以介绍一下如何渲染多个缓冲区:
片段着色器可以使用gl_FragData 数组,把值同时输出到多个缓冲区,在数组元素gl_FragData[n] 中写入一个值将导致这个颜色被写入到缓冲区中一个适当的片段中,这个片段位于传递给glDrawBuffers()函数的数组的第n个元素中,片断着色器把值写入到gl_FragColor 或者gl_FragData 中,但是不能同时写入到两者中.