ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:324.16KB ,
资源ID:24695429      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24695429.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(谷萌计算机图形学实验资料.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

谷萌计算机图形学实验资料.docx

1、谷萌计算机图形学实验资料实验报告 题 目: 计算机图形学 院 (系):信息与控制工程学院专业班级: 计算机1202 姓 名: 谷萌 学 号: 120620218 指导教师: 周方晓 2015年12月 12日实验一 熟悉Windows图形开发环境一、实验目的1.熟悉VisualC+6.0的开发环境;2.掌握Windows图形输出的方法;3.理解设备环境、画笔、画刷的概念,掌握常用的绘制函数。二、实验原理原理:使用VisualC+在Windows下进行图形程序设计三、实验内容内容:编写程序,要求如下:1.定义一支红色画笔,绘制一个正方形;2.用不同颜色的线条连接互不相临的两个顶点;3.用不同颜色的

2、画刷填充用上述方法所形成的图形的每一个区域。四、实验步骤使用Visual C+在Windows下进行图形程序设计的基本步骤是:(1)在绘制之前,创建绘图工具并设置相关的颜色、线型、线宽等属性;(2)调用相关的绘图函数选择绘图工具并进行绘图;(3)在绘制之后,恢复原有的绘图工具。五、实验环境已安装visualC+6.0的WindowsXP计算机一台,u盘六、实验结果及分析运行结果如图所示 分析:代码调试完毕,编译运行,按预期结果输出。七、实验小结 对我来说这次实验既是一次挑战也是一次全新的学习机会。当然这也是我第一次编写Windows图形程序,所以在编写过程中发现了许多问题,比如说vc+6.0软

3、件存在问题,导致程序总是出现一些莫名其妙的错误,像无法打开工程,自动关闭等等。后来,经过询问老师和上网查询,才发现是软件和我的系统有兼容性问题,与一些软件也存在冲突。后来在网上的建议,我换成Windowsxp的虚拟机中运行,此问题得到了解决。除此之外,程序编写时将工程类型创建错了,导致无法连接成功。后来经过上网搜索相关内容解决了此问题。然后在调用一些画图的函数时对函数体了解不多,导致函数调用出错。实验二 创建VC6.0下 OpenGL绘图程序的基本框架一、实验目的1.了解使用VC6.0下OpenGL绘图程序的基本框架2.掌握理解简单的OpenGL程序结构;3.掌握OpenGL提供的基本图形函数

4、,尤其是生成点、线、面的函数。二、实验环境安装有VisualC+6.0的windowXp计算机一台,u盘。三、实验原理内容步骤新建工程,在工程设置链接L对象库模版中添加OPENGL库,即opengl32.lib glu32.lib glaux.lib如图所示:在Visual C+中,修改视图类成员函数代码实现OpenGL绘图的过程如下: 在(文件名.view)视图类中改造PreCreateWindow函数:将窗口的客户区设置为OpenGL能够支持的风格。具体添加代码如下:cs.style|=WS_CLIPCHILDREN|WS_CLIPSIBLINGS; 在工具栏的视图类向导中添加并改造OnC

5、reate函数:定义像素存储格式,并创建一个OpenGL操作所必须的绘图上下文RC(Rendering Context)。使用一个PIXELFORMATDESCRIPTOR结构来指定像素格式,使用wglCreateContext()函数创建绘图上下文RC。添加头文件: #include GLglu.h#include GLgl.h#include GLglaux.hOnCreate函数中具体添加代码如下:/首先定义像素存储格式PIXELFORMATDESCRIPTOR pfd= sizeof(PIXELFORMATDESCRIPTOR), / pfd的大小 1, /结构的版本号 PFD_DRA

6、W_TO_WINDOW| /支持window PFD_SUPPORT_OPENGL| /支持OpenGL PFD_DOUBLEBUFFER, /双缓存 PFD_TYPE_RGBA, /RGBA颜色模式 24, /24位颜色深度缓存 0,0,0,0,0,0, /color bits ignored 0, /no alpha buffer0, /shift bit ignored0, /不使用累积缓存0,0,0,0, /accum bits ignored32, /32位z缓冲0, /不使用模板缓存0, /no auxiliary bufferPFD_MAIN_PLANE, /选择主层面0, /保

7、留0,0,0 /layer masks ignored;CClientDC dc(this);int pixelFormat=ChoosePixelFormat(dc.m_hDC,&pfd);BOOL success=SetPixelFormat(dc.m_hDC,pixelFormat,&pfd);/创建绘图上下文RCHGLRC m_hRC=wglCreateContext(dc.m_hDC); 在工具栏的视图类向导中添加并改造OnSize函数:当视图尺寸变化是,应及时将新的客户区尺寸通知OpenGL,方能够正确在窗口客户区域显示二维场景,通过命令glViewport完成这项工作:glVie

8、wport(0,0,cx,cy);具体添加代码如下:if(cy0&cx0) glViewport(0,0,cx,cy); /视口设置成应用程序的视图的大小 glMatrixMode(GL_PROJECTION);/投影矩阵模式 glLoadIdentity(); /if.else.语句是平行投影的实现方式 /参数:左、右、下、上、近、远 if(cxm_hDC,m_hRC);DrawScene(); /用户自定义函数,用来编写OpenGL绘制语句的wglMakeCurrent(pDC-m_hDC,NULL);添加成员函数:在DrawScene( )函数中编写具体的绘图程序。首先需要设置视点、视距

9、和观看方向等场景参数,然后绘制图元。四、实验结果编译并运行该程序1.该程序的作用是在一个黑色的窗口中央画一个矩形、三角形和三个点。图2-1是示范程序的结果,添加代码,在原有结果基础上添加三条直线组成新的三角形(如图2-2所示),将增加的代码写在实验报告纸上。 2.使用VisualStudioC+编译已有项目工程,并编写代码生成以下图形,如图2-3所示。 3.在此基础上,修改各顶点颜色,使得每个顶点颜色不一样,多边形内部颜色渐变,如图2-4所示(该程序需使用双缓存区)。 3、在此基础上,修改各顶点颜色,使得每个顶点颜色不一样,多边形内部颜色渐变,如图2-4所示(该程序需使用双缓存区)。五、实验小

10、结通过本次实验,使我对VC6.0下OpenGL绘图程序的基本框架有了许多的理解,同时也掌握了一些简单的OpenGL程序结构,对OpenGL提供的基本图形函数,有了许多了解,其中尤其是生成点、线、面的函数的使用,有了非常多的理解。实验三 用OpenGL绘制基本图元(直线、多边形等)一、实验目的1.学会使用OpenGL绘制基本图元;2.利用OpenGL实现实线,虚线,点划线的绘制,及kock曲线。二、 实验原理该实验是基于实验二基础上,步骤省略。添加成员函数int DrawGLScene(GLvoid):实验代码如下:int DrawGLScene(GLvoid) / Heres Where We

11、 Do All The Drawing glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); / Clear Screen And Depth Buffer glLoadIdentity(); / Reset The Current Modelview Matrix /Draw line glBegin(GL_LINES); glColor3f(1.0,0.0,0.0);/设置颜色为红色 glVertex2f(0,0); glVertex2f(1,1); glColor3f(0.0,1.0,0.0);/设置颜色为绿色 glVertex2f(0.

12、2,0); glVertex2f(1.2,1); glEnd(); glTranslatef(-1.5f,0.0f,-6.0f); / Move Left 1.5 Units And Into The Screen 6.0 / Drawing Triangles glBegin(GL_TRIANGLES); / Drawing Using Triangles glVertex3f( 0.0f, 1.0f, 0.0f); / Top glVertex3f(-1.0f,-1.0f, 0.0f); / Bottom Left glVertex3f( 1.0f,-1.0f, 0.0f); / Bott

13、om Right glEnd(); / Finished Drawing The Triangle glTranslatef(3.0f,0.0f,0.0f); / Move Right 3 Units / Draw Quad glBegin(GL_QUADS); / Draw A Quad glVertex3f(-1.0f, 1.0f, 0.0f); / Top Left glVertex3f( 1.0f, 1.0f, 0.0f); / Top Right glVertex3f( 1.0f,-1.0f, 0.0f); / Bottom Right glVertex3f(-1.0f,-1.0f,

14、 0.0f); / Bottom Left glEnd(); / Done Drawing The Quad return TRUE; / Keep Going三、实验内容1.用OpenGL程序绘制实现,虚线和点划线2.用OpenGL程序,分别以直线和正三角形为初始生成员,实现迭代次数在6次以内的kock曲线,要求用键盘交互控制迭代次数。四、实验环境安装有VisualC+6.0的windowXp计算机一台,u盘五、实验步骤1)相关算法及原理描述 直线的绘制在OpenGL中绘制直线通过指定直线段的端点来实现,用glVertex函数指定直线段端点的坐标位置,用glBegin/glEnd函数对包含一

15、系列的点坐标,并利用符号常量解释这些点构成直线的方式。 虚线的绘制绘制虚线需要先调用函数过了Enable(GL_LINE_STIPPLE);打开划线模式。然后,函数glLineStipple将建立用于划线的模式glLineStipple(Glintfactor,GLushortpattern);Kock曲线Kock曲线的初始生成员是一条直线,生成规则是将直线段分为三等分,首尾两段保持不变,中间用两段等长且互成60角的直线段代替。这样,直线段被分成四段,每段长度都只有原来的1/3。Kock曲线的分形维数为D=ln4/ln31.26186假设原直线的首尾点是P0(x0,y0),P1(x1,y1),

16、则新的四段直线段的五个端点坐标分别为(x0,y0)(x0+(x1-x0)/3,y0+(y1-y0)/3)(x1+x0)/2(y0-y1)3/6,(y1+y0)/2(x1-x0)3/6)(x0+2(x1-x0)/3,y0+2(y1-y0)/3)(x1,y1)其中,第三个点坐标公式中的正负号表示中间两条心直线段处于元直线段的哪一侧。根据这一规则迭代六次。六、实验结果及分析程序调试、测试与运行结果分析:1直线的绘制结果 2 虚线的绘制结果 3 Kock曲线绘制结果 六、实验小结通过本次实验使我学会使用OpenGL绘制基本图元,并利用OpenGL实现实线,虚线,点划线的绘制,及对kock曲线,对直线、

17、虚线、Kock曲线的绘制有了一定的了解与掌握。通过实验,对图形学中所用算法也有了更深的认识,并且通过从八分圆构造完整圆的过程,学会了图形学算法设计的一种思想实验四 用OpenGL生成NURBS曲线一、实验目的(1)理解Bzier曲线和B样条曲线的定义、性质及绘制算法;(2)理解OpenGL中窗口坐标与世界坐标的映射关系;(3)掌握OpenGL的Bzier曲线和NURBS曲线的绘制方法。二、实验原理,内容及步骤openGL中,GLU函数库提供了一个NURBS接口。用户需要提供的数据包括控制点、节点等数据,控制点描述曲线的大致形状,节点控制B样条函数的形状。绘制一条NURBS曲线的步骤:(1)提供

18、控制点序列和节点序列;(2)创建一个NURBS对象,设置NURBS对象属性;(3)绘制曲线; 创建一个NURBS对象,用如下两条语句: GLUnurbsObj *theNurbs; theNurbs=gluNewNurbsRender( );创建对象后,用如下函数设置NURBS对象属性:void gluNurbsProperty(GLUnurbsObj * nobj,GLenum property,Glfloat value); 曲线的绘制是在gluBeginCurve( )/gluEndCurve( )函数对中完成。绘制曲线的函数为:void gluNurbsCurve (GLUnurbsO

19、bj * nobj,GLint nknots,GLfloat * knot,GLint stride,GLfloat *ctlarray,GLint order,GLenum type);具体参数含义在下面程序实现中解释。添加成员函数DrawNurbsCurve( ):void CView:DrawNurbsCurve( ) GLfloat controlPoints73 = -1.5f, -0.5f, 0.0f, -1.0f, 1.0f, 0.0f, -0.5f, -0.5f, 0.0f, 0.0f, -2.0f, 0.0f, 0.5f, -0.5f, 0.0f, 1.0f, 1.0f, 0

20、.0f,1.5f, -0.5f, 0.0f ;/给定控制点 GLfloat knots14 = 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f ; /节点 glColor3f (0.0f, 0.0f, 1.0f); GLUnurbsObj *theNurb; /创建NURBS对象 theNurb = gluNewNurbsRenderer( ); gluNurbsProperty (theNurb, GLU_SAMPLING_TOLERANCE, 10.0); /属性 / GL

21、U_SAMPLING_TOLERANCE表示边缘最大像素长度 glNewList(1, GL_COMPILE); gluBeginCurve(theNurb); gluNurbsCurve(theNurb, /*NURBS曲线对象*/14, /*参数区间节点数目控制点数NURBS曲线阶数*/knots, /*节点*/3, /*曲线控制点之间的偏移量*/ (float*)controlPoints, /*控制点*/ 7, /*曲线阶数*/ GL_MAP1_VERTEX_3); /*曲线类型*/ gluEndCurve(theNurb); glEndList(); glCallList(1); 三、实验结果四、实验小结通过本次实验,虽然实验过程没有完整编写OpenGL程序代码,但是在老师给出的程序框架中,通过添加函数及修改相应的函数参数,基本完成了实验内容,并加深理解了OpenGL编程思想及计算机中图形绘制的流水线。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1