计算机图形学实验报告.doc_第1页
计算机图形学实验报告.doc_第2页
计算机图形学实验报告.doc_第3页
计算机图形学实验报告.doc_第4页
计算机图形学实验报告.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中南大学信息科学与工程学院实验报告实 验 名 称 实 验 地 点 科技楼四楼 实 验 日 期 2014年6月 指 导 教 师 学 生 班 级 学 生 姓 名 学 生 学 号 提 交 日 期 2014年6月 实验一 Window图形编程基础1、 实验类型:验证型实验 2、 实验目的1、熟练使用实验主要开发平台VC6.0;2、掌握如何在编译平台下编辑、编译、连接和运行一个简单的Windows图形应用程序;3、掌握Window图形编程的基本方法;4、学会使用基本绘图函数和Window GDI对象;3、 实验内容创建基于MFC的Single Document应用程序(Win32应用程序也可,同学们可根据自己的喜好决定),程序可以实现以下要求:1、用户可以通过菜单选择绘图颜色;2、用户点击菜单选择绘图形状时,能在视图中绘制指定形状的图形;4、 实验要求与指导1、建立名为“颜色”的菜单,该菜单下有四个菜单项:红、绿、蓝、黄。用户通过点击不同的菜单项,可以选择不同的颜色进行绘图。2、 建立名为“绘图”的菜单,该菜单下有三个菜单项:直线、曲线、矩形其中“曲线”项有级联菜单,包括:圆、椭圆。3、 用户通过点击“绘图”中不同的菜单项,弹出对话框,让用户输入绘图位置,在指定位置进行绘图。5、 实验结果:六、实验主要代码1、画直线:CClientDC *m_pDC;再在OnDraw函数里给变量初始化m_pDC=new CClientDC(this);在OnDraw函数中添加:m_pDC=new CClientDC(this);m_pDC-MoveTo(10,10);m_pDC-LineTo(100,100);m_pDC-SetPixel(100,200,RGB(0,0,0);m_pDC-TextOut(100,100);2、画圆:void CMyCG:LineDDA2(int xa, int ya, int xb, int yb, CDC *pDC)int dx = xb - xa;int dy = yb - ya;int Steps, k;float xIncrement,yIncrement;float x = xa,y= ya;if(abs(dx)abs(dy)Steps = abs(dx);elseSteps = abs(dy);xIncrement = dx/(float)Steps;yIncrement = dy/(float)Steps;pDC-SetPixel(ROUND(x),ROUND(y),RGB(0,0,0);for(k=0;kSetPixel(ROUND(x),ROUND(y),RGB(0,0,0); 3、画矩形void CRectangleDlg:OnLButtonDown(UINT nFlags, CPoint point) lButtonDownNotUp = TRUE; RECT rect; m_showRectangle. GetClientRect( &rect ) ; if( (point. xrect. left) & (point. yrect. top) ) regionLeftTopTemp = point; CDialog:OnLButtonDown(nFlags, point);void CRectangleDlg:OnMouseMove(UINT nFlags, CPoint point) RECT rect; m_showRectangle. GetClientRect( &rect ); if( ( point.xrect.left ) & ( point.yrect.top ) ) if( ( lButtonDownNotUp = TRUE ) regionRightBottomTemp = point; CDC * pDC = m_showRectangle. GetWindowDC (); pDC - Rectangle( CRect( regionLeftTopTemp, regionRightBottomTemp ) ) ; CDialog:OnMouseMove(nFlags, point);void CRectangleDlg:OnLButtonUp(UINT nFlags, CPoint point) lButtonDownNotUp=FALSE; CDialog:OnLButtonUp(nFlags, point);实验二 基本图形生成算法一、实验类型:验证型实验 二、实验目的1、掌握DDA、Bresenham直线生成算法;2、掌握Bresenham或中点圆生成算法;3、掌握Bresenham或中点椭圆生成算法;三、实验内容 1、实现DDA、Bresenham直线生成算法;2、实现Bresenham画圆法或中点画圆法;3、实现Bresenham或中点法椭圆生成算法;4、利用1、2、3实现的直线、圆、椭圆图形生成函数进行图形绘制;四、实验要求与指导 1、按照实验指导书1.6节创建一个基于MFC的Single Document应用程序。建立名为“图形绘制”的菜单,该菜单的子菜单项可根据下图进行设定,用户通过点击不同的子菜单项,可以选择不同的算法进行绘图。 2、建立一个专门用于进行图形绘制的类,比如下图所示的CMyGL类。如无特殊说明,今后都以该类作为演示。 3、所有图形的绘制算法都必须封装在CMyGL类中,如下图。 4、在View类中实例化一个CMyGL类的对象,比如m_gl,进行绘图操作。如下图所示: 5、用户通过点击“图形绘制”中不同的菜单项,在指定位置进行绘图。5、 实验结果:六、实验主要代码1、画直线:void CDraw:DDALine(CDC* pDC, int x1, int y1, int x2, int y2, COLORREF color)double dx,dy,e,x,y;dx = x2 -x1;dy = y2- y1;e = (fabs(dx) fabs(dy) ? fabs(dx):fabs(dy);dx/=e;dy/=e;x = x1;y = y1;for (int i=1;iSetPixel(int)(x+0.5),(int)(y+0.5),color);x+=dx;y+=dy;2、画圆:void CMyCG:LineDDA2(int xa, int ya, int xb, int yb, CDC *pDC)int dx = xb - xa;int dy = yb - ya;int Steps, k;float xIncrement,yIncrement;float x = xa,y= ya;if(abs(dx)abs(dy)Steps = abs(dx);elseSteps = abs(dy);xIncrement = dx/(float)Steps;yIncrement = dy/(float)Steps;pDC-SetPixel(ROUND(x),ROUND(y),RGB(255,0,0);for(k=0;kSetPixel(ROUND(x),ROUND(y),RGB(255,0,0); 3、画椭圆void CDraw:BresenhamEllipse(CDC *pDC, int x0, int y0, int a, int b, COLORREF color)int x,y,p;int aa=a*a,bb=b*b;x=0;y=b; p=2*bb+aa*(1-2*b);while (bb*xSetPixel(x+x0,y+y0,color);pDC-SetPixel(-x+x0,y+y0,color);pDC-SetPixel(x+x0,-y+y0,color);pDC-SetPixel(-x+x0,-y+y0,color);if(p=0) p+=4*aa*(1-y)+bb*(4*x+6);y-;elsep+= bb*(4*x+6);x+;x=a;y=0; p=2*aa+bb*(1-2*a);while (bb*xaa*y)pDC-SetPixel(x+x0,y+y0,color);pDC-SetPixel(-x+x0,y+y0,color);pDC-SetPixel(x+x0,-y+y0,color);pDC-SetPixel(-x+x0,-y+y0,color);if(p=0)p+=4*bb*(1-x)+aa*(4*y+6);x-;elsep+= aa*(4*y+6);y+;实验三、 OpenGL图形程序设计基础一实验目的1)了解OpenGL 图形库的功能和结构; 2)学习使用Visual C+ 开发基于控制台的图形程序; 3)学习使用Visual C+ 开发基于单文档(GUI 界面)的图形程序。 4)学习使用OpenGL 生成基本图形; 5)学习使用OpenGL 实现图形变换;二实验内容1)使用Visual C+建立一个Win32 Console Application(控制台应用程序),定义若干点坐标,绘制点、线段、不闭合折线、闭合折线、多边形、三角形、四边形、三角扇、三角条带、四边形条带。尝试不同尺寸的点、不同线宽的线、设置颜色等操作。 2 )使用MFC AppWizard 建立一个SDI 程序,根据参考资料2 和3中的步骤设置OpenGL 图形绘制环境。增加绘制4种基本图形(选择其中之一)。3实验过程: 1)建立一个控制台应用程序,在RenderScene()函数中调用不同的系统函数分别绘制不同属性的点、线、折线、多边形、扇形等;2)建立一个SDI程序,按照所给资料设置OpenGL图形绘制环境,并照敲老师所给实列,观看结果,查看关键代码区;3)仿照所给列子,改写代码,绘制彩色的正方体;三实验结果基本图形显示正确 基本图形截图:三棱柱截图:实验四、 二维图形变换程序设计一实验目的: 1)掌握图形变换实现原理,基本几何变换,复合变换等; 2)学习使用Visual C+开发菜单,对话框等交互界面的设计;3)学习使用MFC单文档程序,实现二维图形的基本几何变换。 二实验内容: 使用Visual C+建立一个单文档程序,采用实验二中定义的基本图形类。在程序中增加图形变换菜单(各基本变换对应菜单项),各图形变换的参数通过对话框提供(设计提供变换参数的对话框,如平移,旋转,比例等),实现二维图形的变换。(提示:在各个图形类中增加相应的成员函数实现平移;菜单选择变换弹出对应变换的参数对话框,对话框中提供参数后取出参数传递给图形对象,通过调用图形变换成员函数实现图形对象的变换)。要求实现直线段、圆、多边形等基本图形的几何变换。三实验过程: (1).根据实验要求,新建菜单,增加二维图形变换子菜单,然后在菜单上添加平移,比例,对称,旋转以及错切选项。(2).对菜单中的每一项方法构造响应函数,并给几个需要弹出对话框的选项添加对话框响应函数。(3).在弹出的对话框输入参数,获取输入的参数,调用相应的变换函数,实现图形的变换。四实验结果: 结果正确。平移xy(100, 0)五、实验主要代码class CTransform/二维几何变换 public:CTransform();virtual CTransform();void SetMat(CP2 *,int);void Identity();void Translate(double,double);/平移变换矩阵void Scale(double,double);/比例变换矩阵void Scale(double,double,CP2);/相对于任意点的比例变换矩阵void Rotate(double);/旋转变换矩阵void Rotate(double,CP2);/相对于任意点的旋转变换矩阵void ReflectOrg();/原点反射变换矩阵void ReflectX();/X轴反射变换矩阵void ReflectY();/Y轴反射变换矩阵void Shear(double,double);/错切变换矩阵void MultiMatrix();/矩阵相乘public:double T33;CP2 *POld;int num;void CTransform:Translate(double tx,double ty)/平移变换矩阵Identity();T20=tx; T21=ty; MultiMatrix();void CTransform:Scale(double sx,double sy)/比例变换矩阵Identity();T00=sx; T11=sy; MultiMatrix();void CTransform:Scale(double sx,double sy,CP2 p)/相对于任意点的整体比例变换矩阵Translate(-p.x,-p.y);Scale(sx,sy);Translate(p.x,p.y);void CTransform:Rotate(double beta)/旋转变换矩阵Identity();double rad=beta*PI/180;T00=cos(rad); T01=sin(rad);T10=-sin(rad);T11=cos(rad);MultiMatrix();实验五、二维交互式图形程序设计一、实验目的: 1)综合使用VC+编写Win32 应用的方法(单文档、多文档、对话框); 2 )掌握交互式绘图程序设计及MFC 相关类的使用; 3)掌握使用MFC 的编写简单动画程序。 二、实验任务: 1)使用MFC AppWizard 建立一个SDI 程序。综合前几次二维绘图 实验的结果,实现基本功能: 建立绘制点、直线段、圆、椭圆、圆弧、多段线(折线)、多边形、贝塞尔(Bezier )曲线的相关类(对于封闭图形,应能多种方式填充)、 字符串。使用实验二中自定义的CClientDC 的派生类,实现交互式(鼠标)绘制以上图形

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论