OpenGL学习笔记:第五章 OpenGL顶点着色器和片段着色器(顶点着色器和片段着色器的结构,输入输出)

顶点着色器

顶点着色器是处理VBO/VAO提供的顶点信息的程序。VBO/VAO提供的每个顶点都执行一遍顶点着色器。Uniforms(一种变量类型)在每个顶点保持一致,属性(Attribute)每个顶点都不同(可以理解为输入顶点属性)。执行一次VertexShader输出一个Varying(可变变量)和gl_positon。

顶点着色器的结构

在这里插入图片描述

顶点着色器的输入输出

顶点着色器的输入

  1. 着色器程序:描述顶点上执行操作的顶点着色器程序源代码或者可执行文件
  2. 顶点着色器输入(或者属性(Attributs)):用顶点数组提供的每个顶点的数据
  3. 统一变量(Uniform):顶点/片段 着色器使用的不变数据
  4. 采样器(Samplers):代表顶点着色器使用纹理的特殊统一变量类型

顶点着色器的输出

顶点着色器的输出数据是varying(易变)变量,在图元光栅化阶段,这些varying值为每个生成的片元进行计算,并将结果作为片元着色器的输入数据。从分配给每个顶点的原始varying值来为每个片元生成一个varying值的机制叫做插值。其余的特殊输出有很多,关于点的包括:

  1. gl_Position 指定了着色器在推出执行之后顶点的最终位置。这个变量必须写入到着色器中.
  2. gl_PointSize 用于控制点的输出大小,如果想要顶点着色器程序内部控制点的大小,可以调用

片段着色器

片段着色器为片段(像素)上的操作实现了通用的可编程方法,光栅化输出的每个片段都执行一遍片段着色器,对光栅化阶段生成每个片段执行这个着色器,生成一个或多个(多重渲染)颜色值作为输出。

片段着色器的结构

在这里插入图片描述

片段着色器的输入输出

片段着色器的输入

片段着色器接受顶点管线最终输出的迭代值,这些输入包括:

  1. 片段的位置,
  2. 已解析的主颜色和辅助颜色
  3. 一系列的纹理坐标
  4. 片段雾坐标距离。

片段着色器的输出

在片段着色器中,特殊的输入值经过组合,产生片段的最终值,一些特殊的输出值如下:

  1. gl_FragColor 是片断的最终颜色。
  2. gl_FragDepth 片断的深度值
  3. gl_FragData 允许把数据写入到额外的缓冲区中
    重点可以介绍一下如何渲染多个缓冲区:
    片段着色器可以使用gl_FragData 数组,把值同时输出到多个缓冲区,在数组元素gl_FragData[n] 中写入一个值将导致这个颜色被写入到缓冲区中一个适当的片段中,这个片段位于传递给glDrawBuffers()函数的数组的第n个元素中,片断着色器把值写入到gl_FragColor 或者gl_FragData 中,但是不能同时写入到两者中.

猜你喜欢

转载自blog.csdn.net/KingsMan666/article/details/114174227