您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 计算机图形学课程设计报告
计算机图形学课程设计报告组号:第七组小组成员:宋洁邵海军谷文海冯新科学院:资源环境学院专业班级:地科14-2指导老师:向中林2016.12.18目录1实习目的...................................................................12课程设计题目...............................................................12.1题目要求及内容.........................................................12.1.1要求...............................................................12.1.2内容分析...........................................................22.2实习原理...............................................................22.2.1人机交互...........................................................22.2.2动画...............................................................52.2.3几何变换...........................................................52.2.3.1二维几何图形变换...............................................52.2.3.2三维几何图形变换:..............................................63主要流程图.................................................................83.1三维图形处理流程图...................................................83.2二维几何画板流程图...................................................94主要源程序.................................................................94.1主要源程序.............................................................94.2.1键盘事件函数......................................................114.2.2菜单..............................................................124.2.2.1创建菜单函数..................................................124.2.2.2光照函数......................................................144.2.2.3几何变换事件..................................................164.2.2.3.1旋转事件..................................................164.2.2.3.2移动事件..................................................174.2.2.3.3放大事件..................................................184.2.2.3.4缩小事件..................................................195问题讨论..................................................................1911实习目的课程设计是信息与计算科学专业集中实践性环节之一,是学习完《计算机图形学》课程后进行的一次全面的综合练习。其目的是:(1)要达到理论与实际应用相结合,使学生能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养良好的程序设计技能。(2)在实践中认识为什么要学习数据结构,掌握数据结构、程序设计语言、程序设计技术之间的关系,是前面所学知识的综合和回顾。要求(1)了解并掌握交互式图形系统的设计方法,具备初步的独立分析和设计能力;(2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(3)提高综合运用所学的理论知识和方法独立分析和解决问题的能;(4)训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风;(5)培养学生团结协作,共同完成相关课题的能力。2课程设计题目人机交互系统三维图形处理及动画实现2.1题目要求及内容2.1.1要求创建三维立体图形,通过创建菜单及键盘、鼠标事件实现对图形的人机交互式处理。在理解直线、圆、区域填充、图形裁剪等理论知识的基础上,借助于程序设计语言VC++和OpenGL三维图形库进行小型图形应用软件或三维场景的开发。本课程课程设计注重图形交互处理的主要实现,包括如下几部分:三维立体图形人机交互的处理,主要内容包括以下几点:(1)创建菜单及键盘事件实现对图形的基本处理;(2)平移、缩放、旋转等计算机图形的几何变换;(3)图形的裁剪;(4)平面投影和透视投影;(5)消隐和光照处理;2(6)动画的绘制及实现。附:二维图形的绘制主要内容包括以下几点:(1)点、线、圆、多边形、Bezier曲线等计算机基本图元的的绘制;(2)点、线、圆、多边形、Bezier曲线等计算机基本图元属性的设置。2.1.2内容分析定义三维齐次坐标结构和面的结构;定义各图形绕轴旋转的结构及各坐标轴的放缩结构;定义各个光源的属性及材质表面的属性;定义键盘输入及鼠标输入对应响应的事件;定义各菜单对应执行的响应事件;通过双缓存技术实现动画效果。2.2实习原理2.2.1人机交互人机交互主要包括鼠标输入、键盘输入以及创建菜单执行对应的处理事件,其基本原理如下:鼠标:1)检测鼠标ClicksGLUT为处理鼠标clicks事件提供了一个方法。函数glutMouseFunc,这个函数一般在程序初始化阶段被调用。函数原型如下:voidglutMouseFunc(void(*func)(intbutton,intstate,intx,inty));参数:func:处理鼠标click事件的函数的函数名。从上面可以看到到,处理鼠标click事件的函数,一定有4个参数。第一个参数表明哪个鼠标键被按下或松开,这个变量可以是下面的三个值中的一个:GLUT_LEFT_BUTTONGLUT_MIDDLE_BUTTONGLUT_RIGHT_BUTTON第二个参数表明,函数被调用发生时,鼠标的状态,也就是是被按下,或松开,可能取值如下:GLUT_DOWNGLUT_UP当函数被调用时,state的值是GLUT_DOWN,那么程序可能会假定将会有个GLUT_UP事件,甚至鼠标移动到窗口外面,也如此。然而,如果程序调用glutMouseFunc传递NULL作为参数,那么GLUT将不会改变鼠标的状态。3剩下的两个参数(x,y)提供了鼠标当前的窗口坐标(以左上角为原点)。2)检测动作(motion)GLUT提供鼠标motion检测能力。有两种GLUT处理的motion:activemotion和passivemotion。Activemotion是指鼠标移动并且有一个鼠标键被按下。Passivemotion是指当鼠标移动时,并有没鼠标键按下。如果一个程序正在追踪鼠标,那么鼠标移动期间,每一帧将产生一个结果。GLUT让我们可以指定两个不同的函数,一个追踪passivemotion,另一个追踪activemotion。它们的函数原型,如下:voidglutMotionFunc(void(*func)(intx,inty));voidglutPassiveMotionFunc(void(*func)(intx,inty));参数:Func:处理各自类型motion的函数名。处理motion的参数函数的参数(x,y)是鼠标在窗口的坐标。以左上角为原点。3)检测鼠标进入或离开窗口GLUT还能检测鼠标鼠标离开,进入窗口区域。一个回调函数可以被定义去处理这两个事件。GLUT里,调用这个函数的是glutEntryFunc,函数原型如下:voidglutEntryFunc(void(*func)(intstate));参数:Func:处理这些事件的函数名。上面函数的参数中,state有两个值:GLUT_LEFTGLUT_ENTERED表明,是离开,还是进入窗口。键盘:当你按下一个键后,GLUT提供了两个函数为这个键盘消息注册回调。1)第一个是glutKeyboardFunc。这个函数是告诉窗口系统,哪一个函数将会被调用来处理普通按键消息。普通键是指字母,数字,和其他可以用ASCII代码表示的键。函数原型如下:voidglutKeyboardFunc(void(*func)(unsignedcharkey,intx,inty));参数:func:处理普通按键消息的函数的名称。如果传递NULL,则表示GLUT忽略普通按键消息。这个作为glutKeyboardFunc函数参数的函数需要有三个形参。第一个表示按下的键的ASCII码,其余两个提供了,当键按下时当前的鼠标位置。鼠标位置是相对于当前客户窗口的左上角而言的。2)GLUT提供函数glutSpecialFunc以便当有特殊键按下的消息时,你能注册你的函数。函数原型如下:voidglutSpecialFunc(void(*func)(intkey,intx,inty));参数:func:处理特殊键按下消息的函数的名称。传递NULL则表示GLUT忽略特殊键消息。4菜单:弹出式菜单(像点鼠标右键出来的菜单那样的)也是GLUT的一部分,虽然它不能实现我们经常看到的windows系统弹出式菜单的所有的功能,但是它也有很大的作用。给一个程序增加菜单提供了一个比键盘更简单的方法来和程序交互,选择不同选项,而不用去记那些按键。1)创建菜单:创建菜单函数glutCreateMenu的原型如下:intglutCreateMenu(void(*func)(intvalue));参数:func:为新建的菜单处理菜单事件的函数名。这个函数的返回值是菜单的标识符(menuidentifier)。2)菜单增加条目:出来个空菜单也没什么用,使用的函数是glutAddMenuEntry:voidglutAddMenuEntry(char*name,intvalue);参数:name:菜单名称的字符串。value:当你选择菜单里的一项后,这个值就返回给上面的glutCreateMenu里调用的函数。3)联接鼠标:必须指定菜单怎么出现,使用GLUT你可以在按下一个鼠标按键后让菜单显示,函数是glutAttachMenu:voidglutAttachMenu(intbutton);参数:button:一个整数,指定菜单和哪个鼠标键关联起来。botton可以去下面的值;GLUT_LEFT_BUTTONGLUT_MIDDLE_BUTTONGLUT_RIGHT_BUTTON用glutAttachMenu来在鼠标和菜单间建立关联,但我们有时候需要断开这种关联。完成这
本文标题:计算机图形学课程设计报告
链接地址:https://www.777doc.com/doc-6172304 .html