覆盖范围的抗议组合?

时间:2009-12-24 11:08:37

标签: graphics antialiasing

有没有人知道一个图形系统可以很好地处理多个抗锯齿线的组合?

我正在显示一个依赖关系图,并且有一堆曲线从一个点发出。这些是以通常的方式绘制抗锯齿,混合部分覆盖的像素。因此,如果两条线占据相同的一半像素,则抗锯齿​​将其混合为75%填充而不是50%填充。如果有足够的线条相互叠加,则像素混合钳位并最终会出现别名线。

我知道反粒几何有计算混合的算法,这些算法可以适应相邻的线,并且过采样可能有效,但还有其他方法吗?

3 个答案:

答案 0 :(得分:2)

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

最简单,最简单的方法(也可能是针对您的案例的唯一真实且经济的解决方案),几乎适用于任何绘图库,可以对其进行超级采样 - 以更高的分辨率绘制到屏幕外位图(例如4倍)更宽,更高,线宽为4像素。在绘制时禁用抗锯齿,因为它只会减慢速度,然后使用双线性滤波缩小结果。主要的缺点是它为屏幕外位图使用了大量内存。

答案 1 :(得分:1)

如果您需要现有的系统可以“在视觉上正确”获得抗锯齿线,您可以尝试使用几个现有的符合RenderMan标准的3D渲染器中的一个。许多这些渲染器使用的REYES算法通过将基元分解成微多边形,然后在每个像素内的几个随机点位置对它们进行采样来工作。因此,即使您有一百万行共同遮挡50%的像素,结果图像值也会显示大约50%的覆盖率。 (例如,这是如何在许多动画电影中的字符上绘制数百万的抗锯齿毛。)

当然,使用完整的3D渲染器绘制2D线条就像用大锤驱动钉子一样。对于3D渲染器而言,您需要一个相当独特的病态场景,而不仅仅是使用传统2D渲染器进行超级采样。

答案 2 :(得分:0)

听起来你想要一个我不知道的预制图纸库。

但是,要回答您了解任何可行的方法的问题,您可以将像素视为正方形。然后,您可以将绘制的任何形状近似为与像素框相交的多边形。通过将这些多边形剪切到像素框并相互对齐,您可以非常好地估计与像素相交的每种颜色相关的区域,以实现准确的抗锯齿。当然,这很难计算,也不适合交互式绘图。