GLSL初探
GLSL:(着色器语言)
.highp:32bit,一般用于顶点坐标.medium:16bit,一般用于纹理坐标.lowp:8bit,一般用于颜色表示
向量
在做数据传递时需要传递多个参数,使用向量是比较好的选择。要将物体坐标和纹理坐标传递到VertexShader中,用的就是向量类型,每个顶点都是一个思维向量,在Vertex Shader中利用这两个四维向量即可完成自己的纹理坐标映射。声明方式:attribute vec4 position;
矩阵
有一些效果需要传入矩阵类型,比如后面会接触到的怀旧效果器,就需要传入一个矩阵来改变原始数据的像素数据。声明方式: uniform lowp mat4 colorMatrix;
纹理类型
uniform sampler2D texSampler;
varying用法
在顶点着色器和片元着色器之间传递参数,顶点着色器attribute vec2 texcoord;varying vec2 v_texcoord;void main(void){//计算顶点坐标v_texcoord = texcoord;}片元着色器varying vec2 v_texcoord;vec4 texel = texture2D(texSampler,v_texcoord);
GLSL的内置变量
Vertex Shader的内置变量
vec4 gl_position;//用来设置顶点坐标转换屏幕坐标float gl_pointSize;//在粒子效果场景下,需要设置粒子的大小,改变该内置变量的值就是为了设置每一个粒子矩形的大小。
Fragment Shader的内置变量
vec4 gl_FragColor;//指定当前纹理坐标所代表的像素点的最终颜色值。
GLSL的内置函数
.abs(genType x):绝对值函数.floor(genType x):向下取整函数.ceil(genType x):向上取整函数.mod(genType x,genType y):取模函数.min(genType x,genType y):取得最小值函数.max(genType x,genType y):取得最大值函数.clamp(genType x,genType y,genType z):取得中间值函数。.step(genType edge,genType x):如果x .smoothstep:(genType edge0,genType edge1,genType x):如果x<=edge0,则返回0.0,如果x>=edge1,则返回1.0;如果edge0<x<edge1,则执行0~1之间的平滑差值。.mix(genType x,genType y,genType a):返回线性混合的x和y,用公式表达为:x *(1-a) + y *a;这个函数在混合两个纹理图像时非常有用。