计算机图形学实验报告

更新时间:2024-05-07 02:54:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

计算机图形学 实验报告

学号:20072115

姓名: 班级:计算机 2班

指导老师:何太军

2010.6.19

实验一、Windows 图形程序设计基础

1、 实验目的

1)学习理解

Win32 应用程序设计的基本知识(SDK 编程);

2)掌握Win32 应用程序的基本结构(消息循环与消息处理等); 3)学习使用VC++编写Win32 Application 的方法。 4)学习MFC 类库的概念与结构;

5)学习使用VC++编写Win32 应用的方法(单文档、多文档、对

话框);

6)学习使用MFC 的图形编程。

2、 实验内容

1)使用WindowsAPI 编写一个简单的Win32 程序,调用绘图API 函数绘制若干图形。(可选任务)

2 )使用MFC AppWizard 建立一个SDI 程序,窗口内显示\

is my first SDI Application\。(必选任务)

3)利用MFC AppWizard(exe)建立一个SDI 程序,在文档视口内绘制基本图形(直线、圆、椭圆、矩形、多边形、曲线、圆弧、椭圆弧、填 充、文字等),练习图形属性的编程(修改线型、线宽、颜色、填充样式、文字样式等)。定义图形数据结构Point\\Line\\Circle 等保存一些简单图形数据(在文档类中),并在视图类OnDraw 中绘制。 3、 实验过程

1)使用MFC AppWizard(exe)建立一个SDI 程序,选择单文档; 2)在View类的OnDraw()函数中添加图形绘制代码,说出字符串“Hello,This

is my first SDI Application”,另外实现各种颜色、各种边框的线、圆、方形、多边形以及圆弧的绘制;

3)在类视图中添加图形数据point_pp,pp_circle的类,保存简单图形数据,通过在OnDraw()函数中调用,实现线、圆的绘制。

4、 实验结果

正确地在指定位置显示了\is my first SDI Application\字符串,成功绘制了圆,椭圆,方形,多边形以及曲线圆弧、椭圆弧,同时按指定属性改绘了圆、方形和直线。成功地完成了实验。 结果截图:

5、 实验体会

通过实验一,了解了如用使用基本的SDI编程函数绘制简单的图

形,如:在指定的位置输出字符串以及基本图形线,圆,方形的绘制。同时,初步认识了,MFC编程,了解了一些MFC的结构,和如何进行窗口编程的知识。

实验二、基本图形生成算法(GDI/MFC)

1、实验目的

1)学习理解

Win32 应用程序设计的基本知识(SDK 编程);

2)掌握Win32 应用程序的基本结构(消息循环与消息处理等); 3)学习使用VC++编写Win32 Application 的方法。 4)学习MFC 类库的概念与结构;

5)学习使用VC++编写Win32 应用的方法(单文档、多文档、对话框);

6)学习使用MFC 的图形编程。

2、 实验内容

1) 使用

MFC AppWizard 建立一个SDI程序, 从CClientDC中

派生一个类,添加图绘制算法处理函数:DDA画线、Bresenham画线,要求能绘制任意斜率的直线段;添加中点画圆函数,要求能绘制圆心在任意位置的圆;添加边界表示区域和内点表示区域的种子填充算法。

2) 自定义定义图形数据结构Point\\Line\\Circle\\Polygon等

保存一些简单图形数据(在文档类中),验证以上基本图形

算法:画若干条线段;若干个圆,并以圆作为区域验证种子填充算法;绘制多边形并填充。

3) 学习数据序列化(串行化),实现将自定义类中的数据保存

到自定义文件中:Point等类从CObject派生(参考 VC经典教程 第7 章),重载Serialize函数。

3、实验过程

1)用MFC(exe)建立一个单文档工程;

2)在类视图中的DrawDC类中根据教材上的代码添加相应的DDA画线算法函数,Bresenham画线算法函数,中点画圆函数,边界表示区域和内点表示区域的种子填充算法函数,以供DView类中的OnDraw()函数来调用;

3)自定义circle_2,line_2,point_2类来保存基本的图形数据 4)在OnDraw()函数里调用不同的画线、画圆算法来绘制直线、圆、多边形、曲线等基本图形,调用填充算法函数,用来填充多边形和圆。

5)修改Point为point_resister类,从CObject 派生,并且重载Serialize 函数,Serialize 函数函数体根据不同的成员变量实现数据的保存。

6)在OnDraw()函数里调用直线的Serialize 函数,实现直线数据的串行化,保存数据到指定文件里

4、实验结果

通过输入教材上的代码,能成功地实现相应的算法功能。通过

在OnDraw()中调用不同的函数,实现了相应的线,圆,多边形的绘制,并成功地实现图形的填充。 结果截图:

5、实验体会

通过实验二,更透彻的理解了课本上的DDA画线算法和Bresenham画线算法,中点画圆函数,边界表示区域和内点表示区域的种子填充等算法学习了如何自定义类来存贮简单的图形数据,类的派生和函数的重载,数据的串行化及保存数据到指定的文件,初步认识了MFC中的文档类,学习了一些相关的内容。进一步的了解的MFC的结构与编程方法。

实验三、 OpenGL图形程序设计基础

1.实验目的

1)了解OpenGL 图形库的功能和结构;

2)学习使用Visual C++ 开发基于控制台的图形程序; 3)学习使用Visual C++ 开发基于单文档(GUI 界面)的图形程序。

4)学习使用OpenGL 生成基本图形; 5)学习使用OpenGL 实现图形变换;

2.实验内容

1)使用Visual C++建立一个Win32 Console Application(控制台应用程序),定义若干点坐标,绘制点、线段、不闭合折线、闭合折线、多边形、三角形、四边形、三角扇、三角条带、四边形条带。尝试不同尺寸的点、不同线宽的线、设置颜色等操作。

2 )使用MFC AppWizard 建立一个SDI 程序,根据参考资料2 和3中的步骤设置OpenGL 图形绘制环境。增加绘制4种基本图形(选择其中之一)。 3.实验过程:

1)建立一个控制台应用程序,在RenderScene()函数中调用不同的系统函数分别绘制不同属性的点、线、折线、多边形、扇形等;

2)建立一个SDI程序,按照所给资料设置OpenGL图形绘制环境,并照敲老师所给实列,观看结果,查看关键代码区;

3)仿照所给列子,改写代码,绘制彩色的正方体;

4.实验结果

基本图形显示正确 基本图形截图:

三棱柱截图:

5.实验体会

在实验过程中,在工程的设置里面一定要把相关的库文件导入,设置正方体坐标时, 要根据画布的坐标来,设置好图形的坐标比较重要,这将影响这图形显示的效果。通过这个实验,掌握了许多新图形的画法,同时,通过仿照所给列子,改写代码,绘制彩色的正方体,我也初步认识了绘制立体图形的一些内容,希望在今后的试验中可以

了解更多。

实验四、 二维图形变换程序设计

1.实验目的:

1)掌握图形变换实现原理,基本几何变换,复合变换等; 2)学习使用Visual C++开发菜单,对话框等交互界面的设计; 3)学习使用MFC单文档程序,实现二维图形的基本几何变换。

2.实验内容:

使用Visual C++建立一个单文档程序,采用实验二中定义的基本图形类。在程序中增加图形变换菜单(各基本变换对应菜单项),各图形变换的参数通过对话框提供(设计提供变换参数的对话框,如平移,旋转,比例等),实现二维图形的变换。(提示:在各个图形类中增加相应的成员函数实现平移;菜单选择变换弹出对应变换的参数对话框,对话框中提供参数后取出参数传递给图形对象,通过调用图形变换成员函数实现图形对象的变换)。要求实现直线段、圆、多边形等基本图形的几何变换。

3.实验过程:

(1).根据实验要求,新建菜单,增加二维图形变换子菜单,然后在菜

单上添加平移,比例,对称,旋转以及错切选项。

(2).对菜单中的每一项方法构造响应函数,并给几个需要弹出对话框的选项添加对话框响应函数。

(3).在弹出的对话框输入参数,获取输入的参数,调用相应的变换函数,实现图形的变换。

4.实验结果:

结果正确。 平移xy(100, 0)

5.实验体会:

在这次实验中,涉及到了,菜单和对话框的操作,在vc++6.0中,是非常方便的,VC++6.0都提供了向导型的操作过程和可视化的控件添加,这样节省了代码编写量。通过实验四,进一步加深了对MFC编

1、实验目的:

1)综合使用VC++编写Win32 应用的方法(单文档、多文档、对话框); 2 )掌握交互式绘图程序设计及MFC 相关类的使用; 3)掌握使用MFC 的编写简单动画程序。

2、实验任务:

1)使用MFC AppWizard 建立一个SDI 程序。综合前几次二维绘图

实验的结果,实现基本功能:

建立绘制点、直线段、圆、椭圆、圆弧、多段线(折线)、多边形、贝塞尔(Bezier )曲线的相关类(对于封闭图形,应能多种方式填充)、 字符串。使用实验二中自定义的CClientDC 的派生类,实现交互式(鼠标)绘制以上图形。实现颜色、线型、字体等的交互式选择,实现除曲 线、圆弧外其他图形的鼠标拾取 (框选、点选)。 实现新建文件、保存文件,打开文件(打开保存的自定义图形文件, 并绘制图形)。

软件界面设计 (工具栏、菜单、光标等)。 可选扩展功能:

(1)实现平移、旋转、缩放、对称、错切等图形几何变换 (2)图形的显示控制包括缩放(按比例、选取框)、平移(上、小、 左、右)。

(3)实现图层功能(可见性、颜色、锁定等)、图块功能(及选中

多个图形形成一组,图块的生成、引用、编辑)。

(4 )图形的显示控制包括实时缩放、实时平移和定点平移等。 (5)图形的编辑控制包括撤销、重复、剪切、复制、粘贴、删除、清除。

2 )本任务是在以上程序的基础上,增加动画功能(可单独增加相应 菜单):

交互式绘制三个圆作为太阳、地球、月球 (要求填充,注意位置。数据放入文档类,即文档类有变量太阳、地球、月球等),实现二维动画:月球绕地球转、地球自转(地球采用图案填充)、地球绕太阳公转(按时间比例,可设置参数:时间、颜色、调整大小)。

3、实验过程:

1)建立绘制点、直线段、圆、椭圆、圆弧、多段线(折线)、多边形、贝塞尔(Bezier )曲线的相关类

2)在菜单栏上增加相应的菜单,用来选择不同的功能 3)对增加的菜单栏设置ID,并且在View类中添加相应的事件响应函数,在各自的响应函数中实现各自的功能

4、实验结果:

基本功能:

扩展功能(做一个简单的太阳系):

在附加功能中,点击“开始”图形开始变换,点击“停止”图形静止。

5、实验体会:

通过这次实验,学习了交互式绘图程序设计,更深入认识了MFC 相关类的使用,完善了自己对MFC编程的认识体系,也熟悉了如何进行图形学中的交互式设计,此次实验综合了以前的许多知识,更为深入的认识了交互式绘图程序设计。对自己的提高也是非常大的。计算机图形学做了七个实验,做了实验之后收获很多,结合课堂上老师的讲解,对计算机图形学从许多方面都有了一定的理解。对更加深入学习计算机打下比较好的基础。

本文来源:https://www.bwwdw.com/article/bj5g.html

Top