第 2 章 计算机图形处理技术
第 2 章 计算机图形处理技术. 2.1 图形处理技术基础 2.1.1 坐标系 一、坐标系分类. 1 、世界坐标系 世界坐标系( WCS : World Coordinate System )是最常用的坐标系,也称为自然坐标系和用户坐标系。它的最常用形式是笛卡儿 右手坐标系 。如图所示,( a )为二维图形的坐标系,( b )为三维物体的坐标系。理论上,世界坐标系是无限大且连续的,也就是说它的定义域为实数域,即它的坐标从-∞到+∞。它用于定义用户整图或最高层图形结构,各子图、图元经调用后都放在用户坐标系的适当位置。. 2 、造型坐标系
第 2 章 计算机图形处理技术
E N D
Presentation Transcript
2.1 图形处理技术基础 2.1.1坐标系 一、坐标系分类
1、世界坐标系 世界坐标系(WCS:World Coordinate System)是最常用的坐标系,也称为自然坐标系和用户坐标系。它的最常用形式是笛卡儿右手坐标系。如图所示,(a)为二维图形的坐标系,(b)为三维物体的坐标系。理论上,世界坐标系是无限大且连续的,也就是说它的定义域为实数域,即它的坐标从-∞到+∞。它用于定义用户整图或最高层图形结构,各子图、图元经调用后都放在用户坐标系的适当位置。
2、造型坐标系 造型坐标系(MCS:Modeling Coordinate System)是右手坐标系。它是用来描述世界坐标系中每个具体物体的形状,每个物体均由其自身的造型坐标系定义。 造型坐标系 局部坐标系 世界坐标系 整体坐标系。 3、观察坐标系 观察坐标系(VCS:View Coordinate System)是为了将三维物体投影到显示屏幕(观察平面)上而建立起来的,是左手坐标系。 作用:指定裁剪空间,确定物体显示输出的部分; 定义观察平面,世界坐标变换为规格化设 备坐标。
4、设备坐标系 图形输出设备(如显示器、绘图机)自身都有一个坐标系,称之为设备坐标系(DCS:Device Coordinate System)或物理坐标系。设备坐标系是一个二维平面坐标系,用于在图形显示设备上定义图形或窗口的位置。 5、规格化设备坐标系 由于不同的图形设备具有不同的设备坐标系,且不同设备之间坐标范围也不尽相同,为了避免由于设备坐标系与设备的相关性影响应用程序的可移植性,我们引入与设备无关的规格化的设备坐标系(NDCS:Normalized Device Coordinate System)。规格化的设备坐标系的取值范围是左下角(0.0,0.0),右上角(1.0,1.0)。
二、坐标变换过程 为在图形设备上显示和观察所构造的几何图形,通常需要进行坐标变换,其变换过程如下:
2.1.2窗口和视区 一、窗口与视区 1、窗口(Windows) 用户坐标系中的一个矩形区域,可以用其左下角点和右上角点坐标来表示。只有在这个区域内的图形才能在设备坐标系下显示输出,其余的将被裁剪掉。窗口可以嵌套,即在第一层窗口中再定义第二层窗口,在第n层窗口中再定义第n+1层窗口,在各种CAD系统中经常用到的框选放大操作就是窗口技术的典型应用。 2、视区(Viewport) 设备坐标系中的一个矩形区域,在图形设备上用来输出图形的最大区域称之为屏幕域,它是有限的整数域,任何小于或等于屏幕域的区域都可定义为视区。视区由用户在屏幕 域中用设备坐标定义,一般也由左下角点和右上角 点坐标来表示,同样视区也可以是多层的。而 且,在同一屏幕还可以定义多个视区。
窗口与视区如图所示 通过变换可以把窗口中的图形和视区中的图形一一对应起来。 输出图形:用户坐标系 设备坐标系 (窗口坐标) (视区坐标) 输入图形:设备坐标系 用户坐标系 (视区坐标) (窗口坐标)
二、窗口—视区变换 设在用户坐标系下定义的窗口为:左下角点的坐标 (wxl,wyb),右上角点的坐标 (wxr,wyt),该窗口在相应设备坐标系下定义的视区为(vxl,vyb)、(vxr,vyt)。如果与用户坐标系中的点W(xw,yw)对应的视区上的点为V(xv,yv),由图可得:
二维图形输出过程 三维图形输出过程
窗口 视区 在此值得注意的是: 1、当视区不变时,窗口尺寸缩小则视区图形尺寸变大,窗口尺寸变大则视区显示尺寸变小。 窗口
3、如果视区的纵横比与窗口的纵横比不一致时,经 变换后的图形在视区中输出时会产生失真现象,因此在定义窗口和视区时,要保证它们的纵横比一致。 窗口 视区 视区
2.1.3图形裁剪 只有位于窗口内的图形才能经过窗口-视图变换送视区中输出显示,而在用户坐标系中究竟有哪些图形位于窗口内或窗口外,只有通过裁剪过程才能判别出来,裁剪边界通常是矩形窗口,也可是任意的多边形。被裁剪的对象经常是点、线段、字符、多边形等。
一、点与字符的裁剪 点的裁剪比较简单,当图形系统的窗口确定之后,设被裁剪的点的坐标为(x,y),则只有当该点的坐标满足下式 该点才位于窗口之内,并经过窗口-视图变换后送视区中显示,否则该点位于窗口之外而被舍去。
字符的裁剪,根据裁剪精度不同,可分为三种情况。如图所示。字符的裁剪,根据裁剪精度不同,可分为三种情况。如图所示。 (1)字串裁剪 用一个限界矩形来包含整个文本字符串,判断该限界矩形是否全部位于裁剪窗口的内部,如果是,则字符串全部保留,如果不是,则字符串全部不可见。这是字符裁剪的最简单方法,裁剪速度最快,但精度最低。
字裁剪 笔划裁剪 (2)字裁剪 类似于串裁剪,但限界矩形以单个字符为单位。 (3)笔划裁剪 通过把一个字符看成一系列短笔划的集合,使字符的裁剪归结为对组成这些字符的笔划的裁剪,必须逐条直线的进行。此种方法可以精确地删除字符在窗口外的部分,如实地反映了字符的裁剪结果,优点是裁剪精度最高,缺点是裁剪过程比较复杂。
二、二维直线段裁剪 线段与窗口的位置关系有如下几种情况 (1)直线段两个端点在窗口内; (2)直线段两个端点在窗口外,且与窗口不相交; (3)直线段两个端点在窗口外,且与窗口相交; (4)直线段一个端点在窗口内,一个端点在窗口外。 从图中我们可以看出,不同位置的线段被窗口边界分成 一段或几段,但其中只有一段落在窗口内,如何找 出落在窗口内线段的起点和终点坐标是关键。常 用的算法有矢量裁剪法、编码裁剪法、中点分割法。
1、编码裁剪法 (1)定义编码状态表。 如图所示,延长窗口的各边,将平面空间划分为九个区域,每个区域有一个四位代码。四位代码意义如下:
第一位:端点在窗口左边界的左侧代码为1,否则代码为0;第一位:端点在窗口左边界的左侧代码为1,否则代码为0; 第二位:端点在窗口右边界的右侧代码为1,否则代码为0; 第三位:端点在窗口底边界的下侧代码为1,否则代码为0; 第四位:端点在窗口上边界的上侧代码为1,否则代码为0。 (2)直线段的两个端点按其所在区域被赋予相应代码,称为端点状态代码。 (3)测试直线段的端点状态,当两端点状态代码都为零,说明该线段完全位于窗口之内;当两端点的状态代码的位逻辑“与”不为零,说明线段位于窗外同一侧。 (4)不能通过上述测试的线段,再求它与窗口边界(或边界的延长线)的有效交点,它将线段分割成两个子段,用上述两个条件对这两个子段进行测试,舍弃位于窗外的一段,而 对剩余部分再次赋给交点处的端点状态代码,再次 测试,再次求交,直至能判断出裁剪剩余部分直线 段是否位于窗口内或在窗外。
2、中点分割法 实际上直线段的裁剪过程即能在用户坐标系中进行,也能在设备坐标系中进行。由于设备坐标系是整数坐标系,因此它非常适合于用中点分割法具体实现直线段的裁剪。 中点分割裁剪算法的原理与编码裁剪算法的原理类似,两者的区别仅在于:当求窗口与直线段的交点时,中点分割法是用逐次求直线段的中点来逼近其交点,且中点的次数不超过log2n次,其中n=max{|△x|,|△y|},△x、△y是直线段两端点在X、Y方向上的增量。 该算法的优点是便于用硬件实现,求两个交点的过程可以并行进行。
三、三维直线段裁剪 以平行投影为例进行说明。 其基本思想是将空间直线段的端点相对于裁剪空间的6个面转换为6位二进制代码。然后采取简单的逻辑判断,去除裁剪空间以外的部分,保留裁剪空间以内的部分。 6个裁剪面的方程为:
代码意义如下: 第一位:端点在窗口的上侧,即y>1代码为1,否则代码为0; 第二位:端点在窗口的下侧, 即y<-1代码为1,否则代码为0; 第三位:端点在窗口的右侧,即x>1代码为1,否则代码为0; 第四位:端点在窗口的左侧,即x<-1代码为1,否则代码为0; 第五位:端点在窗口的后侧,即z>1代码为1,否则代码为0; 第六位:端点在窗口的前侧, 即z<-1代码为1,否则代码为0。 裁剪步骤: 与二维编码裁剪类似,若线段的两端点的编码都为零,则线段落在裁剪空间内,应保留;若两端点的位逻辑“与”不为零,则线段落在窗口空间以外,应舍弃;否则,对此线段进行分段处理,计算此线段与窗口空间平面的交点,并取有效交点,求出交 点的6位编码,重复上述判断,直到各分段完全保留 或完全舍弃。
四、多边形裁剪 逐边裁剪法(1974年由Sutherland和Hodman提出)
逐边裁剪法的原理是:先用窗口的一条边界对多边形进行裁剪,保留裁剪后位于该边界窗口内的部分图形,舍弃外部区域的图形,得到一个或若干个新的封闭多边形。当用窗口的第一条边界处理完后,在用第二条边界对那些新生成的多边形进行裁剪,如此下去,直至窗口的四条边界都裁剪完毕。逐边裁剪法的原理是:先用窗口的一条边界对多边形进行裁剪,保留裁剪后位于该边界窗口内的部分图形,舍弃外部区域的图形,得到一个或若干个新的封闭多边形。当用窗口的第一条边界处理完后,在用第二条边界对那些新生成的多边形进行裁剪,如此下去,直至窗口的四条边界都裁剪完毕。