基本图形生成算法
图形的生成:在指定的输出设备上,根据坐标描述构造二维几何图形·。
图形的扫描转换:在光栅显示器等数字设备上确定一个最佳逼近于图形的像素点的过程。
(1)X-扫描线算法
基本思想:按扫描线顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区域的所有像素。
算法步骤:
1. 确定多边形所占有的最大扫描线数,得到多边形顶点的最小和最大y值 ( 和)。
2. 从到,每次用一条扫描线进行填充 。
3. 对一条扫描线填充的过程可分为四个步骤:求交;排序;交点配对;区间填色 。
需考虑对交点位置的取舍,比如交点位于左边界之上向右取整,交点位于右边界之上则向左取整;落在右侧边界的像素不予填充;考虑共享顶点,若其两条边都在扫描线同侧,交点算作零个或两个·,若在扫描线异侧,则交点算作一个。
有效边表:把有效边按与扫描线交点x坐标递增的顺序存放在一个链表中,此链表称为有效边表。有效边表每个节点: 1/k next
构造边表:首先构造一个纵向链表,链表的长度为多边形所占有的最大扫描线数 , 链表的每个结点 ,称为一个桶 , 则对应多边形覆盖的每一条扫描线 。
将每条边的信息链入与该边最小y坐标( )相对应的桶处。也就是说, 若某边的较低端点为,则该边就放在对应的扫描线桶里。
(2)4-连通区域:从区域上的一点出发,通过访问已知点的4-邻接点,在不越出区域的前提下,遍历区域内的所有象素点。
8-连通区域:从区域上的一点出发,通过访问已知点的8-邻接点,在不越出区域的前提下,遍历区域内的所有象素点。
(3)线型和线宽:
线型的显示可用象素段方法实现:
针对不同的线型,画线程序沿路径输出一些连续象素段,在每两个实心段之间有一段中间空白段,他们的长度(象素数目)可用象素模板(pixel mask) 指定。
2、反走样
用离散量表示连续量所引起的失真,称为走样。
走样产生原因:数学意义上的图形是由无限多个连续的、面积为零的点构成;但在光栅显示器上,用有限多个离散的,具有一定面积的像素来近似的表示他们。
走样现象:一是光栅图形产生的阶梯形;二是图形中包含相对渺小的物体时,这些物体在静态图形中容易被丢弃或忽略,在动画序列中时隐时现,产生闪烁。
用于减少或消除这种效果的技术,称为反走样。
反走样的方法:过取样(后滤波)或区域取样(前滤波)
过取样:在高于显示分辨率的较高分辨率下用点取样方法计算,然后对几个像素的属性进行平均得到较低分辨率下的像素属性。
简单过取样:在x ,y 方向把分辨率都提高一倍,使每个象素对应4个子象素,然后扫描转换求得各子象素的颜色亮度,再对4个象素的颜色亮度进行平均,得到较低分辨率下的象素颜色亮度。
重叠过取样:为了得到更好的效果,在对一个像素点进行着色处理时,不仅仅只对其本身的子像素进行采样,同时对其周围的多个像素的子像素进行采样,来计算该点的颜色属性。
基于加权模板的过取样:前面在确定像素的亮度的时候,只是对所有的子像素的亮度进行简单的平均;更常见的做法是给接近像素中心的子元素赋予较大的权值,即对所有子像素的亮度进行加权平均。
区域取样:
在整个像素区域内进行采样,这种技术称为区域取样。又由于像素的亮度是作为一个整体被确定的,不需要划分子像素,故也被称为前置滤波。
过取样中,我们对所有的子像素的亮度进行简单平均或加权平均来确定像素的亮度。
区域取样:我们使用覆盖像素的连续加权函数或滤波函数来确定像素的亮度。