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

下载本文档

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

文档简介

1、第六章、二维观察 min,min()xwywmaxmax(,)xwyw(,)xw yw(a)min,min()xvyvmaxmax(,)xvyv(,)xv yv(b)已知,有两个坐标系a、b。构造一个矩阵,将坐标系a蓝色矩形框中的点(xw,yw)映射到坐标系b中蓝色矩形框中。注意,矩阵变换使用列向量。第六章、二维观察v二维观察流水线v裁剪窗口v规范化和视口变换vOpenGL二维观察函数v裁剪算法v二维点裁剪v二维线裁剪v多边形填充区裁剪v曲线裁剪坐标系v 世界坐标系(World Coordinates)用户处理自己的对象时所采用的坐标系,坐标系的大小及尺寸由用户自己定义。v 设备坐标系(Dev

2、ice Coordinates)与图形显示设备相关的坐标系。如显示器或打印机的坐标系。v 规范化坐标系(Normal Device Coordinates )它是独立于具体的物理设备的一种坐标系,其坐标空间限定在(0.0,0.0)到(1.0,1.0)的坐标范围内。坐标系vDC与NC的关系u对任何一个物理设备而言,DC与NC仅仅是坐标值相差一个比例因子。uNC可以看成是一个抽象的图形显示设备,要输出到具体的显示设备上时,只需乘上一个比例因子。二维观察流水线v 裁剪窗口二维场景中要显示的部分称为裁剪窗口。v 视口显示设备上用于显示裁剪窗口中图形内容的区域称为视口。二维观察流水线v 变焦距效果v 整

3、体放缩效果v 漫游效果把固定大小的裁剪窗口在一幅大图形上移动,视口不变,可以产生漫游的效果。二维观察流水线v 二维观察变换流水线使用建模坐标变换构造世界坐标系场景将世界坐标转换为摄像坐标将摄像坐标转换为规范化设备坐标将规范化设备坐标映射到设备坐标MCWCVCNCDC世界坐标系到观察坐标系的变换矩阵v 世界坐标系到摄像坐标系的变换 (1)点变换等于坐标系相反方向的变换(2)将摄像坐标系原点移动到世界坐标系原点(3)绕原点旋转使两坐标系重合worldviewMR T世界坐标系到观察坐标系的变换矩阵 (x0,y0)yxvuyxvu(xv,yv)(xu,yu)001001001xTy00001uuvv

4、xyRxy已知:(1)观察坐标系的原点在世界坐标系中的位置是(x0,y0)(2)观察坐标系x轴在世界坐标系中的单位向量是u(3) 观察坐标系y轴在世界坐标系中的单位向量是v规范化和视口变换v 裁剪窗口到规范化视口的映射在这种映射中,规范化坐标系对应显示设备。裁剪窗口规范化坐标系视口规范化和视口变换v 变换方法1.以点 为中心进行缩放变换,将裁剪窗口变换成视口大小2.将 移动到min,min()xwywmaxmax(,)xwyw(,)xw ywmin,min()xvyvmaxmax(,)xvyv(,)xv yvmin,min()xwywmin,min()xwywmin,min()xvyv规范化和

5、视口变换v 变换方法minminminminminmin0(1)0(1)001100100100001xxyyxxwindownormviewpyysxwsSsywsxvxwTyvywstMT Sst规范化和视口变换v 变换方法maxminmaxminmaxminmaxminmaxminminmaxmaxminmaxminminmaxmaxminxyxyxvxvsxwxwyvyvsywywxwxvxwxvtxwxwywyvywyvtywyw规范化和视口变换v 裁剪窗口到规范化坐标系的映射在这种映射中规范化坐标系对应裁剪窗口裁剪窗口规范化坐标系视口规范化和视口变换v 变换方法min,min()x

6、wywmaxmax(,)xwyw(,)xw yw( 1, 1) (1,1)(,)xv yvmin,min()xvyvmaxmax(,)xvyv(,)xv yv摄像坐标系和裁剪窗口(a)标准化设备坐标系(b)设备坐标系和视口(c)1.以点 为中心进行缩放变换,将裁剪窗口变换成标准化正方形大小2.将标准化正方形映射到平面指定的视口中。min,min()xwyw规范化和视口变换v 变换方法maxminmaxminmaxminmaxminmaxminmaxminmaxminmaxminmaxminmaxmin2020001022022001windownormsquarenormsquareviewp

7、ortxwxwxwxwxwxwywywMywywywywxvxvxvxvyvyvyvyvMOpenGL中的二维观察变换v (1)指定矩阵栈glMatrixMode(GL_PROJECTION); glLoadIdentity(); v (2)指定裁剪窗口gluOrtho2D(0,w, 0, h);v (3)指定视口glViewport(0,0,w,h);二维点裁剪v 二维点裁剪点的裁剪是图形裁剪的基础,点在窗口内的条件如下:minmaxminmaxxwxxwywyyw二维线裁剪v 直线段与裁剪窗口的关系完全落在窗口内、完全落在窗口外或者与窗口边界相交二维线裁剪v 实交点与虚交点实交点是直线段与

8、窗口矩形边界的交点。虚交点则是直线段与窗口矩形边界延长线或直线段的延长线与窗口矩形边界的交点。二维线裁剪v Cohen-Sutherland算法v 中点分割算法v Liang-Barsky算法Cohen-Sutherland算法v 基本思想对每条直线段p1(x1, y1)p2(x2, y2)分三种情况处理: (1)直线段完全可见,“简取”之。(2)直线段完全不可见,“简弃”之。(3)直线段既不满足“简取”的条件,也不满足“简弃”的条件,需要对直线段按交点进行分段,分段后重复上述处理。Cohen-Sutherland算法v 编码对于任一端点(x, y),根据其坐标所在的区域,赋予一个位的二进制码

9、D3D2D1D0。编码规则如下图所示:(1) 若 ,则D0=1,否则D0=0;(2) 若 ,则D1=1,否则D1=0;(3) 若 ,则D2=1,否则D2=0;(4) 若 ,则D3=1,否则D3=0。minxxwmaxxxwminyywmaxyyw上上下下右右左左1 0 0 1Cohen-Sutherland算法v 裁剪裁剪一条线段时,先求出端点p1和p2的编码code1和code2,然后(1)若code1|code2=0,对直线段应简取之。(2)若code1&code20,对直线段可简弃之。 (3)若上述两条件均不成立。则需求出直线段与窗口边界的交点。在交点处把线段一分为二,其中必有一

10、段完全在窗口外,可以弃之。再对另一段重复进行上述处理,直到该线段完全被舍弃或者找到位于窗口内的一段线段为止。Cohen-Sutherland算法v 求交假定直线的端点坐标为(x1, y1)和(x2, y2)(1)左、右边界交点的计算:y=y1+k(xx1); 其中:x是窗口左边界或右边界的值(2)上、下边界交点的计算:x=x1+(yy1)/k。 其中:y是窗口下边界或上边界的值v 特点用编码方法实现了对完全可见和不可见直线段的快速接受和拒绝Cohen-Sutherland算法v 算法步骤(1)输入直线段的两端点坐标:p1(x1, y1)、p2(x2, y2),以及窗口的四条边界坐标。(2)对p

11、1、p2进行编码:点p1的编码为code1,点p2的编码为code2。(3)若code1|code2=0,对直线段应简取之,转(6);否则,若code1&code20,对直线段可简弃之,转(7);当上述两条均不满足时,进行步骤(4)。 (4)确保p1在窗口外部:若p1在窗口内,则交换p1和p2的坐标值和编码。 (5)根据p1编码从低位开始找码为1处,从而确定p1在窗口外的哪一侧,然后求出直线段与相应窗口边界的交点,并用该交点的坐标值替换p1的坐标值。也即在交点s处把线段一分为二,并去掉p1s这一段。考虑到p1是窗口外的一点,因此可以去掉p1s。转(2)。(6)用直线扫描转换算法画出当前

12、的直线段p1p2。(7)算法结束。 Cohen-Sutherland算法v 举例Cohen-Sutherland算法v 举例中点分割算法v 基本思想当对直线段不能简取也不能简弃时,简单地把线段等分为二段,对两段重复上述测试处理,直至每条线段完全在窗口内或完全在窗口外。其核心思想是通过二分逼近来确定直线段与窗口的交点。v 特点主要计算过程只用到加法或位移运算,易于硬件实现,同时适合于并行计算中点分割算法v 算法步骤(1)若code1|code2=0,对直线段应简取之,结束;否则,若code1&code20,对直线段可简弃之,结束;当这两条均不满足时,进行步骤(2)。(2)找出该直线段离窗

13、口边界最远的点和该直线段的中点。判中点是否在窗口内:若中点不在窗口内,则把中点和离窗口边界最远点构成的线段丢掉,以线段上的另一点和该中点再构成线段求其中点;如中点在窗口内,则又以中点和最远点构成线段,并求其中点,直到中点与窗口边界的坐标值在规定的误差范围内相等,则该中点就是该线段落在窗口内的一个端点坐标。(3)如另一点在窗口内,则经(2)即确定了该线段在窗口内的部分。如另一点不在窗口内,则该点和所求出的在窗口上的那一点构成一条线段,重复步骤(2),即可求出落在窗口内的另一点。Liang-Barsky算法(参数方程法)v直线的参数方程设线段的两个端点为 参数方程如下:其中, 。,参数u取0,1之

14、间的值。当u0时 ,当u=1时 。如果点 处于裁剪窗口内:Liang-Barsky算法(参数方程法)1minmax11minmax1wwwwu xxxu xxxu yyyu yyy 令:有不等式:Liang-Barsky算法(参数方程法)v直线与窗口边界的相对位置:1、直线段与窗口边界平行,其 ,k表示取哪一条边(k=1,2,3,4,分别对应左、右、下、上)。如果对某一k值,还满足 ,则此直线完全在边界外,可不考虑;如果 ,此线段在边界内。Liang-Barsky算法(参数方程法)2、如果 ,此时把直线从 到 的连线方向作为正向,将此直线无限延伸,同时把把窗口边界无限延伸;然后分以下两种情况进

15、行讨论0kp Liang-Barsky算法(参数方程法)(a)当 时,则是由窗口边界延伸线的外部发出的一条直线进入相应窗口边界延伸线的内部。(b)当 时,则是由窗口边界延伸线的内部发出的一条直线进入相应窗口边界延伸线的外部。0kp 0kp Liang-Barsky算法(参数方程法)v直线与窗口边界的交点当 时,可以用下式计算一参数u,此u值代入直线的参数方程所得点(x,y),是直线延长线与窗口边界k的延长线的交点。对于每条直线,可计算出一对u值 ,通过这两个参数可以判断直线是如何裁剪的。Liang-Barsky算法(参数方程法) 的值可由从窗口边界外出发进入窗口边界内的直线 所涉及窗口边界确定

16、。对于这些窗口边界可计算出各 ,取 中最大值为 的值可由从窗口边界内发出进入窗口边界外的直线 所涉及窗口边界确定。对于这些窗口边界可计算出各 ,取 中最小值为 。Liang-Barsky算法(参数方程法)如果 ,则此直线全部在窗口外部可排除,反之,此直线在窗口内,可由 计算出被裁剪直线的端点。多边形裁剪v问题直接用直线段裁剪算法对多边形的每条边进行裁剪,会得到如下图b的结果,而实际结果应该如下图c所示。(a)裁剪前(b)直接采用直线段裁剪的结果(c)正确的裁剪结果Sutherland-Hodgeman多边形裁剪算法v基本思想将多边形的边界作为一个整体,每次用窗口的一条边界作为裁剪边,以裁剪边及

17、其延长线构成裁剪线,将平面区域分成内侧半平面(称为可见侧)和外侧半平面(又叫非可见侧)。Sutherland-Hodgeman多边形裁剪算法v 1) P1不可见,P2可见,则输出线段P1P2与裁剪边界的交点和P2点。2) P1P2均在可见侧,输出P2;3) P1可见,P2不可见,则输出线段P1P2与裁剪边界的交点; 4) P1P2均在不可见侧,没有输出; P1P2I输出焦点I与P2可见P1P2输出P2可见P1P2输出II可见P1P2不输出可见Sutherland-Hodgeman多边形裁剪算法v 实例Sutherland-Hodgeman多边形裁剪算法v 实例Sutherland-Hodgem

18、an多边形裁剪算法v 特点可以正确地裁剪凸多边形,但裁剪凹多边形会出现如下图所示的问题。 即由于多边形是当作一个整体被裁剪的,若裁剪结果出现多个多边形时,Sutherland-Hodgeman多边形裁剪不能获得正确的结果裁剪前裁剪后V1AV2V3EDV4Weiler-Atherton多边形裁剪算法v 基本思想 (1)假设被裁剪多边形和裁剪窗口的顶点序列都按顺时针方向排列。当两个多边形相交时,交点必然成对出现,其中一个是从被裁剪多边形进入裁剪窗口的交点,称为“入点”,另一个是从被裁剪多边形离开裁剪窗口的交点,称为“出点”。(2)算法从被裁剪多边形的一个入点开始,碰到入点,沿着被裁剪多边形按顺时针方向搜集顶点序列;(3)而当遇到出点时,则沿着裁剪窗口按顺时针方向搜集顶点序列。(4)按上述规则,如此交替地沿着两个多边形的边线行进,直到回到起始点。这时,收集到的全部顶点序列就是裁剪所得的一个多边形。(5)由于可能存在分裂的多边形,因此算法要考虑:将搜集过的入点的入点记号删去,以免重复跟踪。将所有的入点搜集完毕后算法结束。Weiler-Atherton多边形裁剪算法v算法步骤: 1、顺时针输入被裁剪多边形顶点序列放入数组1中。 2、顺时针输入裁剪窗口顶点序列放入数组2中。 3、求出被裁

温馨提示

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

最新文档

评论

0/150

提交评论