《建筑造型装饰与三维动画第3章.ppt》由会员分享,可在线阅读,更多相关《建筑造型装饰与三维动画第3章.ppt(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第3章基本图形生成算法第3章 基本图形生成算法3.1生成直线的常用算法均假定所画直线的斜率k0,1。3.1.1 DDA画线算法DDA(DigitalDifferentialAnalyzer)画线算法也称数值微分法,是一种增量算法。它的算法实质是用数值方法解微分方程,通过同时对x和y各增加一个小增量,计算下一步的x、y值。第3章 基本图形生成算法已知一条直线段L(P0,P1),其端点坐标为:P0(x0,y0),P1(x1,y1)。可计算出直线的斜率k为:假定端点坐标均为整数,取直线起点P0(x0,y0)作为初始坐标。画线过程从x的左端点x0开始,向x右端点步进,每步x递增1,y递增k(即直线斜率
2、);取像素点(x,round(y)作为当前点的坐标。第3章 基本图形生成算法3.1.2 中点画线算法假设x坐标为xp的各像素点中,与直线最近者已确定,为P(xp,yp),那么,下一个与直线最近的像素只能是正右方的P1(xp+1,yp),或右上方的P2(xp+1,yp+1)两者之一。令M为P1和P2的中点,易知M的坐标为(xp+1,yp+0.5)。设Q是理想直线与垂直线x=xp+1的交点。显然,若M在Q的下方,则P2离直线近,应取为下一个像素;否则应取P1。第3章 基本图形生成算法令a=y0-y1,b=x1-x0,c=x0y1-x1y0。构造判别式:d=a(xp+1)+b(yp+0.5)+cd的
3、初始值d0=a+0.5b在d0的情况下,取正右方像素P1,d1=a(xp+2)+b(yp+0.5)+c=d+a在d0的情况下,取右上方像素P2,d2=a(xp+2)+b(yp+1.5)=d+a+b第3章 基本图形生成算法由于我们使用的只是d的符号,而且d的增量都是整数,只是其初始值包含小数。因此,我们可以用2d代替d,来摆脱小数。如果进一步把算法中2*a改为a+a等等,那么这个算法不仅只包含整数变量,而且不包含乘除法,适合硬件实现。第3章 基本图形生成算法3.1.3 Bresenham画线算法过各行各列像素中心构造一组虚拟网格线,按直线从起点到终点的顺序计算直线与各垂直网格线的交点,然后确定该
4、列像素中与此交点最近的像素。由图3-5不难看出:若st,则Si比较靠近理想直线,应选Si;若st,则Ti比较靠近理想直线,应选Ti。第3章 基本图形生成算法令dx=x2-x1,dy=y2-y1递推公式:di的初值:当di0时,选Ti,当di0时,选Si,由于只包含加、减法和左移(乘2)的运算,而且下一个像素点的选择只需检查di的符号,因此Bresenham画线算法很简单,速度也相当快。第3章 基本图形生成算法3.1.4 直线属性1线型2线宽3线色第3章 基本图形生成算法3.2生成圆弧的常用算法3.2.1 圆的特性圆心位于原点的圆有四条对称轴:x=0,y=0,x=y和x=-y直线。若已知圆弧上一
5、点(x,y),可以得到其关于四条对称轴的其它7个点,这种性质称为八对称性,如下图所示。本节讨论的圆的生成算法均只计算从x=0到x=y分段内(1b区域)的像素点,其余的像素位置利用八对称性即可得出。第3章 基本图形生成算法3.2.2 中点画圆算法假设x坐标为xp的各像素点中,与该圆弧最近者已确定,为P(xp,yp),那么,下一个与圆弧最近的像素只能是正右方的P1(xp+1,yp),或右下方的P2(xp+1,yp-1)两者之一。令M为P1和P2的中点,易知M的坐标为(xp+1,yp-0.5)。显然,若M在圆内,则P1离圆弧近,应取为下一个像素;否则应取P2。第3章 基本图形生成算法判别式d:d的初
6、始值为:在d0的情况下,取右下方像素P2,在d=0,则y=yi-1,di+2=di+1+4(xi-yi)+10如果di+1=ymax的结点对于留在AEL中的每个结点,执行xi+1=xi+1/k对AEL中的各结点按x值从小到大排序y=y+1,成为下一条扫描线的坐标第3章 基本图形生成算法3.3.3 边填充算法基本原理:对每一条扫描线,依次求与多边形各边的交点,将该扫描线上交点右边的所有像素求补。算法虽然简单易行,但对于复杂图形而言,一些像素的颜色值需反复改变多次,且多边形外的像素处理过多,输入、输出的量比有序边表大的多。第3章 基本图形生成算法栅栏填充算法:对于每条扫描线与多边形的交点,将交点与
7、栅栏之间的扫描线上的像素取补,也就是说,若交点位于栅栏左边,则将交点之右、栅栏之左的所有像素取补;若交点位于栅栏右边,则将栅栏之右、交点之左的所有像素取补。多边形外的像素处理大大减少,被重复取补的像素数目也有减少,但仍有一些像素被重复取补。第3章 基本图形生成算法边标志算法:对多边形边界所在像素置一个特殊标志;对于每条与多边形相交的扫描线,从左至右逐个访问该扫描线上的像素。使用一个布尔变量inside来指示当前点的状态,若点在多边形内,则inside为真。若点在多边形外,则inside为假。inside的初始值为假,每当当前访问像素为被打上标志的点,就把inside取反。对未打标志的点,ins
8、ide不变。若访问当前像素时,对inside作必要操作之后,inside为真,则把该像素置为多边形要填充的颜色。对每个像素只访问一次,硬件执行速度快。第3章 基本图形生成算法3.3.4 种子填充算法基本思想:假设在多边形区域内部至少有一个像素是已知的(此像素称为种子像素),由此出发找到区域内所有其他像素,并对其进行填充。由于区域可采用边界定义和内点定义两种方式,区域按连通性又可分为四连通区域和八连通区域两类,所以常用的种子填充算法有:边界表示的四连通区域种子填充算法内点表示的四连通区域种子填充算法边界表示的八连通区域种子填充算法内点表示的八连通区域种子填充算法第3章 基本图形生成算法1边界表示
9、的四连通区域种子填充算法基本思想:从多边形内部任一点(像素)出发,依“左上右下”顺序判断相邻像素,若其不是边界像素且没有被填充过,对其填充,并重复上述过程,直到所有像素填充完毕。可以使用栈结构来实现该算法,算法的执行步骤如下:种子像素入栈,当栈非空时,重复执行如下三步操作:(1)栈顶像素出栈;(2)将出栈像素置成多边形填充的颜色;(3)按左、上、右、下的顺序检查与出栈像素相邻的四个像素,若其中某个像素不在边界上且未置成多边形色,则把该像素入栈。第3章 基本图形生成算法2内点表示的四连通区域种子填充算法基本思想:从多边形内部任一点(像素)出发,依“左上右下”顺序判断相邻像素,如果是区域内的像素,
10、则对其填充,并重复上述过程,直到所有像素填充完毕。它也常称为漫水法。可以使用栈结构来实现该算法,算法的执行步骤如下:种子像素入栈,当栈非空时,重复执行如下三步操作:(1)栈顶像素出栈;(2)将出栈像素置成多边形填充的颜色;(3)按左、上、右、下的顺序检查与出栈像素相邻的四个像素,若其中某个像素是区域内的像素,则把该像素入栈。第3章 基本图形生成算法3扫描线种子填充算法算法思想:在任意不间断区间中只取一个种子像素(不间断区间指在一条扫描线上一组相邻元素),填充当前扫描线上的该段区间;然后确定与这一区段相邻的上下两条扫描线上位于区域内的区段,并依次把它们保存起来,反复进行这个过程,直到所保存的每个
11、区段都填充完毕。可以填充有孔区域,对于每一个待填充区段,只需入栈一次,因此提高了区域填充的效率。第3章 基本图形生成算法3.3.5 圆域的填充对每条扫描线,计算它与圆域的相交区间。接着,为每一条扫描线建立一个新圆表,存放在该行第一次出现的圆的有关信息。然后,为当前扫描线设置一个活化圆表。由于一条线与一个圆只能相交一个区间,所以在活性圆表中,每个圆只需一个结点即可。结点内存放当前扫描线的区间端点,以及用于计算下一条扫描线与圆相交的区间端点所需的增量。该增量用于在当前扫描线处理完毕之后,对端点坐标进行更新计算,以便得到下一条扫描线的区间端点。第3章 基本图形生成算法3.3.6 区域填充属性1填充样
12、式2填充颜色3填充图案第3章 基本图形生成算法3.4字符3.4.1 字符存储与显示1点阵字符每个字符都是利用掩膜来定义,并将其写入帧缓存保存和显示。点阵字符的显示:首先从字库中将它的位图检索出来,然后将检索到的位图写到帧缓冲器中。读取帧缓存中这些像素值,就可以在屏幕上显示此字符。如果将保存在帧缓存中某字符掩膜相应像素值均置成背景色或背景光强,就可以擦除帧缓存中的该字符。第3章 基本图形生成算法2矢量字符矢量字符被表达为一个点坐标的序列,相邻两点表示一条矢量,字符的形状便由矢量序列刻划。矢量字符的显示:首先从字库中读它的字符信息。然后取出端点坐标,对其进行适当的几何变换,再根据各端点的标志显示出
13、字符。第3章 基本图形生成算法3.4.2 字符属性显示的字符的外观由字体、字形、字号、字间距、行间距等属性控制。一般来说,字体确定风格,字形确定外观,字号确定尺寸。1单个字符属性2文本属性第3章 基本图形生成算法3.5裁剪3.5.1 点的裁剪对于一点P(x,y),要判断其是否可见,可利用下面的不等式组来判断此点是否落在窗口范围内:满足上述不等式组的点则在窗口范围内,可见,予以保留;反之,该点落在窗口外,不可见,舍弃(裁剪)。第3章 基本图形生成算法3.5.2 直线裁剪1Cohen-Sutherland裁剪算法(编码裁剪法)基本思想:对于每条待裁剪的线段P1P2分为三种情况处理:(1)若P1P2
14、完全在窗口内,则显示该线段P1P2,简称“取”之;(2)若P1P2完全在窗口外,则丢弃该线段,简称“舍”之;(3)若线段既不满足“取”的条件,也不满足“舍”的条件,则求线段与窗口边界的交点,在交点处把线段分为两段,其中一段完全在窗口外,可舍弃之,然后对另一段重复上述处理。第3章 基本图形生成算法Cohen-Sutherland直线剪裁算法以区域编码为基础,将窗口及其周围的八个方向以4bit的二进制数进行编码,如图3-42所示。具体编码过程为:延长窗口的四条边线(yt、yb、xr、xl),将二维平面分成九个区域。任何一条线段的端点都按其所处区域赋予4位编码CtCbCrCl。第3章 基本图形生成算
15、法如果某线段的两个端点的四位二进制编码全为“0000”,可直接保留;如果对两端点的四位二进制编码进行逻辑与(按位乘)运算,结果不为零,可直接舍弃;否则,这一线段可能与窗口相交。此时,需要对线段进行再分割,即找到与窗口边线的一个交点,根据交点位置,也赋予四位二进制编码,并对分割后的线段重复进行检查,直到全部线段均被舍弃或被保留为止。裁剪窗口第3章 基本图形生成算法2中点分割算法基本思想:当一条直线段既不能直接保留也不能直接舍弃,需要求其与区域的交点时,不断地用对分方法,舍去线段的不可见部分,用中点去逼近线段与窗口边界的交点。第3章 基本图形生成算法3梁友栋-barsky裁剪算法定义直线的参数化方
16、程为:首先按参数化形式写出裁剪条件:这四个不等式可以表示为形式:第3章 基本图形生成算法其中,参数pk,qk定义为:任何平行于裁剪边界之一的直线pk=0,其中k对应于裁剪边界(k=1,2,3,4对应于左、右、下、上边界),如果还满足qk0,则线段完全在边界外,舍弃该线段。如果qk0,则该线段平行于裁剪边界并且在窗口内。当pk0时,线段从裁剪边界延长线的内部延伸到外部。当pk0时,可以计算出线段与边界k的延长线的交点的u值:u=qk/pk。第3章 基本图形生成算法梁友栋-Barsky裁剪算法在寻找线段可见部分(如果有可见线段)时可以归结为四个步骤:(1)如果对所有的k都有pk=0和qk0,删除线
17、段并结束。否则继续执行下一步。(2)对所有pk0的k,计算rk=qk/pk,将1和各个rk值之中的最小值赋给u2。(4)如果u1u2,则线段完全落在裁剪窗口之外,不可见,可直接舍弃。否则,裁剪后线段的端点由参数u的两个值u1、u2计算出来。第3章 基本图形生成算法3.5.3 多边形裁剪1Sutherland-Hodgman算法基本思想:每次用窗口的一条边界对多边形进行裁剪,把落在窗口外部的图形去掉,落在窗口内部的图形保留,并把它作为下一次待裁剪的多边形。这样,当连续用窗口的四条边界对原始多边形进行裁剪后,最后得到的就是裁剪后的结果多边形。第3章 基本图形生成算法2Weiler-Atherton
18、裁剪算法基本思想:将待裁剪多边形(简写为P1)和裁剪矩形窗口(简写为P2)均设定为按顺时针方向排列。算法从P1的任一顶点出发,沿着它的边向下处理,当P1和P2相交时(假定交点为I):(1)若P1的边是进入P2,则继续沿P1的边往下处理,同时输出该线段;(2)若P1的边是从P2中出来,则从此交点I开始,沿着窗口边框向右检测P2的边,即用P2的有效边框去裁剪P1的边,找到P1和P2最靠近交点I的新交点,同时输出由I到S之间窗边上的线段;(3)返回交点I,再沿着P1处理各条边,直到处理完P1的每一条边,回到起点为止。第3章 基本图形生成算法3.5.4 曲线裁剪对于被裁剪的曲线所围成的区域,找出包围(
19、外接)此区域的最小矩形,称其为曲线边界对象的包围矩形(或包围盒),然后测试包围矩形是否与矩形裁剪窗口有重叠。如果包围矩形完全落在裁剪窗口内,则全部保留该对象;如果包围矩形完全落在裁剪窗口外,则全部舍弃该对象;如果不满足上述矩形测试的条件,则要求解直线-曲线联立方程组,得出裁剪窗口与曲线边界线的交点,即裁剪交点,再进行判断。第3章 基本图形生成算法3.5.5 字符裁剪1字符串裁剪把整个字符串作为整体来对待。2字符裁剪分别对每个字符来处理。3矢量像素裁剪每个字符都看作是由一系列矢量(线段)或像素构成的,故对每一个矢量或像素都必须个别地进行裁剪。第3章 基本图形生成算法3.5.6 三维图形的裁剪把二
20、维线段的Cohen-Sutherland裁剪算法稍加改进,就能推广到三维平行投影的裁剪算法中。对空间任意一点P(x,y,z)按其所处位置赋予6位二进制编码。(1)两个端点的编码全为“0000”,直接保留;(2)对两端点的编码进行逻辑与运算,结果不为零,可直接舍弃;(3)否则,计算出线段与窗口表面的交点,并将线段分段后继续处理,直到余下的线段符合前两种简单情况为止。第3章 基本图形生成算法3.6反走样对图形进行光栅化时,是用离散的像素显示在连续空间定义的对象。这种用离散量表示连续量时引起的失真现象称为走样。用于减少或消除走样的技术称为反走样。第3章 基本图形生成算法3.6.1 光栅图形的走样现象1阶梯形走样2狭小图形遗失3细节失真第3章 基本图形生成算法3.6.2 常用反走样技术1提高分辨率2简单的区域取样3加权区域取样