【问题标题】:Drawing an anti-aliased trapezoid绘制抗锯齿梯形
【发布时间】:2012-01-05 11:46:06
【问题描述】:

我试图通过从顶部开始并逐行绘制来绘制抗锯齿梯形。当线不是整数像素时,末端像素是背景灰度和梯形灰度的加权平均值,例如如果一条线长 128.5 像素,那么在每一端,灰度级为:

    0.25*(trapezoid_greylevel)+0.75*(background_greylevel)

不幸的是,结果不是很流畅(我已经在线性化显示器上检查过):

我假设在每个行端我需要考虑 所有 周围的像素以达到适当的灰度级,但我不知道如何做到这一点。有什么指点吗?

【问题讨论】:

    标签: graphics antialiasing


    【解决方案1】:

    由于梯形是凸的,因此很容易根据梯形对点进行分类:如果一个点在所有梯形边的左侧(假设梯形逆时针方向),则该点在内部。

    假设正方形像素(以及比像素大的梯形),您可以通过对角进行分类来轻松地将像素相对于梯形分类:如果所有四个角都在外面,那么像素在外面;如果四个角都在里面,那么像素就在里面。对于其他像素,您可以通过超级采样进行抗锯齿。

    您也可以像Warnock's algorithm 中那样使用四叉树进行自适应渲染,但您必须针对正方形与 梯形(或一般的凸多边形)。您只需要检测正方形和梯形何时不相交或正方形何时在梯形内。超出像素级别的四叉树的深度将决定抗锯齿的精细程度。

    最后,您还可以通过计算梯形覆盖的像素区域的百分比来进行精确渲染。这是多边形裁剪的问题,您可以使用Sutherland–Hodgman algorithm

    【讨论】:

    • @Robs,如果你最终实现了这些,我想看看图像和代码,如果你可以分享的话。谢谢。
    【解决方案2】:

    如果速度不是问题,一个可能的解决方案是以 4 或 8 倍分辨率绘制非抗锯齿梯形,然后线性缩小图像。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 2010-10-03
      • 2011-05-16
      相关资源
      最近更新 更多