计算机图形学(扫描线填充算法)

前言

简单记录一下

正文

简单来说原理就是从上到下扫描一遍图形,在图形内的线段上色,这里的难点主要在于如何判断线段是在图形内还是图形外.

让我们仔细观察上图,答案就在图中。对于未经过顶点的扫描线,如y=6,总是与多边形有偶数个交点,而且位于多边形内部的片段和位于多边形外部的片段交替存在。对于经过了顶点的扫描线,如y=1、y=2和y=7,与多边形的交点既可能是偶数,也可能是奇数。但是如果我们进一步划分,这些经过了顶点的扫描线有些经过了极值顶点,如y=1和y=7,它们的交点个数是奇数;而有些经过了非极值顶点,如y=2,它们的交点个数是偶数。这样的话,不如做一个特殊处理,把所有极值顶点当成两个点,就可以保证扫描线与多边形的交点总是偶数。

当然,把交点个数凑成偶数是有意义的,凑成偶数后就可以把这些交点从左到右两两配对,配对成功的两个点之间的像素全部着色。例如,上图的扫描线y=6与多边形的交点序列是ABCD,从左到右两两配对为AB和CD,然后将AB之间着色,CD之间着色。

所以简单来说,这个方法的步骤就是:

  1. 求交:计算扫描线与多边形各边的交点。
  2. 排序:把所有交点按x值递增顺序排序。
  3. 配对:第一个与第二个,第三个与第四个等等;每对交点代表扫描线与多边形的一个相交区间。
  4. 填色:把相交区间内的像素置成多边形颜色。

以一个具体的例子来说明,假设一条扫描线与一个多边形的边界线交于四点A、B、C、D,这四点把扫描线分为五个区间[0,2],[2,3.5],[3.5,7],[7,11],[11,2]。其中,[2,3.5],[7,11]两个区间落在多边形内,该区间内的像素应取多边形色。其它区间内的像素取背景色。

需要注意的是,扫描线多边形区域填充算法具有直观、几何意义强、占用内存空间少等优点,但是不能直接用于面着色。

结语

好像没啥骚话了,就这样吧

猜你喜欢

转载自blog.csdn.net/m0_73872315/article/details/134151529