GLSL 效果示例
圆角矩形
带填充和描边的圆角矩形有向距离函数,是在 shader 里画按钮和 UI 卡片的基础。
在线示例
修改右侧代码,左侧预览会实时更新。
工作原理
sdRoundedBox 返回像素到矩形边缘的有向距离,作用和圆形的 length(p) - r 一样。它靠三个技巧完成:
abs(p)把四个象限折叠到一个象限,函数只需要处理右上角。abs(p) - b + r算出像素超出一个缩小版矩形多少。在缩小版矩形外面,length(max(q, 0.0))就是到它角上的距离,角就是这样变圆的。- 最后减去
r,把缩小的矩形按圆角半径重新撑大回来。
因为它是距离,同一个值能得到两种形状:d < 0 是填充,abs(d) < 0.02 是贴着边缘的一条细带,也就是描边。
试着改一改
| 修改 | 效果 |
|---|---|
vec2(0.7, 0.45) 改成 vec2(0.5) | 变成圆角正方形 |
radius 改成 0.45 | 变成胶囊形:两边的圆角在中间相接 |
0.02 改成 0.06 | 描边变粗 |
删掉 fill 那一行 | 只画描边 |