图形学-多边形的扫描转换

图形学-多边形的扫描转换

x-扫描线算法

x-扫描线算法的基本思想是,按照扫描线顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区间的像素,即完成填充工作。区间的端点可以通过计算扫描线与多边形边界线的交点获得,根据该原理x-扫描线算法可以填充凹凸的或者带有孔的多边形区域。
对于每条穿越多边形的扫描线,x-扫描线算法确定扫描线与多边形相交区间的像素点位置。
算法的核心是按x地政顺序排列交点的x坐标序列,所以x-扫描线算法的算法步骤如下:
在这里插入图片描述
通常,为避免多边形区域的扩大化,需要对交点进行处理,处理规则如下:如果求出的交点的x坐标不是整数,则需要进行取整处理。当该交点处于区间的左边界上时,x坐标向右取整;当该交点处于区间的右边界上时,x坐标向左取整,如果求出的交点的x坐标是整数,则按照"左闭右开"的原则处理,即交点处于左边界上,交点不变;交点处于右边界上,交点的x坐标减1。

当扫描线与多边形的顶点相交的时候,若共享顶点的两条边分别落在扫描线的两侧,交点只有一个;若共享顶点的两条边在扫描线的同一侧,这时交点记为零个或两个。

x-扫描线算法在处理每条扫描线时,需要与多边形的所有边求交,这样处理效率很低。因为,一条扫描线往往只与少数的几条边相交,甚至于整个多边形都不相交。若在处理每条扫描线时都不分青红皂白的把所有边都拿来与扫描线求交,其中绝大多数计算都是徒劳无用的,所以有必要对其进行改进。

y向连贯性算法

改进可以从三个方面进行:首先,在处理一条扫描线时,仅对与它相交的多边形的边(有效边)求交;其次,利用扫描线的连贯性,考虑到当前扫描线与各边的交点顺序与下一条扫描线与各边的交点顺序很可能相同或非常相似,因此当前扫描线处理完毕后,不必为下一条扫描线从头开始构造交点信息;最后,利用多边形的连贯性,认为若某条边与当前扫描线相交,则它很有可能也与下一条扫描线相交且其交点与上一次的交点相关。

为了方便有效边表的建立与更新,需要构造一个边表,用来存放多边形除水平外的所有边的信息。
在这里插入图片描述
新边的数据结构
在这里插入图片描述排序原则
在这里插入图片描述
在这里插入图片描述现在构造有效边表,有效边是指与当前扫描线相交的多边形的边,把有效边按与扫描线交点x坐标递增顺序放在一个链表中,称为有效边表。
在这里插入图片描述
算法过程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

边缘填充算法

边缘填充算法的基本思想是,逐边向右求补。可以按任意顺序处理多边形的每条边,在处理每条边时,首先求出该边与扫描线的交点,然后将每一跳扫描线上交点右方的所有像素取补。
边缘填充算法适用于具有帧缓冲存储器的图形系统,因为在处理每条边时,仅访问与该边相交的扫描线上交点的右方的像素。当处理完所有的边之后,按扫描线顺序读出帧缓冲存储器的内容,送入显示设备。
该算法的优点是简单,缺点是对于复杂图形,每一像素可能要访问多次,输入、输出量比有效边表算法大的多。

在这里插入图片描述
可以采用先画边后填色的方法,这样可使甄嬛从存储器中的每个元素的赋值次数不超过两次。
实现这一方法的算法称为边标志算法
边标志算法的基本思想是,先用一种特殊的颜色在帧缓冲存储器中将多边形的边界勾画出来,然后将着色的的像素点在x坐标递增的顺序两两配对,再将每一对象素所构成的扫描线区间内的所有像素置为填充色。
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值