有谁知道可以很好地处理多条抗锯齿线组合的图形系统?
我正在显示一个依赖关系图,并且有一堆从一个点发出的曲线。这些以通常的方式绘制抗锯齿,混合部分覆盖的像素。因此,如果两条线将占据同一像素的一半,则抗锯齿会将其混合为 75% 填充而不是 50% 填充。在彼此顶部绘制足够多的线后,像素混合会钳制并最终得到锯齿线。
我知道反颗粒几何具有计算混合的算法,这些算法可以满足相邻线的需求,并且过采样可能会起作用,但是还有其他方法吗?
有谁知道可以很好地处理多条抗锯齿线组合的图形系统?
我正在显示一个依赖关系图,并且有一堆从一个点发出的曲线。这些以通常的方式绘制抗锯齿,混合部分覆盖的像素。因此,如果两条线将占据同一像素的一半,则抗锯齿会将其混合为 75% 填充而不是 50% 填充。在彼此顶部绘制足够多的线后,像素混合会钳制并最终得到锯齿线。
我知道反颗粒几何具有计算混合的算法,这些算法可以满足相邻线的需求,并且过采样可能会起作用,但是还有其他方法吗?
处理好这种形式的线条组合会很慢(您必须使用延迟渲染方法考虑影响每个像素的所有线条)。我怀疑那里有很多(如果有的话)图书馆可以为你做这件事。
最快和最简单的方法(对于您的情况可能是唯一现实且具有成本效益的解决方案),它几乎可以与任何绘图库一起使用,就是对其进行超级采样 - 以更高的分辨率绘制到屏幕外位图(例如 4 倍宽和更高) , 线宽为 4 像素。绘制此图时禁用抗锯齿,因为它只会减慢速度),然后使用双线性过滤缩小结果。主要的缺点是它为离屏位图使用了大量内存。
如果您需要一个能够“视觉上正确”获得抗锯齿线条的现有系统,您可以尝试使用现有的几个符合 RenderMan 的 3D 渲染器之一。许多渲染器使用的 REYES 算法通过将基元分解为微多边形,然后在每个像素内的几个随机点位置对它们进行采样。因此,即使您有一百万行共同遮挡了 50% 的像素,生成的图像值也将显示大约 50% 的覆盖率。(例如,在许多动画电影中,数以百万计的抗锯齿头发是如何绘制在角色身上的。)
当然,使用成熟的 3D 渲染器绘制 2D 线条就像用大锤敲钉子一样。您需要一个相当病态的场景才能使 3D 渲染器比简单地使用传统的 2D 渲染器进行超级采样更有效。
听起来你想要一个预制的绘图库,我不知道。
但是,要回答您了解任何可行方法的问题,您可以将像素视为正方形。然后,您可以将您绘制的任何形状近似为与像素框相交的多边形。通过将这些多边形与像素的框以及彼此进行剪裁,您可以很好地估计与像素相交的每种颜色相关的区域,以实现准确的抗锯齿。当然,这计算起来非常慢,不适合交互式绘图。