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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

计算机图形学大作业报告.docx

1、计算机图形学大作业报告云南大学软件学院期末课程报告Final Course ReportSchool of Software, Yunnan University个人成绩序号学号姓名成绩1学期: 2009年秋季学期 课程名称: 计算机图形学 任课教师: 实践题目: 创建旋转体 小 组 长: 联系电话: 电子邮件: 2009-2010学年上学期 计算机图形学 成绩考核表年级: 专业: 软件工程 学号: 姓名: 本人所做工作: 指标内容分值指标内涵及评估标准得分技术路线的可行程度10合理可行,具体且有创新合理可行,具体基本合理可行不够合理或不够具体程序或系统设计思路10程序或系统思路非常清晰、运行

2、正确程序或系统思路基本清晰、运行正确程序或系统思路清晰、环境配置错误无法运行程序或系统思路不清晰,程序无法运行小组成员的工作量(每个人分别打分)15高出平均要求工作量的15%以上高出平均要求工作量达到平均要求工作量低于平均要求的工作量理论知识应用水平15用理论知识对程序设计方法、思路和代码进行详尽、准确地分析和总结用理论知识对程序设计方法、思路和代码进行较准确地分析和总结理论知识应用一般理论知识差达到预期目标的程度10完全达到基本达到无法预见未能达到团队合作精神10很强的团队合作精神合作情况良好合作情况一般合作不好,各自为政报告撰写质量(30分)5报告非常完整报告比较完整完整程度一般报告不完整

3、5逻辑结构清晰逻辑组织较好逻辑组织一般逻辑不清5内容非常丰富内容较丰富内容一般内容欠缺5文字表达非常好文字表达较好文字表达一般文字表达差,意思不明了5图表制作非常专业化图件制作良好图件制作一般图件制作效果差5整体效果很好整体效果良好整体效果一般整体效果差综合得分(满分100分)评语创建旋转体总结报告(GB856788)1. 引言1.1. 编写目的本学期计算机图形学课程期末大作业二人小组主要的开发项目就是基于OpenGL的旋转体实现,实现语言VC+,编辑、调试环境VS2008,在学期末终于基本开发完成。是对自我工作的检验和测试,在撰写报告的过程中能够更深刻的了解计算机图形学的理念通过这份文档来记

4、录我们在开发此软件的过程中遇到的问题以及改善的方法。现在对整个开发过程加以认识、记录和总结,留下经验,汲取教训。为以后的其他工作留下经验资料,为以后遇到相同的问题和从事类似项目奠定坚实的基础,以便以后有资可寻、有底可查,增长个人见识,为自己程序开发方面的成长而努力奋斗。并作为期末向指导老师报告的材料。通过此次大作业的编写,我要达到进一步熟悉OpenGL编程的目的,并在以后的学习中得到总结。1.2背景计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、

5、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。从处理技术上来看,图形主要分为两类,一类是基于线条信息表示的,如工程图、等高线地图、曲面的线框图等,另一类是明暗图,也就是通常所说的真实感图形。计算机图形学一个主要的目的就是要利用计算机产生令人赏心悦目的真实感图形。为此,必须建立图形所描述的场景的几何表示,再用某种光照模型,计算在假想的光源、纹理、材质属性下的光照明效果。所以计算机图形学与另一门学科计算机辅助几何设计有着密切的关系。事实上,图形学也把可以表示几何场景的曲线曲面造型技术和实体造型技术作为其主要的研

6、究内容。同时,真实感图形计算的结果是以数字图像的方式提供的,计算机图形学也就和图像处理有着密切的关系。图形与图像两个概念间的区别越来越模糊,但还是有区别的:图像纯指计算机内以位图形式存在的灰度信息,而图形含有几何属性,或者说更强调场景的几何表示,是由场景的几何模型和景物的物理属性共同组成的。计算机图形学的研究内容非常广泛,如图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法、非真实感绘制,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等OpenGL是个与硬件无关的软件接口,可以在不同的平台如Windows 95、Windows NT、U

7、nix、Linux、MacOS、OS2之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。由于OpenGL是图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。但是,通过一些转换程序,可以很方便地将AutoCAD、3DS/3DSMAX等3D图形设计软件制作的DXF和3DS模型文件转换成OpenGL的顶点数组 计算机图形学(Computer Graphics)是近三十年来发展迅速,应用广泛的新兴学科,主要研究怎样用数字计算机生成、处理和显示图形。图形的具体应用范围很广,但是从基本的处理技术看只有两类,一类是线条,如工程图、地图、曲线图表等;另一类是明暗图

8、,与照片相似。为了生成图形,首先要有原始数据或数学模型,如工程人员构思的草图,地形航测的判读数据,飞机的总体方案模型,企业经营的月统计资料等等。这些数字化的输入经过计算机处理后变成图形输出。 可以说计算机图形学在当代社会的运用已经涉及到了各个领域上的运用,无论在什么领域上计算机图形学都发挥到了自己的作用;计算机图形学以其对图像的专业处理技术,对图形图像的加工运用,实现图形的立体转化,三维立体图形的旋转变形,由平面图到三维立体图的转化等等,都是命了计算机图形学强大的图像处理技术。说明:a. 本项目的名称为“计算机图形学期末大作业”,开发出来的项目名称为“旋转体功能图”。b. 此软件为2009年秋

9、季学期云南大学软件学院计算机图形学期末大作业最终报告,编写者为原飞、陈博文。1.3定义计算机图形学:计算机图形学的研究内容非常广泛,如图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法、非真实感绘制,以及计算机动画、自然景物仿真、虚拟现实等。OpenGl:用于编写计算机图形学的程序的编译工具。OpenGL是行业领域中最为广泛接纳的 2D/3D 图形 API, 其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。OpenGL 是独立于视窗操作系统或其它操作系统的,亦是网络透明的。在包含CAD、内容创作、能源、娱乐、游戏开发、制造业、制药

10、业及虚拟现实等行业领域中,OpenGL 帮助程序员实现在 PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。OPENGL的功能及特点:OpenGL是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以与Visual C+紧密接口,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性;OpenGL使用简便,效率高。它具有七大功能:旋转体:一条平面曲线绕着它所在的平面内的一条定直线旋转所形成的曲面叫作旋转面;封闭的旋转面围成的几何体。旋转矩阵:在乘以一个向量的时候有改变向量的

11、方向但不改变大小的效果的矩阵。旋转矩阵不包括反演,它可以把右手坐标系改变成左手坐标系或反之。所有旋转加上反演形成了正交矩阵的集合。旋转变换:简称旋转.欧氏几何中的一种重要变换.即在欧氏平面上(欧氏空间中),让每一点P绕一固定点(固定轴线)旋转一个定角,变成另一点P,如此产生的变换称为平面上(空间中)的旋转变换.。变换矩阵:在线性代数中,线性变换能够用矩阵表示。如果T是一个把R映射到R的线性变换,且x是一个具有n个元素的列向量 ,那么我们把mn的矩阵A,称为T的变换矩阵。3D坐标系:三维笛卡儿坐标系是在二维笛卡儿坐标系的基础上根据右手定则增加第三维坐标(即Z轴)而形成的。2D坐标系:在同一个平面

12、上互相垂直且有公共原点的两条数轴构成平面直角坐标系。1.4参考资料a. 计算机图形学,项志钢,清华大学出版社,第1版,2006年12月;b. 软件文档国家标准(GB8567-88);c. 属于本项目的其他已发表的文件;d. OpenGL编程手册;e. VC+编程手册;2实际开发结果2.1产品1 系统需求分析1.一个旋转体由其外轮廓线绕其竖直中心轴旋转而成。2.程序要求建立一个窗口显示竖直的中心轴,并且要求实现轮廓线的编辑,具体包含功能:节点的增加、删除和节点间自动连线。3.程序要求建立另外一个窗口显示轮廓线绕中心轴旋转以后的三维物体,本窗口还要求实现三维物体的Phong着色和对三维物体的简单操

13、作,具体包含:放大、缩小和旋转。4.移动光源5.纹理映射效果6.雾化效果7.轮廓线使用样条技术2总体设计1 项目规划:本系统是一个基于OpenGL开发的实现能够进行人机交互的绘制3D旋转体的系统,本系统中的功能模块主要分为以下几种: 矩阵运算模块:实现两个或多个矩阵的相关运算,为绘制图形提供数据结构,体现图形转化过程中的算法。显示图形模块:用于设定图像的显示方式,绘制方法,在其中还可以设置光源位置等相关的显示信息。键盘敲击模块:对不同的键盘敲击事件作出相应的处理,包括点线的转化,雾化效果等。鼠标点击模块:在3D显示窗口添加的鼠标事件,对鼠标的事件作出相应的响应效果。 动作模块:根据左边用户绘制

14、的2D图形,动态的划出右面相对应的3D图像。找点模块:在左边的用户画图窗口进行锁定鼠标点击时靠近的点。2系统功能结构3设计目标本系统是根据课本中的程序而开发的,基本能够实现需求中所要求的功能,通过本系统可以达到以下目标: 1系统运行稳定,安全可靠。2界面美观、友好。3用户操作使用方便。4生成的3D图形效果良好。5能够正确的生成用户所要绘制的3D图形3主要功能模块设计1矩阵运算模块的设计:功能描述:程序启动后,这部分功能模块会为整个应用程序提供算法支持,具体是矩阵直接的相互运算,在2D向3D转化过程中会起到很重要的作用。代码设计:float vv(float * v1, float * v2)

15、return v10 * v20 + v11 * v21 + v12 * v22;void vxv(float * n, float * v1, float * v2) n0 = v11 * v22 - v12 * v21; n1 = v12 * v20 - v10 * v22; n2 = v10 * v21 - v11 * v20;void loadIdentity(Matrix m) Matrix identity = 1.0,0.0,0.0,0.0, 0.0,1.0,0.0,0.0, 0.0,0.0,1.0,0.0, 0.0,0.0,0.0,1.0; for(int i = 0;i 4;

16、 i+) for(int j = 0;j 4; j+) mij = identityij;void preMultiply(Matrix p, Matrix m) int i , j; Matrix t; for( i = 0; i 4; i +) for( j = 0; j 4; j+) tij = pi0 * m0j + pi1 * m1j + pi2 * m2j + pi3 * m3j; for( i = 0; i 4; i +) for( j = 0; j 4; j +) mij = tij;2显示图形模块的设计: 功能描述:该模块主要为所要画的图形进行描述,是绘制图形的主要函数,通过

17、调用这个功能模块就能画出用于显示给用户的图形。 代码设计:/2D图形的display函数void display() glClear(GL_COLOR_BUFFER_BIT); if(n = 1 & type =GL_LINE_STRIP) glBegin(GL_POINTS); glVertex2iv(vert0); glColor3f(0,0.5,0.5); glVertex2i(width-vert00-1,vert01); glEnd(); glColor3f(0,0.5,0.5); glBegin(GL_LINES); glVertex2i(width/2,0); glVertex2

18、i(width/2,height-1); glEnd(); glBegin(type); for(int i = 0;in;i+) glVertex2i(width-verti0-1,verti1); glEnd(); glColor3f(1,1,0); glBegin(type); for(int i = 0;in;i+) glVertex2iv(verti); glEnd(); glutSwapBuffers(); initQMesh(); glutSetWindow(winid); glutPostRedisplay(); /3D图形的显示函数void modelDisplay() gl

19、Clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); float M16; for(int r = 0; r 4; r+) for(int c = 0; c 4; c+) M4 * c + r = CRMrc; glMultMatrixf(M); glScalef(zoom,zoom,zoom); drawQMesh(); glPopMatrix(); glPushMatrix(); glLightfv(GL_LIGHT0,GL_AMBIENT,amb); glLightfv(GL_LIGHT0, GL_POSITI

20、ON, lightPosition); glPopMatrix(); glutSwapBuffers();3键盘敲击模块 功能描述:该功能主要为两个窗体添加键盘敲击事件,在2D窗体中主要添加了反走样效果,清除所画的图,点线转化功能,对于3D窗体主要添加了投影方式的变换,雾化效果,光源移动的功能代码设计:/2D绘制窗体的键盘敲击处理函数void keyboard(unsigned char key, int x,int y) switch(key) case a: antialiasing = ! antialiasing;/反走样效果 if(antialiasing) glEnable(GL_

21、BLEND); glEnable(GL_LINE_SMOOTH); else glDisable(GL_BLEND); glDisable(GL_LINE_SMOOTH); break; case c: n = 0;break; /清除界面功能 case l: type = GL_LINE_STRIP;break; /绘制线功能 case v: type = GL_POINTS;break; /绘制点功能 glutPostRedisplay();/3D显示窗体的键盘敲击事件处理函数:void modelKeyboard(unsigned char key, int x, int y) swit

22、ch (key) case o:glMatrixMode(GL_PROJECTION);/正投影 glLoadIdentity(); glOrtho(-4,4,-4,4,6,14); glMatrixMode(GL_MODELVIEW); break; case p:glMatrixMode(GL_PROJECTION);/侧投影,不过是默认的 glLoadIdentity(); gluPerspective(45.0,1.0,6.0,14.0); glMatrixMode(GL_MODELVIEW); break; case m:lightPosition0 = lightPosition0

23、 - 0.5; /光源移动 break; case n:lightPosition1 = lightPosition1 - 0.5; break; case z:lightPosition2 = lightPosition2 - 0.5; break; case q:glEnable(GL_FOG); / 雾化效果 glFogi(GL_FOG_MODE, GL_LINEAR); GLfloat fogColor = 1.9, 1.1, 2.2, 0.5; glFogfv(GL_FOG_COLOR, fogColor); glFogf(GL_FOG_START, 3.0); glFogf(GL_

24、FOG_END, 15.0); glHint(GL_FOG_HINT, GL_DONT_CARE); break; case k:glDisable(GL_FOG); break; glutPostRedisplay();4鼠标点击模块功能描述:该功能模块主要实现了对两个窗体鼠标事件的处理,对于3D窗体实现了鼠标左键旋转,由键放大缩小的效果,2D窗体实现了左键画点,右键可以对已经存在的点改变它的位置。代码设计:/3D窗体的鼠标事件void modelMouse(int button,int state,int x,int y) switch (button) case GLUT_LEFT_BU

25、TTON: if(state = GLUT_DOWN ) cx = x; cy = h - 1 - y; dx = dy = 0; left_button_down = true; else left_button_down = false; break; case GLUT_RIGHT_BUTTON: if(state = GLUT_DOWN) cx = x; cy = h - 1 - y; right_button_down = true; else right_button_down = false; break; /2D窗体鼠标事件void mouse(int button, int

26、state, int x ,int y) y = height - 1 - y; switch(button) case GLUT_LEFT_BUTTON: if(state = GLUT_DOWN & ! rubberbanding ) v = n+; vertv0 = (x = width) ? width - 1 : x; vertv1 = (y = height) ? height -1 : y; rubberbanding = true; glutPostRedisplay(); else rubberbanding = false; break; case GLUT_RIGHT_B

27、UTTON: if(state = GLUT_DOWN & ! rubberbanding & (v = findVertex(x,y) != -1) if(glutGetModifiers() = GLUT_ACTIVE_CTRL) for (int i = v; i n-1; i+) vertv0 = verti+10; verti1 = verti+11; n-; else vertv0 = (x = width) ? width - 1 : x; vertv1 = (y = height) ? height -1 : y; rubberbanding = true; glutPostR

28、edisplay(); else rubberbanding = false; break; 5找点模块功能描述:此方法主要用于对用户所需要的点进行锁定。能够改变原来已经存在的点。int findVertex(int x,int y) /锁定鼠标靠近的点 int dx,dy; for(int i = 0;i n;i+) dx = verti0-x; dy = verti1-y; if(dx*dx + dy*dy 16) return i; return -1;2.2主要功能和性能逐项列出本软件产品所实际具有的主要功能和性能,对照可行性研究报告、项目开发计划、功能需求说明书的有关内容,说明原定的开发目标是达到了、未完全达到、或超过了。a.通过Edit polygons窗口(二维多边形编辑视窗)绘制多边形。b.对绘制出的多边形能增删顶点改变多边形形状。c.通过Object

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

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