计算机图形学实验指导书vc版Word文档下载推荐.docx
《计算机图形学实验指导书vc版Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验指导书vc版Word文档下载推荐.docx(87页珍藏版)》请在冰豆网上搜索。
1.3.2实验方法29
1.3.3实验效果30
第二章直线生成算法30
2.1实验原理30
2.1.1DDA算法30
2.1.2Bresenham算法30
2.2实验内容30
2.3参考示例程序30
第三章圆和椭圆生成算法32
3.1实验原理32
3.2实验内容32
3.3参考示例程序132
3.4参考示例程序233
第四章裁剪算法35
4.1实验原理35
4.2实验内容35
4.3示例程序35
4.3.1参考例子135
4.3.2参考例子238
第五章二维变换40
5.1实验原理40
5.2实验内容40
5.3示例程序40
5.3.1参考例子140
第六章三维变换44
6.1实验原理:
44
6.2实验内容45
6.3示例程序45
第七章填充算法47
7.1实验原理:
47
7.2实验内容47
7.3示例程序47
第八章曲线曲面50
8.1实验原理50
8.2实验内容50
8.3示例程序51
8.3.1参考例子
(1)51
8.3.2参考例子
(2)52
8.3.3参考例子(3)54
8.3.4参考例子(4)56
第九章真实感图形绘制59
9.1实验原理59
9.2实验内容59
9.3示例程序59
9.3.1参考例子
(1)59
9.3.2参考例子
(2)61
9.3.3参考例子(3)63
第十章动画66
10.1实验原理66
10.2实验内容66
10.3示例程序66
10.3.1参考例子66
参考文献:
72
第一章图形学实验基础
1.1VC++实验环境
1.1.1基本环境
MicrosoftVisualC++6.0是微软推出的功能强大的可视化C/C++语言编译器,运行在Windows9x/2000/NT等平台上,可以建立32位应用程序。
运用这个强大的工具,可以很快地建立具有图形界面、能够运行于Windows操作系统上、有很复杂的功能的程序。
在VC中提供了Windows编程所需的WindowsAPI,以及建立在其基础之上的类库--MicrosoftFoundationClasses(MFC),前者是编写32位Windows程序所必需的应用程序接口,而后者提供了建立较大规模软件的解决方案,正逐渐成为许多C++编译器进行Windows软件开发的工业标准。
另外,VisualC++还提供了可视化的编辑工具,使无论是源代码的编辑,还是应用程序界面设计,都变得十分简单。
VC还具有强大的Debug功能,对于调试程序来说,使用VC的Debug工具将使工作量大大降低。
而在其提供的各种功能中,与图形学直接相关的部分,是其提供的设备无关性和丰富的绘图功能。
Windows是图形界面的操作系统,Windows程序可以使用系统提供的图形设备界面(GraphicsDeviceInterface,GDI)绘制比TurboC中美观、丰富得多的图形,而且其实现十分的简单。
另外,VisualC++中还提供了对OpenGL图形编程的支持,可以简单快速的实现3维场景的渲染,为其加上光照、纹理、雾效等等。
后面还要详细介绍OpenGL相关内容。
在Windows这样一个图形界面操作系统中,图形操作是十分重要的。
图形是Windows的主体。
所有的信息,包括文本,最终都是由图形来实现的。
在Windows程序中,并不是把图形直接画到硬件上去,而是使用一个与硬件无关的设备环境来表示逻辑的设备。
在绘图工作开始之前,必须申请一个设备环境。
Win32API提供了4种设备环境:
显示器环境:
支持图形在视频显示器上绘制
信息环境:
用于检索设备数据
内存环境:
支持在位图上进行图形操作
打印机环境:
支持在打印机或绘图仪上进行图形操作
Windows体系结构的一个重要组件是图形设备界面(GraphicsDeviceInterface,GDI)。
GDI为Windows提供了所有的基本绘图函数。
在Windows的GDI函数中,使用设备环境来作为一个参数。
GDI通过调用相应设备的驱动程序来响应Windows绘图函数的调用。
这种机制实现了硬件无关性,即无需自己编写底层驱动程序代码,因为Windows本身已经包含了这些驱动程序。
Microsoft基础类库(MicrosoftFoundationClasses,MFC)是专门用来为Windows开发C++图形界面应用程序的类库。
它是随着面向对象的编程技术的产生而产生的。
WindowsAPI是一种过程接口,当面向对象的编程技术出现之后,就需要为Win32程序建立一种面向对象的接口。
1992年,Microsoft公司开发了面向对象的应用程序框架(ApplicationFrameworks,AFX),后来演变成了MFC。
实际上,MFC的内部大部分仍然是通过WindowsAPI来实现的。
使用MFC提供的基于对话框程序的模版,我们可以迅速建立一个适于绘图而且具有较好的交互性的应用程序框架。
图形设备接口(GDI)是一个可执行程序,它接受Windows应用程序的绘图请求(表现为GDI函数调用),并将它们传给相应的设备驱动程序,完成特定于硬件的输出,象打印机输出和屏幕输出。
GDI负责Windows的所有图形输出,包括屏幕上输出像素、在打印机上输出硬拷贝以及绘制Windows用户界面。
三种图形输出类型
应用程序可以使用GDI创建三种类型的图形输出:
矢量输出、光栅图形输出和文本输出。
矢量图形输出
矢量图形输出指的是创建线条和填充图形,包括点、直线、曲线、多边形、扇形和矩形的绘制。
光栅输出
光栅图形的输出是指光栅图形函数对以位图形式存储的数据进行操作,它包括各种位图和图标的输出。
在屏幕上表现为对若干行和列的像素的操作,在打印机上则是若干行和列的点阵的输出。
光栅图形输出的优点是速度很快,它是直接从内存到显存的拷贝操作。
缺点是需要额外的内存空间。
Windows在绘制界面时使用了大量的光栅输出。
文本输出
与DOS字符方式下的输出不同,Windows是按图形方式输出的。
这样,在输出文本时,必须以逻辑坐标为单位计算文本的输出位置,而不是象DOS下以文本行为单位输出文本。
这比DOS下的文本输出要难一些。
但是,按图形方式输出文本也给文本输出带来很大的灵活性。
用户可以通过调用各种GDI函数,制造出各种文本输出效果,包括加粗、斜体、设置颜色等。
Windows还提供了一种TrueType(写真字体)。
TrueType字体用一组直线和曲线命令及一些参数来描述字体的轮廓。
Windows可以通过参数来调整直线的长度和曲线的形状,从而实现对字体的自由缩放。
介绍MFC中与GDI有关的类:
为了支持GDI绘图,MFC提供了两种重要的类:
设备上下文类,用于设置绘图属性和绘制图形;
绘图对象类,封装了各种GDI绘图对象,包括画笔、刷子、字体、位图、调色板和区域。
1)设备上下文类
设备上下文类包括CDC和它的派生类CClientDC、CPaintDC、CWindowDC、CMetaFileDC。
CDC是设备上下文类的基类,除了一般的窗口显示外,还用于基于桌面的全屏幕绘制和非屏幕显示的打印机输出。
CDC类封装了所有图形输出函数,包括矢量、光栅和文本输出。
CClientDC(客户区设备上下文)用于客户区的输出,它在构造函数中封装了GetDC(),在析构函数中封装了ReleaseDC()函数。
一般在响应非窗口重画消息(如键盘输入时绘制文本、鼠标绘图)绘图时要用到它。
用法是:
CClientDCdc(this);
//this一般指向本窗口或当前活动视图
dc.TextOut(10,10,str,str.GetLength());
//利用dc输出文本,如果是在CScrollView中使用,还要注意调
//用OnPrepareDC(&
dc)调整设备上下文的坐标。
CPaintDC用于响应窗口重绘消息(WM_PAINT)是的绘图输出。
CPaintDC在构造函数中调用BeginPaint()取得设备上下文,在析构函数中调用EndPaint()释放设备上下文。
EndPaint()除了释放设备上下文外,还负责从消息队列中清除WM_PAINT消息。
因此,在处理窗口重画时,必须使用CPaintDC,否则WM_PAINT消息无法从消息队列中清除,将引起不断的窗口重画。
CPaintDC也只能用在WM_PAINT消息处理之中。
CWindowDC用于窗口客户区和非客户区(包括窗口边框、标题栏、控制按钮等)的绘制。
除非要自己绘制窗口边框和按钮(如一些CD播放程序等),否则一般不用它。
CMetaFileDC专门用于图元文件的绘制。
图元文件记录一组GDI命令,可以通过这一组GDI命令重建图形输出。
使用CMetaFileDC时,所有的图形输出命令会自动记录到一个与CMetaFileDC相关的图元文件中。
2)图形对象类
图形对象类包括CGdiObject、画笔、刷子、字体、位图、调色板、区域等。
CGdiObject是图形对象类的基类,但该类不能直接为应用程序所使用。
要使用GDI对象,必须使用它的派生类:
画笔、刷子、字体、位图、区域等等。
使用图形对象要注意两点:
1.同其他MFC对象一样,GDI对象的创建也要分为两步:
第一步,是定义一个GDI绘图对象类的实例;
第二步调用该对象的创建方法真正创建对象。
2.创建对象:
使用该对象,首先要调用CDC:
:
SelectObject()将它选入到设备上下文中,同时保存原来的设置到一个GDI对象指针比如说pOldObject中。
在使用完后,再用SelectObject(pOldObject)恢复原来的设置。
但是,如果该设备上下文是用户自己创建的,则不必恢复原来设置,因为框架会在该设备上下文生存期结束时删除该设备上下文,同时也就删除了原来存放于该设备上下文中的绘图对象设置。
下面介绍各种对象的用法:
画笔(CPen):
封装GDI画笔,可被选中设备上下文中当前所用得笔。
画笔用于绘制对象的边框以及直线和曲线。
缺省画笔画一条与一个像素等宽的黑色实线。
要使用画笔,首先要定义一个画笔:
CPenpen;
然后创建画笔。
创建画笔有两种方法:
一是使用CPen:
CreatePen(intnPenStyle,intnWidth,DWORDcrColor)进行初始化。
第一个参数是笔的风格。
nPenStyle可选值有:
PS_SOLID实线
PS_DOT虚线
PS_INSIDEFRAME在一个封闭形状的框架内画线,若设定的颜色不能在调色板种找到且线宽大于1,Windows会使用一种混色。
PS_NULL空的画笔,什么也不画
第二个参数是线的宽度,按逻辑单位。
若线宽设为0,则不管是什么映射模式下,线宽始终为一个像素。
第三个参数是线的颜色,可以选16种VGA颜色中的一种。
颜色的设置用一个RGB宏来指定。
RGB宏形式如下
COLORREFRGB(cRed,c