河南理工大学 万方科技学院 课程设计报告
2010 — 2011学年第二学期
课程名称 计算机图形学 设计题目 多边形裁剪算法 学生姓名 孙晓芳 学 号 0816304009
专业班级 计算机科学与技术10升 指导教师 侯守明
2011 年 6 月 29 日
目 录
目 录
目 录 .............................................................................................................................................. I 第1章 程序运行环境 ................................................................................. 错误!未定义书签。
1.1 程序运行环境的简单介绍 ............................................................... 错误!未定义书签。 1.2 程序运行环境的安装 ....................................................................... 错误!未定义书签。 1.3 多边形裁剪算法设计的内容……………………………………………………............... 第2章 直线裁剪和多边形裁剪的简单比较 ................................................................................. 4
2.1 直线裁剪的介绍 ................................................................................................................ 4 2.1.1 直线裁剪的基本原理………………………………………...................................... 2.1.2 直线裁剪算法的分类以及和窗口交点参数值的计算…………………………….. 2.2 多边形裁剪介绍………………………………………………………………………….9
2.2.1 多边形裁剪的基本思想…………………………………………………………….. 2.2.2 多边形和窗口相交的判定方法…………………………………………..
第3章 多边形裁剪方法的详细介绍 ........................................................................................... 12
3.1 Sutherland-Hodgman算法…………………………………………………………………. 3.2 多边形裁剪算法的流程图 .............................................................................................. 12 3.3多边形裁剪算法的实现 ................................................................................................... 13 第4章 代码的实现 ....................................................................................................................... 14 第5章 总结 ................................................................................................................................... 21 参考文献......................................................................................................................................... 22
I
第2章 总体设计
第1章 程序的运行环境
1.1 程序运行环境的简单介绍
本次设计主要是运用了程序设计语言主要以C/C++语言为主,开发平台为Visual C++。现在Windows系统的主流编译环境有Visual C++,C++ Builder,Dev-C++等,它们都是支持OpenGL的。但这次设计主要选择Visual C++ 作为学习OpenGL的实验环境。 Microsoft Visual C++,(简称Visual C++、MSVC、VC++或VC)微软公司的C++开发工具,具有集成开发环境,可提供编辑C语言,C++以及C++/CLI等编程语言。Microsoft Visual C++是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面。
OpenGL作为盖茨设计的主要软件它与其他软件相比主要有以下几个优点 1)与C语言紧密结合: 2)强大的可移植性: 3、高性能的图形渲染:
1.2 程序安装及步骤 1.选择一个编译环境
这里我们选择Visual C++ 作为学习OpenGL的实验环境 2.安装GLUT工具包
GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。Windows环境下的GLUT下载地址:(大小约为150k)
http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip Windows环境下安装GLUT的步骤:
1)将下载的压缩包解开,将得到5个文件
2)glut.h放到GL文件夹(VC6中一般是:C:\\Program Files\\Microsoft Visual Studio\\VC98\\Include\\GL,VC2005中是:C:\\Program Files\\Microsoft Visual Studio 8\\VC\\Include,新建GL文件夹,再将glut.h放到GL文件夹中)。 3)glut.lib和glut32.lib放到静态函数库所在文件夹(VC6中一般是:C:\\Program Files\\Microsoft Visual Studio\\VC98\\Lib, VC2005中是:C:\\Program Files\\Microsoft Visual Studio 8\\VC\\Lib)。 4)把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。(其路径为:C:\\Windows\\System32)
2
第2章 总体设计
3.建立一个OpenGL工程
这里以VC为例:首先从开始->所有程序->Microsoft Visual C++ 6.0菜单中打开VC,也可单击
文
件
:
C:\\Program
Files\\Microsoft
Visual
Studio\\Visual
C++6\\Common\\MSDev98\\Bin\\msdev.exe打开VC,在VC中选择File->New->Project,然后选择Win32 Console Application,输入一个工程名,设为A,然后按OK。在谈出的对话框左边点Application Settings,找到A Simple application并勾上,选择Finish。然后打开工程代码文件:A.cpp,将其内容替换为实验示范代码.
点击运行按钮就可以执行调试程序了。
1.3 多边形裁剪算法设计的内容和要求
这次设计的主要内容; 1)理解多边形裁剪与直线段裁剪的区别; 2)掌握多边形的裁剪过程;
3)理解并掌握Sutherland-Hodgman算法的裁剪思想。
3
第2章 总体设计
第2章 直线裁剪和多边形裁剪的比较
2.1 直线裁剪的介绍
2.1.1直线裁剪的基本原理
图1所示的为直线与窗口边界之间可能出现的几种关系。可以通过检查直线的两个端点是否在窗口之内确定如何对此直线裁剪。如果一直线的两个端点均在窗口边界之内(如图1中P5到P6的直线),则此直线应保留。如果一条直线的一个端点在窗口外(如P9)另一个点在窗口内(如P10),则应从直线与边界的交点(P9)处裁剪掉边界之外的线段。如果直线的两个端点均在边界外,则可分为两种情况:一种情况是该直线全部在窗口之外;另一种情况是直线穿过两个窗口边界。图中从P3到P4的直线属于前一种情况,应全部裁剪掉;从P7到P8的直线属于后一种情况,应保留P7到P8的线段,其余部分均裁剪掉。
图1直线相对干窗口边界的栽剪
直线裁剪算法应首先确定哪些直线全部保留或全部裁剪,剩下的即为部分裁剪的直线。对于部分裁剪的直线则首先要求出这些直线与窗口边界的交点,把从交点开始在边界外的部分裁剪掉。一个复杂的画面中可能包含有几千条直线,为了提高算法效率,加快裁剪速度,应当采用计算量较小的算法求直线与窗口边界的交点。
4