资源描述:
《实验六二维裁剪》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实用标准文案实验六二维裁剪实验目的:通过实验掌握下列知识:1.掌握OpenGL下裁剪窗口与视区的设置;2.Cohen-Sutherland算法的原理与实现;3.梁友栋-Barskey算法的原理与实现;内容及步骤:一、基础知识介绍1、裁剪窗口与视区裁剪窗口(clippingwindow):在世界坐标系中规定的要显示的二维场景的某个区域,即定义要显示哪里,该裁剪窗口之外的东西不被显示。有时被称作世界窗口、观察窗口或窗口。视区(viewport):在显示器上的何处显示裁剪窗口指定的区域,即定义在哪里显示。窗口和视区的操作特点
2、:(1)改变视区的位置,可以在输出设备显示区的不同位置显示图形;(2)改变视区的尺寸,可以改变窗口内图形的尺寸和位置;(3)固定视区,改变裁剪窗口的大小,可以获得图形缩放的效果;(4)固定视区,移动裁剪窗口位置,可以获得扫视场景的效果;(5)当裁剪窗口与视区的宽、高的比例不同时,显示的物体会发生形变,所以往往使裁剪窗口与视区的宽、高的比例相同。2、OpenGL中的裁剪窗口函数与视区函数世界坐标系中的三维物体三维几何变换投影三维裁剪视区变换屏幕坐标系中显示三维图形的显示流程在OpenGL中,二维裁剪窗口使用下列OpenG
3、L函数:精彩文档实用标准文案gluOrtho2D(xWinMin,xWinMax,yWinMin,yWinMax);四个参数都是用双精度浮点数给出,指定世界坐标系上x-y平面上能够显示的范围,x方向上,能够显示出来的范围是xWinMin~xWinMax,y方向上,能够显示出来的范围是yWinMin~yWinMax。在这个矩形方位之外定义的图形,不能被显示出来。注意,当没有为应用程序指定裁剪窗口时,就使用默认的坐标:xWinMin=-1.0,xWinMax=1.0,yWinMin=-1.0,yWinMax=1.0。这样,
4、默认的裁剪窗口是以坐标系原点为中心,边长为2的正方形区域。那么,这个范围内的图形,显示在显示器上生成窗口的哪个位置呢?这需要通过视区函数(ViewPort,有时也称视口)来指定:glViewport(xViewportMin,xViewportMax,viewportWidth,viewportHeight);这里的所有参数用对应于显示窗口的整数屏幕坐标给出,参数xViewportMin和yViewportMin指定视区左下角的位置,视区的宽度和高度用参数viewportWidth和viewportHeight指定。也
5、就是说,用gluOrtho2D指定显示范围的图形在用glViewport指定的窗口位置显示出来。注意,当没有在应用程序中用glViewport指定视区时,则默认的视区大小及位置与整个OpenGL显示窗口一样。显然,当gluOrtho2D和glViewport指定的矩形区域的宽高比不一样时,图形会发生形变。那么,已经在世界坐标系中定义的物体,计算机的显示系统怎样确定哪些部分显示,哪些部分不显示呢?这是通过相关的裁减算法计算出来的。二、裁减算法1、点的裁剪判断点P=(x,y)是否在裁剪区域(xWinMin,xWinMax,
6、yWinMin,yWinMax)内,只要判断是否满足条件如果满足,就表明在裁剪区域内,否则,就在裁剪区域之外。2、线段的裁减精彩文档实用标准文案线段的裁减要判断线段与裁剪矩形边界的各种关系。经典的线段裁剪算法有Cohen-Sutherland算法和梁友栋-Barskey算法。Cohen-Sutherland算法的代码如下:classwcPt2D{public:GLfloatx,y;};inlineGLintround(constGLfloata){returnGLint(a+0.5);}/*Defineafour-bi
7、tcodeforeachoftheoutsideregionsofa*rectangularclippingwindow.*/constGLintwinLeftBitCode=0x1;constGLintwinRightBitCode=0x2;constGLintwinBottomBitCode=0x4;constGLintwinTopBitCode=0x8;/*Abit-maskregioncodeisalsoassignedtoeachendpointofaninput*linesegment,accordingt
8、oitspositionrelativetothefouredgesof*aninputrectangularclipwindow.**Anendpointwitharegion-codevalueof0000isinsidetheclipping*window,otherwiseitisoutsideatleastoneclip