圆角矩形 shader

转载自:  http://glslsandbox.com/e#43292.1




// rectangle shader
// http://glslsandbox.com/e#43268.6


#ifdef GL_ES
precision mediump float;
#endif


#extension GL_OES_standard_derivatives : enable


uniform vec2 resolution;


// ref.: https://www.shadertoy.com/view/MssyRN


//---------------------------------------------------------
// draw rounded rectangle
//---------------------------------------------------------
float roundedRectangle (vec2 uv, vec2 pos, vec2 size, float radius, float thickness)
{
  float d = length(max(abs(uv - pos), size) - size) - radius;
  return 1.0 - smoothstep(thickness, thickness+0.01, d);
  //return smoothstep(0.66, 0.33, d / thickness * 5.0);
}
//---------------------------------------------------------
// draw rectangle frame with rounded edges
//---------------------------------------------------------
float roundedFrame (vec2 uv, vec2 pos, vec2 size, float radius, float thickness)
{
  float d = length(max(abs(uv - pos), size) - size) - radius;
  return 1.0 - smoothstep(thickness, thickness+0.01, abs(d));
  //return smoothstep(0.55, 0.45, abs(d / thickness) * 5.0);
}
//---------------------------------------------------------
void main()
{
  vec2 npos = gl_FragCoord.xy / resolution.xy;   // 0.0 .. 1.0
  float aspect = resolution.x / resolution.y;    // aspect ratio x/y
  vec2 ratio = vec2(aspect, 1.0);                // aspect ratio (x/y,1)
  vec2 uv = (2.0 * npos - 1.0) * ratio;          // -1.0 .. 1.0


  vec3 col = vec3(0.0);
  vec2 pos = vec2(0.0, 0.0);
  vec2 size = vec2(0.8, 0.2);
  float radius = 0.1;
  float thickness = 0.012;


  //--- rounded rectangle ---
  const vec3 rectColor = vec3(0.1, 0.3, 0.2);
  float intensity = roundedRectangle (uv, pos, size, radius, thickness);
  col = mix(col, rectColor, intensity);


  //--- rounded frame ---
  const vec3 frameColor = vec3(0.0, 0.8, 0.5);
  intensity = roundedFrame (uv, pos, size, radius, thickness);
  col = mix(col, frameColor, intensity);


  gl_FragColor = vec4 (col, 1.0);
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值