1. attribute变量:又称属性变量,该变量只能用于定点着色器,不能用于片元着色器,一般用于描述定点着色器的顶点位置、顶点颜色、顶点纹理坐标等;
  2. Uniforms变量:又称一致变量,该变量可以应用于顶点着色器和片元着色器,作用是把数据从应用程序传递到顶点着色器或者片元着色器,在shader程序内部,uniforms变量就像是C语言里面的常量const,即该变量的值不能被shader程序修改,其一般用于表示变换矩阵、光照参数、纹理采样器等。
  3. Varying变量:又称易变变量,其是从顶点着色器传递到片元着色器的数据变量。一般在顶点着色器中修改varying变量,在片元着色器中使用该变量,但其前提是在顶点shader和片元shader程序中的声明必须是一致的,如下面代码中的v_Color和v_TextureCoord(标红字体的):

//顶点着色器代码

uniform mat4 u_viewProjectionMatrix; //应用程序传入顶点着色器的总变换矩阵

attribute vec4 a_Position; //应用程序传入顶点着色器中的顶点位置

attribute vec4 a_Color; //应用程序传入顶点着色器中的顶点颜色数据

attribute vec4 a_TextureCoord; //应用程序传入顶点着色器中的纹理坐标

varying vec2 v_Color; //给片元着色器传递的顶点颜色数据

varying vec2 v_TextureCoord; //给片元着色器传递的顶点纹理数据

void main() {

gl_Position = u_viewProjectionMatrix * a_Position; //通过总变换矩阵计算此次绘制的顶点位置

 v_Color = a_Color; //将顶点颜色数据传递给片元着色器

v_TextureCoord = a_TextureCoord; //将顶点纹理数据传递给片元着色器

}

//片元着色器代码

precision mediump float; //设置工作精度

varying vec2 v_Color; //接收从顶点着色器传递过来的顶点颜色数据

varying vec2 v_TextureCoord; //接收从顶点着色器传递过来的顶点纹理数据

uniform sampler2D u_texture; //纹理采样器,代表纹理

void main() {

gl_FragColor = texture2D(u_texture, v_TextureCoord) * v_Color;

}

其中gl_Position为内建变量,表示变换后顶点的空间位置。顶点着色器从应用程序中获取最原始的顶点位置,经过顶点着色器的平移、旋转、缩放等数学变换后,生成新的顶点位置,新的顶点位置在顶点着色器中写入到gl_Position,并传递到渲染管线的后继阶段继续处理。

gl_FragColor用来保存片元着色器计算完成的片元颜色值,其将送入渲染管线的后继阶段进行处理。

opengl es 常用三种变量类型---attribute、uniform、varying

                                               顶点着色器

 

opengl es 常用三种变量类型---attribute、uniform、varying

 

                                                        片元着色器

 

相关文章:

  • 2022-12-23
  • 2021-09-07
  • 2021-11-27
  • 2021-12-17
  • 2022-01-12
  • 2022-12-23
  • 2022-12-23
  • 2021-07-02
猜你喜欢
  • 2022-12-23
  • 2021-11-16
  • 2022-12-23
  • 2022-02-18
  • 2022-01-22
  • 2021-10-02
相关资源
相似解决方案