方案一
#version 430
in vec2 TexCoords;
out vec4 color;
uniform sampler2D screenTexture;
void main()
{
vec4 pixColor = texture(screenTexture, TexCoords);
vec3 v_params = vec3(0.5, 0.5, 0.1);
vec2 v_centerCoord = vec2(0.5, 0.5);
float dist = length((TexCoords - v_centerCoord) * v_params.xy);
float alpha = pixColor.a;
if(dist < v_params.z)
{
float diff = dist - v_params.z;
if(diff > 0.02)
{
alpha = 1.0 - diff/0.02;
}else
{
alpha = 0.0;
}
pixColor.rgb = pixColor.rgb * alpha;
}
color = vec4(pixColor.rgb, alpha);
}
方案二:画椭圆同理也可变成圆
#version 430
in vec2 TexCoords;
out vec4 color;
uniform sampler2D screenTexture;
void main()
{
//获取纹理坐标下的颜色值 本是画圆 被拉伸 故画椭圆
float _Radius=0.25; //a=0.125 b=0.075 c=0.1
vec4 pixColor = texture(screenTexture, TexCoords);
//左上方区域
if(TexCoords.x<0.5 && TexCoords.y>0.5)
{
vec2 r1 = vec2(0.4-TexCoords.y,TexCoords.x-0.5);
vec2 r2 = vec2(0.6-TexCoords.y,TexCoords.x-0.5);
float r = length(r1) + length(r2);
if(r<_Radius)//以r.x、r.y为两直角边长度,计算斜边长度
{
color = vec4(1,1,1,0);
}
else
{
color = pixColor;
}
}
//左下方区域
else if(TexCoords.x<0.5 && TexCoords.y<0.5)
{
//vec2 r;
//r = vec2(0.5-TexCoords.x,0.5-TexCoords.y);
vec2 r1 = vec2(0.4-TexCoords.y,0.5-TexCoords.x);
vec2 r2 = vec2(0.6-TexCoords.y,0.5-TexCoords.x);
float r = length(r1) + length(r2);
if(r<_Radius)//以r.x、r.y为两直角边长度,计算斜边长度
{
color = vec4(1,1,1,0);
}
else
{
color = pixColor;
}
}
//右上方区域
else if(TexCoords.x>0.5 && TexCoords.y>0.5)
{
//vec2 r;
//r = vec2(TexCoords.x-0.5,TexCoords.y-0.5);
vec2 r1 = vec2(TexCoords.y-0.4,TexCoords.x-0.5);
vec2 r2 = vec2(TexCoords.y-0.6,TexCoords.x-0.5);
float r = length(r1) + length(r2);
if(r<_Radius)//以r.x、r.y为两直角边长度,计算斜边长度
{
color = vec4(1,1,1,0);
}
else
{
color = pixColor;
}
}
//右下方区域
else if(TexCoords.x>0.5 && TexCoords.y<0.5)
{
//vec2 r;
//r = vec2(TexCoords.x-0.5,0.5-TexCoords.y);
vec2 r1 = vec2(TexCoords.y-0.4,0.5-TexCoords.x);
vec2 r2 = vec2(TexCoords.y-0.6,0.5-TexCoords.x);
float r = length(r1) + length(r2);
if(r<_Radius)//以r.x、r.y为两直角边长度,计算斜边长度
{
color = vec4(1,1,1,0);
}
else
{
color = pixColor;
}
}
}
画圆
fixed4 frag(v2f f):SV_Target
{
//获取纹理坐标下的颜色值
fixed4 color = tex2D(_MainTex,f.texcoord);
//左上方区域
if(f.texcoord.x<0.5 && f.texcoord.y>0.5)
{
float2 r;
r.x=0.5-f.texcoord.x;
r.y=f.texcoord.y-0.5;
if(length(r)>_Radius)//以r.x、r.y为两直角边长度,计算斜边长度
{
return fixed4(1,1,1,0);
}
else
{
return color;
}
}
//左下方区域
else if(f.texcoord.x<0.5 && f.texcoord.y<0.5)
{
float2 r;
r.x=0.5-f.texcoord.x;
r.y=0.5-f.texcoord.y;
if(length(r)>_Radius)
{
return fixed4(1,1,1,0);
}
else
{
return color;
}
}
//右上方区域
else if(f.texcoord.x>0.5 && f.texcoord.y>0.5)
{
float2 r;
r.x=f.texcoord.x-0.5;
r.y=f.texcoord.y-0.5;
if(length(r)>_Radius)
{
return fixed4(1,1,1,0);
}
else
{
return color;
}
}
//右下方区域
else if(f.texcoord.x>0.5 && f.texcoord.y<0.5)
{
float2 r;
r.x=f.texcoord.x-0.5;
r.y=0.5-f.texcoord.y;
if(length(r)>_Radius)
{
return fixed4(1,1,1,0);
}
else
{
return color;
}
}
return color;
}