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

  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用来保存片元着色器计算完成的片元颜色值,其将送入渲染管线的后继阶段进行处理。

                                               顶点着色器

 

 

                                                        片元着色器

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值