计算机图形学 (三) 图元的属性 - 填充、反走样
填充区属性
平铺 tiling
这个往往将,显示窗口的坐标原点作为图案的起始位置。所以说很不好的一点就是,做动画的时候有可能外轮廓在移动而内部填充图案不动就会很怪-
线性软填充算法
将前景和背景(单个或多个)混合
扫描线填充算法
扫描线填充 - 确定穿过区域的扫描线重叠段
利用奇偶规则识别同一内部区域,扫描线是 y = 常数, 比如与图案有四个交点1234,则填充区域是1-2 & 3-4.
顶点处理:
按如上方法的话,在所有顶点处都会被记为2
- 穿过扫描线的,记为一个顶点;可以判断相邻的三个顶点的y值是否单调
- 否则,记为两个
对于顶点,可以先对多边形的边做预处理,对于某些穿过的点可以通过去掉两条线段中一条的某个顶点的记录,直观上相当于让这条边缩短一个像素使得这个点满足扫描算法。
然后由于逐行扫描的习惯(y++)计算扫描线和边的交点时候可以有一些更加灵活的处理。
比如可以,使用计数器等,来简化求交点的运算(增量方法)
可以预先存储每条边最小的y值,减少无用的(扫描线是否和这条边有交点)的判断
如果是凸边形的话处理可以进行简化,因为内部段一定只有一个。
如果是曲线的话可以利用对称性尽可能简化求交的运算。
区域填充
起始内点 - 类似于形态学的膨胀
边界填充算法
记得早期画图软件里的油漆桶嘛!
它就是8-连通不是4-连通!!很逼死强迫症有没有!
然后就是相对于简单的对于周围一圈进行简单的八叉树\四叉树的深度优先的递归式的搜索的优化了。
用扫描线填充水平像素区域 - 填充该行扫描线的,然后从相邻扫描线上各段的起始位置开始放入堆栈,接着逐步继续处理。
泛滥填充算法
对于不是由边界而是用颜色分区的图形,和上述的判断条件会有一点不一样。
反走样
Nyquist取样频率,最高频率的两倍
解决
1. 过取样 - 在高分辨率下对于对象特性取样并在较低分辨率下显示
2. 区域取样 - 计算每个像素在对象上的分改区域来确定像素
加权掩模 - 过取样时将更大的权值赋给接近像素区域中心的子像素
//其实读这一块我一直想到PS的羽化
直线段的过取样
除了正常的过取样和区域取样,还有一种过滤技术,类似于加权掩模,会假设一个连续的加权表面,比如高斯过滤器
像素移位
电子束根据像素直径的0.25、0.5、0.75移动使得更接近真实点
亮度校正
一个像素 - 代表的45°斜线比水平线要长。所以看起来对角线会比较暗。
所以校正亮度的时候,根据斜率来调整亮度。
区域边界 - 扫描线
前两种还是过取样和区域取样
过取样的时候,比如分成2*2,那么扫描线的数量就需要*2,也就是说要根据,扫描线来确定内部的点。
以中点算法为基础
与中点算法计算哪一个点更接近类似,洁尔阴计算区域覆盖百分比

浙公网安备 33010602011771号