基于Qt的OpenGL可编程管线学习(18)- 平滑、锐化、边缘检测
1、平滑
shader
//平滑uniformsampler2DU_MainTexture;uniformsampler2DU_SubTexture;varyingvec2M_coord;voidmain(){vec4color=vec4(0.0);intcoreSize=3;floattexelOffset=1/300.0;floatkernel[9];kernel[6]=1;kernel[7]=1;kernel[8]=1;kernel[3]=1;kernel[4]=1;kernel[5]=1;kernel[0]=1;kernel[1]=1;kernel[2]=1;intindex=0;for(inty=0;y<coreSize;y++){for(intx=0;x<coreSize;x++){vec4currentColor=texture2D(U_MainTexture,M_coord+vec2((-1+x)*texelOffset,(-1+y)*texelOffset));color+=currentColor*kernel[index++];}}color/=9.0;gl_FragColor=color;}
效果图
2、锐化
shader
//锐化uniformsampler2DU_MainTexture;uniformsampler2DU_SubTexture;varyingvec2M_coord;voidmain(){vec4color=vec4(0.0);intcoreSize=3;floattexelOffset=1/300.0;floatkernel[9];kernel[6]=0;kernel[7]=-1;kernel[8]=0;kernel[3]=-1;kernel[4]=4;kernel[5]=-1;kernel[0]=0;kernel[1]=-1;kernel[2]=0;intindex=0;for(inty=0;y<coreSize;y++){for(intx=0;x<coreSize;x++){vec4currentColor=texture2D(U_MainTexture,M_coord+vec2((-1+x)*texelOffset,(-1+y)*texelOffset));color+=currentColor*kernel[index++];}}//color/=9.0;gl_FragColor=4.0*color+texture2D(U_MainTexture,M_coord);}
效果图
3、边缘检测
shader
//边缘检测uniformsampler2DU_MainTexture;uniformsampler2DU_SubTexture;varyingvec2M_coord;voidmain(){vec4color=vec4(0.0);intcoreSize=3;floattexelOffset=1/300.0;floatkernel[9];kernel[6]=0;kernel[7]=1;kernel[8]=0;kernel[3]=1;kernel[4]=-4;kernel[5]=1;kernel[0]=0;kernel[1]=1;kernel[2]=0;intindex=0;for(inty=0;y<coreSize;y++){for(intx=0;x<coreSize;x++){vec4currentColor=texture2D(U_MainTexture,M_coord+vec2((-1+x)*texelOffset,(-1+y)*texelOffset));color+=currentColor*kernel[index++];}}//color/=9.0;gl_FragColor=4.0*color+texture2D(U_MainTexture,M_coord);}
效果图
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。