有向距离场Signed Distance Field (SDF)
- 2D距离场是由原点到平面上任意一点的距离,定义为矢量,是有方向的。由这些有方向距离定义的空间,为有向距离场
- 可以利用距离的正负来定义图形的边界,这样就可以利用距离场来绘制图形了
2D距离场所需参数
- 原点O
- 目标点P
- 距离(可以是不同定义下的距离)
- 欧式距离
- 切比雪夫距离
- 曼哈顿距离
- 其他距离定义…
2D距离场
圆形:sdCircle(float2 pos, float d)
正方形:sdSquare(float2 pos, float d)
正菱形:sdRhombic(float2 pos, float d)
椭圆形:sdEllipse(float2 pos, float w, float h)
矩形:sdRect(float2 pos, float w, float h)
菱形:sdRhombus(float pos, float w, float h)
梯形:sdTrapezoid(float2 pos, float up, float down, float h)
等腰三角形:sdTriangleIsocaeles(float2 pos, float down, float h)
任意多边形:sdAnything(float2 pos, float2[] points)
极坐标下任意正多边形:sdPolygopn(float2 pos, float r)
1 | float sdCircle(float2 p, float r) |
- SDF的值是可以进行数学运算的,包括加、减、min、max、与或非等
1 | ... |
- SDF操作还可以加圆角
1 | float opRound(float sdf, float r) |
- 还可以制作圆环效果
1 | float opAnnular(float sdf, float r) |