计算机图形学_第四章_第1页
计算机图形学_第四章_第2页
计算机图形学_第四章_第3页
计算机图形学_第四章_第4页
计算机图形学_第四章_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四章、图元属性v线属性v曲线属性v区域填充属性v反走样属性属性参数v定义任何影响图元显示方式的参数。 第四章、图元属性v线属性v曲线属性v区域填充属性v反走样属性线属性v线型:实线、虚线、点线v线宽v线帽v线色线属性v线型 实线、虚线、点线 掩模线属性v问题:在不同的直线方向生成不等长划线。v解决:根据直线的斜率调整实心段和空白段的像素数目。线属性v线型:实线、虚线、点线v线宽v线帽v线色线属性v线宽显示相邻的平行线线属性v线宽线属性v粗折线 生成粗折线需要一些额外的处理。通常,显示单根线段的方法不能平滑生成一系列折线段。v三种方法 斜角链接 圆角链接 斜切链接线属性v线型:实线、虚线、点线

2、v线宽v线帽v线色线属性v线帽通过添加“线帽”来调整线端的形状以给出较好看的外观。线帽有方帽、原帽、凸方帽线属性v线型:实线、虚线、点线v线宽v线帽v线色第四章、图元属性v线属性v曲线属性v区域填充属性v反走样属性曲线属性v线型v线宽v颜色曲线属性v线型像素掩模:11100根据曲线斜率设置像素掩模的实心段和空白段像素数目曲线属性v线宽|m|1时绘制垂直段像素曲线属性v 填充平行曲线路径之间的区域曲线属性v 画笔和画刷第四章、图元属性v线属性v曲线属性v区域填充属性v反走样属性区域填充属性v 填充模式v 颜色调和填充区域v 扫描线填充算法v 不规则边界区域填充算法区域填充属性v 填充模式区域填充

3、属性v 颜色调和填充区域将填充图案和背景色混合,图画与背景色混合时使用透明因子来确定背景中的颜色有多少应该混合到对象颜色中。v 线型软填充算法 P=tF+(1-t)B与或异或取代区域填充属性v 扫描线填充算法用水平扫描线从上到下(或从下到上)扫描由多条首尾相连的线段构成的多边形,每根扫描线与多边形的某些边产生一系列交点。将这些交点按照x坐标排序,将排序后的点两两成对,作为线段的两个端点,以所填的颜色画水平直线。多边形被扫描完毕后,颜色填充也就完成了。区域填充属性v 扫描线填充算法Step1:求交,计算扫描线与多边形的交点Step2:交点排序,对第1步得到的交点按照x值从小到大进行排序Step3

4、:颜色填充,对排序后的交点两两组成一个水平线段,以画线段的方式进行颜色填充Step4:是否完成多边形扫描?如果是就结束算法,如果不是就改变扫描 线,然后转第1步继续处理v 问题:对于每一条扫描线,如果每次都按照正常的线段求交算法进行计算,则计算量大,而且效率底下。区域填充属性v 扫描线与多边形交点的特点 每次只有相关的几条边可能与扫描线有交点,不必对所有的边进行求交计算 相邻的扫描线与同一直线段的交点存在步进关系,这个关系与直线段所在直线的斜率有关v 对应方法 扫描线算法需要维护一张由“活动边”组成的表,称为“活动边表(AET)” 通过直线段求交算法计算出来,得到交点的坐标为(x, y),则下

5、一条扫描线与这条边的交点不需要再求交计算,通过步进关系可以直接得到新交点坐标为(x + x, y + 1), x=1/m区域填充属性v 活动边表算法 typedef struct tagEDGE double xi; double dx; int ymax;EDGE;一条边不会一直待在“活动边表”中,当扫描线与之没有交点时,要将其从“活动边表”中删除,判断是否有交点的依据就是看扫描线y是否大于这条边两个端点的y坐标值。区域填充属性v 新边表“新边表”通常在算法开始时建立,建立“新边表”的规则就是:如果某条边的较低端点(y坐标较小的那个点)的y坐标与扫描线y相等,则该边就是扫描线y的新边,应该加

6、入扫描线y的“新边表”。简单说就是:存放该扫描线第一次出现的边。v 新边表与活动边表当算法处理到某条扫描线时,就将这条扫描线的“新边表”中的所有边逐一插入到“活动边表”中。 区域填充属性v 上例中各扫描线的“新边表”如下图所示: 区域填充属性v 扫描线填充算法改进Step1:构建新边表Step2:将活动边表中ymax当前扫描线的边从活动边表中删除Step3:将扫描线对应新边表中的边信息加入到活动边表Step4:根据步进关系计算扫描线与活动部的交点Step5:交点排序,对第1步得到的交点按照x值从小到大进行排序Step6:颜色填充,对排序后的交点两两组成一个水平线段,以画 线段的方式进行颜色填充

7、Step7:是否完成多边形扫描?如果是就结束算法,如果不是就改 变扫描线,然后转第2步继续处理区域填充属性v 多边形顶点的处理 在对多边形的边进行求交的过程中,在两条边相连的顶点处会出现一些特殊情况,因为此时两条边会和扫描线各求的一个交点,也就是说,在顶点位置会出现两个交点。当出现这种情况的时候,会对填充产生影响,因为填充的过程是成对选择交点的过程,错误的计算交点个数,会造成填充异常。 区域填充属性v 左顶点P1、P2和P3的y坐标满足条件 :y1 y2 y2 y3v 上顶点P1、P2和P3的y坐标满足条件 :y2 y1 & y2 y3v 下顶点P1、P2和P3的y坐标满足条件 :y2 y1

8、& y2 y3 区域填充属性v 对于左顶点和右顶点如果不做特殊处理会导致奇偶奇数错误,常采用的修正方法是修改以顶点为终点的那条边的区间,将顶点排除在区间之外,也就是删除这条边的终点,这样在计算交点时,就可以少计算一个交点,平衡和交点奇偶个数。结合前文定义的“边”数据结构:EDGE,只要将该边的ymax修改为ymax 1就可以了。v 对于上顶点和下顶点一种处理方法是将交点计算做0个,也就是修正两条边的区间,将交点从两条边中排除;另一种处理方法是不做特殊处理,就计算2个交点,这样也能保证交点奇偶个数平衡。 区域填充属性v 水平线的处理水平边与扫描线重合,会产生很多交点,通常的做法是将水平边直接画出

9、(填充),然后在后面的处理中就忽略水平边,不对其进行求交计算。v 如何避免填充越过边界线 边界像素的取舍问题也需要特别注意。多边形的边界与扫描线会产生两个交点,填充时如果对两个交点以及之间的区域都填充,容易造成填充范围扩大,影响最终光栅图形化显示的填充效果。为此,人们提出了“左闭右开”的原则,简单解释就是,如果扫描线交点是1和9,则实际填充的区间是1,9),即不包括x坐标是9的那个点。 区域填充属性v 不规则边界区域填充算法从区域内的一个内部点开始,由内向外逐点绘制直到边界。 边界填充算法 像素填充算法区域填充属性v 边界填充算法边界填充算法从一个内点 (x,y)开始检查相邻位置的颜色。如果检

10、查位置不是该边界颜色,就将它改为填充颜色,并再检测其相邻位置。这个过程延续到检测完边界颜色范围内的所有像素为止。v 算法的输入:种子点坐标(x,y),填充色和边界颜色v 填充方法:4/8连通区域填充算法区域填充属性v4连通区域填充递归算法void boundaryFill4(int x, int y, int fillColor, int borderColor)int interiorColor;interiorColor = getPixel(x, y);if(interiorColor != borderColor) & (interiorColor != fillColor)setPi

11、xel(x, y);boundaryFill4(x+1, y, fillColor, borderColor);boundaryFill4(x-1, y, fillColor, borderColor);boundaryFill4(x, y+1, fillColor, borderColor);boundaryFill4(x, y-1, fillColor, borderColor);。区域填充属性v4/8连通区域填充算法的问题 假如内部存在像素的颜色是填充颜色,则算法不能正确的填充整个区域。 存在大量的递归调用,算法性能过低。v 改进 在填充颜色前,先将区域内的填充色像素的颜色修改。 通过沿

12、扫描线填充水平像素段,来代替处理4-邻接点和8-邻接点区域填充属性v扫描线边界填充算法种子像素入栈;当栈非空时作如下三步操作: (1)栈顶像素出栈; (2)填充出栈像素所在扫描行的连续像素段,直到遇到边界像素为止,即每出栈一个像素,就对包含该像素的整个扫描线区间进行填充; (3)在区间中检查与当前扫描线相邻的上下两条扫描线的有关像素是否全为边界像素或已填充的像素,若存在非边界、未填充边界的像素,则把每一区间的最右像素取作种子像素入栈。(4)重复步骤1-3区域填充属性v扫描线边界填充算法区域填充属性v泛滥填充算法 算法的输入:种子点坐标(x, y),填充色和内部点的颜色。 算法原理:算法从指定的

13、种子(x,y)开始,用所希望的填充颜色赋给所有当前为给定内部颜色的像素点。区域填充属性v4连通泛滥填充算法void floodFill4(int x, int y, int fillColor, int interiorColor)int Color; Color = getPixel(x, y);if(interiorColor = Color )setPixel(x, y);floodFill4 (x+1, y, fillColor, borderColor);floodFill4 (x-1, y, fillColor, borderColor);floodFill4 (x, y+1, f

14、illColor, borderColor);floodFill4 (x, y-1, fillColor, borderColor);。走样与反走样v走样走样在光栅图形显示器中,对于非水平且非垂直的直线或多边形边界进行扫描转换时,会呈现锯齿状,如下图所示,这种用离散量表示连续量引起的失真,就叫做走样(Liasing)走样与反走样v 产生原因数学意义上的图形是由无线多个连续的、面积为零的点构成;但在光栅显示器上,用有限多个离散的,具有一定面积的像素来近似地表示他们。v 反走样为了提高图形的显示质量,需要减少或消除走样现象。用于减少或消除这种效果的技术,称为反走样v 思想通过修改沿图元边界的各像素

15、的亮度来平滑边界减少锯齿现象走样与反走样v 反走样技术 过取样 区域取样v 过取样(后滤波)在较高分辨率下扫描转换,并在较低分辨率下显示其结果的技术。v 区域取样(前滤波)通过计算待显示每个像素被物体覆盖区域的多少来确定像素亮度。走样与反走样v 简单过取样思想 每个像素分为若干子像素。 统计沿直线路径的子像素数目。 每个像素的亮度等级正比于子像素数目。走样与反走样v 重叠过取样 为了得到更好的效果,在对一个像素点进行着色处理时,不仅仅只对其本身的子像素进行采样,同时对其周围的多个像素的子像素进行采样,来计算该点的颜色属性。v 如下图所示,设显示器分辨率为mn,其中m=4,n=3,首先把显示窗口划分为(2m+1)(2n+1)个子像素,然后通过扫描转换求得各子像素的颜色值,再对位于像素中心及四周的9个子像素的颜色值进行平均,最后得到显示像素的颜色亮度值。走样与反走样v 区域边界反走样对于有宽度的直线段,过将每个像素亮度设置成与线条部分重叠的区域面积成正比走样与反走样v 区域边界反走样为了简化计算,可以利用一种求相交区域的近似面积的离散计算方法:v 问题1、像素的亮度与相交区域的面积成正比,而与相交区域落在像素内的位置无关,这仍然会导致锯齿。2、直线上沿理想直线方向的相邻两个像素有时会有较

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论