计算机图形学实验报告学号:姓名:班级:计算机 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 程序,窗口内显示"Hello,Thisis my first SDI Application"。
(必选任务)3)利用MFC AppWizard(exe)建立一个SDI 程序,在文档视口内绘制基本图形(直线、圆、椭圆、矩形、多边形、曲线、圆弧、椭圆弧、填充、文字等),练习图形属性的编程(修改线型、线宽、颜色、填充样式、文字样式等)。
定义图形数据结构Point\Line\Circle 等保存一些简单图形数据(在文档类中),并在视图类OnDraw 中绘制。
3、实验过程1)使用MFC AppWizard(exe)建立一个SDI 程序,选择单文档;2)在View类的OnDraw()函数中添加图形绘制代码,说出字符串“Hello,Thisis my first SDI Application”,另外实现各种颜色、各种边框的线、圆、方形、多边形以及圆弧的绘制;3)在类视图中添加图形数据point_pp,pp_circle的类,保存简单图形数据,通过在OnDraw()函数中调用,实现线、圆的绘制。
4、实验结果正确地在指定位置显示了"Hello,This 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)掌握三维图形变换实现原理,基本几何变换,复合变换,投影变换等;2)学习使用Visual C++ 开发菜单,对话框等交互界面的设计;3)学习使用OpenGL实现图形模型变换,视图变换,投影变换。
4)学习使用OpenGL 生成基本图形;2.实验内容:1)使用MFC AppWizard建立一个SDI 程序,根据参考资料2和3中的步骤设置OpenGL图形绘制环境。
增加绘制如下图形(选择其中任意两个),注意模型坐标系的选择和顶点坐标的计算。
(可直接使用实验三的设计)。
2)在程序中增加图形变换菜单(各个基本变换对应菜单项),各图形变换的参数通过对话框提供(设计提供变换参数的对话框,如平移,旋转,比例等),实现三维图形的基本几何变换(提示:菜单选择变换弹出对应变换的参数对话框,对话框中提供参数)。
尝试改变投影参数与观察参数,实现图形的投影变换。
3.实验过程:(1).根据实验要求,首先建立变换菜单,在菜单上提供平移,比例,旋转等变换方法。
(2).对菜单中的每一项方法构造响应函数,弹出对话框(3).通过弹出的对话框进行参数输入,并获取输入的参数,调用相应的变换函数,实现图形的变换。
4.实验结果:如压缩文件中Debug文件夹的EXE程序所示:按下平移,输入X,Y,Z轴的平移参数,得出新绘制的图形;按下比例,输入比例系数,得到新绘制的图形;按下旋转,首先输入想要绕某点旋转的,该点的坐标,再输入所要旋转的角度,得出新绘制的图形;原始图形:平移过后:比例放大过后:旋转后:5.实验体会:通过实验五,可以熟练的使用菜单完成各种相应的操作,同时,在上个实验,学习二维图形变换的基础上,学习了如何对三维图形进行变换操作,进一步完善了对于图形变换的学习。
实验六、OpenGL真实感图形程序设计1.实验目的:1)掌握真实感图形生成的基本原理,如消隐,光照,材质等知识;2)学习使用OpenGL,GLUT等生成基本图形,如球体,正方体,茶壶等;3)学习使用OpenGL生成各种光源:点光源,平行光,聚光灯等;4)学习使用OpenGL 设置绘制对象的颜色,材质;5)进一步熟悉OpenGL图形变换技术:几何变换,视图变换,观察变换等:(1).对模型实现各种几何变换,包括对glTranslate,glRotate,glScanglLoadMatrix,glMultMatrix,等使用;(2).视口变换,测试不同大小的视口glViewport;(3).投影变换,要对平行投影与透视投影分别测试,使用不同的观察体参数,观察效果;2.实验内容:使用MFC AppWizard建立一个SDI程序,根据参考资料2和3中的步骤设置Opengl图形绘制环境。