膨胀:取一个像素周围的点,取最亮的点为当前的点颜色,为膨胀效果

腐蚀:取一个像素周围的点,取最暗的点为当前的点颜色,为腐蚀效果


膨胀Fragment Shader

varyingvec2M_coord;varyingvec3M_normal;varyingvec3M_WordPos;uniformsampler2DU_MainTexture;uniformsampler2DU_SubTexture;voidmain(){vec4maxValue=vec4(0.0);intcoreSize=3;inthalfCoreSize=coreSize/2;floattexelOffset=1/200.0;for(inty=0;y<coreSize;y++){for(intx=0;x<coreSize;x++){vec4color=texture2D(U_MainTexture,M_coord+vec2((-halfCoreSize+x)*texelOffset,(-halfCoreSize+y)*texelOffset));maxValue=max(maxValue,color);}}gl_FragColor=maxValue;}


腐蚀Fragment Shader

varyingvec2M_coord;varyingvec3M_normal;varyingvec3M_WordPos;uniformsampler2DU_MainTexture;uniformsampler2DU_SubTexture;voidmain(){vec4minValue=vec4(1.0);intcoreSize=3;inthalfCoreSize=coreSize/2;floattexelOffset=1/100.0;for(inty=0;y<coreSize;y++){for(intx=0;x<coreSize;x++){vec4color=texture2D(U_MainTexture,M_coord+vec2((-halfCoreSize+x)*texelOffset,(-halfCoreSize+y)*texelOffset));minValue=min(minValue,color);}}gl_FragColor=minValue;}