SDF+Alpha Blending 抗锯齿

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

SDF+Alpha Blending 抗锯齿

 在用Easyx等中的普通绘图函数画圆、线等图形是时会产生锯齿,影响观感,
 故下面用SDF和alpha blending算法进行抗锯齿。
  • SDF方程的重点是推导一个点到一个点/直线/形状的最短距离的方程,由于它被方程描述所以是一个连续的、可微分的方程,所以我们可以利用方程进行抗锯齿计算。
    SSAA抗锯齿效率低,渲染一次时间较长,不适合一些需要每秒更新的程序

  • 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
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值