上一章节,给大家介绍了图片色彩处理,这一章节,我给大家介绍一下图片效果处理。
图片效果处理包括:这里主要讲图片模糊处理(高斯模糊,马赛克,膨胀,腐蚀,增强对比度)。
原理:通过对采样点进行处理,是采样点和周围点之间产生某种数学联系,改变采样点的色值,从而达到预期效果。
具体实现,主要改变片元着色器里面gl_FragColor的值来达到效果,这里列出具体的计算过程,其它同上一章内容:
1、高斯模糊:
float block=150.0;
float delta=1.0/block;
vec4 color=vec4(0.0);
//权重
float factor[9];
factor[0]=1.0; factor[1]=1.0; factor[2]=1.0;
factor[3]=1.0; factor[4]=1.0; factor[5]=1.0;
factor[6]=1.0; factor[7]=1.0; factor[8]=1.0;
for(int i=-1;i<=1;i++){//三次
for(int j=-1;j<=1;j++){//三次
float x=max(0.0,aCoordinate.x+float(i)*delta);
float y=max(0.0,aCoordinate.y+float(i)*delta);
color+= texture2D(vTexture,vec2(x,y)*factor[(i+1)*3+(j+1)]);
}
}
color=color/9.0;
gl_FragColor=vec4(vec3(color),1.0);
2、马赛克效果:
//把图像进行分割分割成若干份,然后用马赛克填充
vec2 texSize =vec2(400.0,400.0);
vec2 mosaicSize=vec2(8.0,8.0);
//混合纹理
vec2 intXY=vec2(aCoordinate.x*texSize.x,aCoordinate.y*texSize.y);
vec2 XYmosaic=vec2(floor(intXY.x/mosaicSize.x)*mosaicSize.x
,floor(intXY.y/mosaicSize.y)*mosaicSize.y);
vec2 Umosaic=vec2( XYmosaic.x/texSize.x,XYmosaic.y/texSize.y);
gl_FragColor = texture2D( vTexture,Umosaic);
3、膨胀效果:
//寻找周围点
float block=500.0;
float delta=1.0/block;
vec4 maxColor=vec4(-1.0);
for(int i=-1;i<=1;i++){//三次
for(int j=-1;j<=1;j++){//三次
float x=(aCoordinate.x+float(i)*delta);
float y=(aCoordinate.y+float(i)*delta);
//寻找最亮点,代替周围点
maxColor=max(maxColor,texture2D(vTexture,vec2(x,y)));
}
}
gl_FragColor=maxColor;
4、腐蚀效果:
//寻找周围点
float block=500.0;
float delta=1.0/block;
vec4 maxColor=vec4(1.0);
for(int i=-1;i<=1;i++){//三次
for(int j=-1;j<=1;j++){//三次
float x=(aCoordinate.x+float(i)*delta);
float y=(aCoordinate.y+float(i)*delta);
//寻找最暗点,代替周围点
maxColor=min(texture2D(vTexture,vec2(x,y)),maxColor);
}
}
gl_FragColor=maxColor;
5、增强对比度:
float a=0.5;
vec3 y=nColor.rgb;
vec3 x=vec3(0.0,0.0,0.0);
// 增强对比度函数:mix(x,y,a)=x*(1-a)+y*a
gl_FragColor = vec4(mix(x,y,a),1.0);