代码之家  ›  专栏  ›  技术社区  ›  Pete Kirkham

按覆盖范围的抗锯齿合成?

  •  2
  • Pete Kirkham  · 技术社区  · 15 年前

    有谁知道一个图形系统可以很好地处理多条抗锯齿线的合成吗?

    我展示了一个依赖关系图,有一堆曲线从一个点发出。这些是以通常的方式绘制的抗锯齿,混合部分覆盖的像素。因此,如果两行占据一个像素的一半,抗锯齿会将其混合为75%填充,而不是50%填充。有足够的线在彼此上面绘制,像素混合钳制和你结束与锯齿线。

    我知道反颗粒几何有计算混合的算法,这些算法迎合了相邻的线条,过采样可能会起作用,但还有其他方法吗?

    3 回复  |  直到 15 年前
        1
  •  2
  •   Jason Williams    15 年前

    很好地处理这种形式的线合成会很慢(您必须使用延迟渲染方法考虑影响每个像素的所有线)。我怀疑有很多(如果有的话)图书馆会为你做这件事。

    最快和最简单的方法(可能也是唯一现实和成本效益高的解决方案),这将与几乎任何绘图库一起使用,将其超级采样-以更高的分辨率绘制到屏幕外位图(例如,4倍的宽度和更高,宽度为4像素的线条。在绘制此图时禁用抗锯齿,因为它只会减慢速度),然后使用双线性过滤缩小结果。主要的缺点是它使用了大量的内存用于屏幕外位图。

        2
  •  1
  •   jcl    15 年前

    如果您需要一个现有的系统,使抗锯齿线“视觉上正确”,您可以尝试使用几个现有的renderman兼容的三维渲染器之一。许多渲染器使用的reyes算法,通过将原语分解成微多边形,然后在每个像素内的几个随机点位置对它们进行采样来工作。因此,即使你有一百万条线共同遮挡了50%的像素,结果图像值将显示大约50%的覆盖率。(例如,这就是在许多动画电影中,数百万的抗锯齿头发是如何绘制在角色上的。)

    当然,使用成熟的三维渲染器绘制二维线就像用大锤敲打钉子一样。您需要一个相当病态的场景,以便3d渲染器比使用传统的2d渲染器进行超级采样更有效。

        3
  •  0
  •   Joe    15 年前

    听起来你想要一个预先制作好的绘图库,我不知道。

    然而,要回答你的问题,知道任何方法将工作,你可以考虑一个像素是一个正方形。然后,可以将绘制的任何形状近似为与像素框相交的多边形。通过将这些多边形对像素框进行剪裁并对彼此进行剪裁,可以很好地估计与每个颜色相关的区域,这些区域与像素相交,以便进行精确的抗锯齿处理。当然,这是非常慢的计算,不适合交互式绘图。