opengl算法学习---区域填充 & 反走样技术

opengl算法学习---区域填充

多边形内部具有相同颜色或图案属性的连片像素即区域。对区域中所有像素填充着色的过程称为区域填充。

种子填充算法

种子填充算法,即漫水法(Flood Fill Algorithm),是在区域内部已找到的一个像素(即种子)的基础上,通过邻域搜索的方式向外扩散式填充的方法。这种方法通常使用递归来完成。给定区域中的一种子点(x, y),首先判断该点是否区域内的一点,如果是,则将该点填充成新的颜色,然后将该点周围的4个点(四连通)或8个点(八连通)作为新的种子像素点进行同样的处理。

代码实现

等待补充
多边形包含性测试算法
射线法

射线法相比于其它算法,使用更加广泛,可以不需要考虑存在精度问题

原理
对图像上任意一点P,可以从点P向任意方向发出一条射线,若该射线与多边形交点的个数为奇数,则点P位于多边形内;若为偶数,则P位于多边形外部。存在一些极端情形:如点正好位于顶点或者边上,或点的射线经过多边形顶点。

思路

代码实现

等待补充
弧长法

原理
假定多边形是由有向边组成。以被测点为圆心作单位圆,将全部有向边向单位圆作径向投影,计算单位圆上各边投影的代数和。若代数和为零,则被测点在多边形之外;若代数和为2Π,则被测点在多边形之内。

多边形扫描转换算法

扫描线算法是确定水平扫描线与多边形的相交区间,把该区间内的所有像素一次性赋予新的颜色值。该算法充分利用了多边形边界与上下两条相邻扫描线的交点之间的连续性以及同一扫描线上像素之间的连续性。

对每条扫描线,分以下3个步骤:
(1)求交点:计算当前扫描线与多边形所有边的交点。
(2)排序与配对:把所有交点按横坐标值递增排序,并两两配对成区间左右端点。
(3)填色:将各区间内的像素值设置为目标颜色值。

反走样技术

当对图形进行光栅化时,用离散的像素表示连续直线和区域边界引起的失真现象称为走样;用于减少或消除走样的技术称为反走样。

超采样方法

通过软件方式来提高分辨率的方法叫做超采样方法。
该方法分为两步:
(1)伪光栅化:将图形以高于物理光栅设备分辨率的方式完成光栅化。伪光栅化可提高到实际分辨率的2倍或3倍。
(2)合并子像素到要显示的像素尺度,并计算其灰度值。

线段反走样技术

视线段为有宽度的狭长矩形,每个像素被覆盖的面积大小决定了该像素颜色深浅,以此改善显示效果。

多边形反走样算法

类似于线段反走样技术,根据面积调整像素的灰度值。

posted @ 2020-06-11 22:28  springfield_psk  阅读(1122)  评论(0编辑  收藏  举报