SDF+Alpha Blending 抗锯齿
在用Easyx等中的普通绘图函数画圆、线等图形是时会产生锯齿,影响观感,
故下面用SDF和alpha blending算法进行抗锯齿。
-
SDF方程的重点是推导一个点到一个点/直线/形状的最短距离的方程,由于它被方程描述所以是一个连续的、可微分的方程,所以我们可以利用方程进行抗锯齿计算。

-
SSAA抗锯齿效率低,渲染一次时间较长,不适合一些需要每秒更新的程序
-
以画圆为例解释SDF算法实质:
遍历圆圈某邻域内的所有像素点,计算每个像素点到圆心的距离d,
若该点在线条外,则用alpha blending将其用过渡颜色填充,
若该点恰好在线条上,则取alpha blending公式中的alpha为1,即直接用目标色填充。
- SDF公式
-
线段SDF公式
注意:“线段”的距离公式需要分两种情况讨论:①做垂直为最短距离 ②与端点
的连线为最短距离


-
圆SDF公式

-
椭圆SDF公式较为复杂

-
Alpha blending公式 (其中①式中的d可以取d/2、d/3等,视具体效果而定)

//SDF+alpha blending
COLORREF mix_color(COLORREF bg, COLORREF color, double alpha)
{
COLORREF result;
result = RGB

本文探讨了如何使用SDF( signed distance field)和AlphaBlending算法来减少绘制圆形、线段等图形时的锯齿问题,通过连续方程实现SSAA抗锯齿,并以画圆为例详细解释了原理。特别提到SDF在实心圆绘制上的效率优化策略,以及AlphaBlending的具体应用和RGB混合函数的实现。

7890

被折叠的 条评论
为什么被折叠?



