还剩11页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
计算机图形学期末课程设计报告课程名称计算机图形学设计题目编程实现时钟运动院系计算机与信息工程学院专业网络工程_______________起止日期起年月日~年月日111127201215指导教师杨斌glBeginGL_LINES;glVertex2fharr
[0],harr[l];gl Vertex2fex,cy;glEnd;void drawotherglColor3f
0.0,
255.0,
105.0;Bresenham_Circlecx,cy,doubleradius+20;void Bresenham_Circleint xO,int yO,double radius{int x,y,d;x=0;y=intradius;d=int3-2*radius;while x=y CirPotxO,yO,x y;9if d0d+=4*x+1;elsed+=4*x-y-2;y—;x++;void CirPotint xO,int yO,int x,int yglBeginGL_POINTS;glVertex2fxO+x,yO+y;gl Vertex2fx0+x,y0・y;glVertex2fxO-x,yO+y;gl Vertex2fx0-x,y0-y;glVertex2fxO+y,yO+x;gl Vertex2fx0+y,y0-x;gl Vertex2fx0-y,y0+x;glVertex2fxO-y,yO-x;glEnd;void myidle::Sleep1000;〃取系统时间到数组中_strtimetimebuffer;timebuffer forinti=0;i9;i++hour=inttimebuffer
[0]-48*10+inttimebuffer
[1]-48;miniter=inttimebuffer
[3]-48*10+inttimebuffer
[4]-48;second=inttimebuffer
[6]-48*10+inttimebuffer
[7]-48;sangle=float
3.1415/2-floatsecond*2*
3.1415/60;mangle=float
3.1415/2-floatminiter+floatsecond/60/60*2*
3.1415;hangle=float
3.1415/2-floathour+floatminiter+floatsecond/60/60*2*
3.1415/12;glutPostRedisplayO;void Reshapeintw,int hww=w;hh=h;glViewport0,0,GLsizei w,GLsizei h;glMatrixModeGL_PROJECTION;glLoadldentityO;gluOrtho2D-20,GLdouble w,-
180.0,GLdouble h;glMatrixModeGL_MODELVIEW;glLoadldentityO;〃改变颜色void change{br=
0.0,bg=255Qbb=
0.0;sr=
0.0,sg=
255.0,sb=
0.0;}//恢复颜色void resume{br=O.O,bg=O.O,bb=O.O;sr=
1.0,sg=
1.O,sb=O.O;}void processMenuEventsintoptionswitch optioncasechangecolor:change;break;case resumecolor:resume;break;case quit:cxitO;break;}void createGLUTMenusintmenu;menu=glutCreateMenuprocessMenuEvents;交换颜色glutAddMenuEntry,changecolor;恢复颜色glutAddMenuEntry jesumecolor;glutAddMenuEntry退出H,quit;glutAttachMenuGLUT_RIGHT_BUTTON;int mainintargc,char**argvglutlnitargc,argv;glutInitWindowPosition0,0;glutInitWindowSizewinheight,winwidth;glutInitDisplayModeGLUT_DOUBLE|GLUT_RGB;计算初陆洋glutCreateWindow L-09--40---MyinitQ;glutDisplayFuncDisplay;glutldleFuncmyidle;glutReshapeFuncReshape;createGLUTMenus;glutMainLoopO;return0;评语:评阅教师签名:目录•引言
11.需求分析
21.概要设计31概要设计实现的内容
3.11函数的功能描述
3.
21.详细设计
42.调试与操作说明
53.课程设计总结与体会
64.致谢74•参考文献85•附录95课程设计的主要内容•引言1本学期系统的学习了计算机图形学,在学期末按课程要求对其进行设计,本课程主要内容包括以图形学算法为目标,深入研究续而策划设计实现一个能够表现计算机图形学算法原理的或完整过程的演示系统,并能从某些方面做出评价和改进意见通过完成一个完整程序,经历策划、设计、开发、总结达到通过本课程设计,使自己巩固和实践计算机图形学课程中的理论和算法;掌握基本图形显示程序设计方法,及二维和三维图形变换等程序设计方法,学习表现计算机图形学算法的技巧同时以达到培养认真学习积极探索的精神.需求分析2图形学设计报告题目编程实现时钟运动图形学设计报告任务及要求显示时钟三个指针,实现三根时针间的相互关系;通过右键切换实现时钟背景和指针颜色课程设计思想编程实现时钟运动,通过使用提供的标准库函数,综OpenGL合图形学画线和画圆的算法,颜色模型中的模式,颜色Bresenham OpenGL RGBA表示模式等实现指针式时钟运动,并通过点击右键菜单实习时钟背景与时针颜色的转换___根据画线和画圆的算法,画出时钟的指针和表盘再根据颜Bresenham OpenGL色模型用定义当前颜色设置当时钟运行时交换的菜单,运行程序时可glColorO变换时钟背景与时针的颜色在此中综合实现本学期中学习到编程中部分的方法与操作OpenGL软硬件运行环境Microsoft WindowsXPO工发工具VC++
6.0概要设计实现的内容
3.1利用完成了一个时钟,显示时钟三个指针,实现三根时针间的相互VC++
6.0关系;通过右键切换实现时钟背景和指针颜色函数的功能描述
3.2⑴时钟数字函数void dis;⑵绘制时钟void Display;⑶画出时钟上的数字函数void drawcrpot;⑷绘制时钟三个指针函数void drawline;⑸绘制时钟的圆盘void drawcrpot;⑹获取系统时间的函数void myidle;⑺改变颜色的函数void change;只灰复颜色的函数8void resume;通过移动时钟的函数9wasd voidkeyboard;.详细设计4画图1void DisplayvoidglClearGL_COLOR_BUFFER_BTT;〃划个数字drawcrpot;4;//三个指针drawlinedrawother;dis;glutS wapBuffers;画表的圆盘2void drawcrpotifwwhhdistances=hh;else distances=ww;radius=distances/2-l00;glClearGL_COLOR_BUFFER_BIT;背景色glClearColorbr,bg,bb,
30.0;//glColor3f
255.0,
50.0,
110.0;光标定位,窗口左下角为,glRasterPos2i100+radius,100;//00glutBitmapCharacterGLUT_BITMAP_TIMES_ROMAN_24;6,;glRasterPos2i100,100+radius;glutBitmapCharacterGLUT_B!TMAP_TIMES_ROMAN_24;9,;glRasterPos2il00+2*radius,l00+radius;glutBitmapCharacterGLUT_BTTMAP_TIMES_ROMAN_24;3,;glRasterPos2i100+radius,100+2*radius;;glutBitmapCharacterGLUT_BITMAP_TIMES_ROMAN_24r;glutBitmapCharacterGLUT_BITMAP_TIMES_ROMAN_24,,21;获取系统时间3void myidle::Sleep1000;_strtimetimebuffer;改变颜色4//改变颜色void change{br=
0.0,bg=
255.0,bb=
0.0;sr=
0.0,sg=
255.0,sb=
0.0;}恢复颜色5〃恢复颜色void resume{br=O.O,bg=O.O,bb=O.O;sr=
1.0,sg=l.O,sb=O.O;键盘事件移动6wasd〃键盘事件移动void keyboardunsignedchar m,int x,int ywasdswitch m{casewf glTranslatefO.Of,lO.Of,O.Of;break;case s:;glTranslatefO.Of,-lO.Of,O.Of break;case a:;glTranslatef-1O.Of,O.Of,O.Of break;case d:glTranslatef
10.0f,O.Of,O.Of;break;default:glViewport0,0,700,700;菜单7void createGLUTMenusintmenu;menu=glutCreateMenuprocessMenuEvents;交换颜色,glut AddMenuEntrychangecolor;恢复颜色glut AddMenuEntryjesumecolor;glutAddMenuEntry退出n,quit;glutAttachMenuGLUT_RTGHT_BUTTON;.调试与操作说明5一个指针式时钟生成,通过右键菜单可以切换时钟背景与指针颜色如图所示11图绘制效果图1颜色切换后的效果图如图所示22图切换颜色效果图
2.课程设计总结与体会6在本次课程设计里面,熟练掌握了使用提供的标准库函数,OpenGL Bresenham画线和画圆的算法,颜色模型中的模式,颜色表示模式等知识在OpenGLRGBA本次设计中存在众多不足,对专业知识有待进一步的提高.致谢7本图形学设计是在我的老师杨斌的亲切关怀和悉心指导下完成的他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我从课题的选择到设计的最终完成我要感谢杨老师对我的教育培养,您细心指导我的学习与研究,在此,我要向您深深地鞠上一躬还要感谢在我身边帮助过我的同学们,感谢你们热情的付出!你们兢兢业业,奋发向上的精神,将是我今后人生前进道路上的一种力量!再次感谢我的老师!.参考文献8徐文鹏.计算机图形学北京机械工业出版社,
[1]M.
2009.唐荣锡,等.计算机图形学教程修订版北京科学出版社,
[2][M].
2007.银红霞,等.计算机图形学北京中国水利水电出版社,
[3][M].
2000..附录9程序源代码和部分注释#include gl/glut.h#include windows.h#include math.h#includestring.h#includesstream#includefstream#include stdlib.h〈〃定义头文件#include time.h#define N3000;#define changecolor1#define resumecolor2#define quit3int winheight=700,winwidth=500;int cx=400,cy=200,radius=0;int hradius=150,mradius=150,sradius=300;float sangle,mangle,hangle;char timebuffer
[100];int ww=0,hh=0;int tt=1,11=0;int distances=0;[尸,定义函数”;char aintsecond,miniter,hour;int secondl,miniterl,hourl;float br=
0.0,bg=・0,bb=
255.0;〃定义函数float sr=
0.0,sg=
255.0,sb=
0.0;bool bLight=false;void drawcrpot;void drawlinc;void handintex,int cy,int r,float thleta;void Bresenham_Circleint x0,int yO,double radius;void CirPotintx0,int yO,intx,int y;void drawother;void createGLUTMenus;void processMenuEventsintoption;void MyinitvoidglClearColorl.OJ.OJ.OJ.O;glPolygonModeGL_FRONT_AND_BACK,GL_LINE;glLineWidthlO.O;glPointSize2;_strtimetimebuffer;hourl=50;miniterl=60;second1=70;tt=2;void distimbufferchar.stringsint lengths;lengths=int strlenstrings;glRasterPos2icx-50,cy+50;for intmm=O;mmlengths;mm++glutBitmapCharacterGLUT_BITMAP_TIMES_ROMAN_24,strings[mm];void disclockchar*stringintlength;length=int strlenstring;glRasterPos2icx-20,cy-10;for intm=0;mlength;m++glutBitmapCharacterGLUT_BITMAP_TIMES_ROMAN_24,string[m];void disdisclocka;distimbuffertimebuffer;void DisplayvoidglClearGL_COLOR_BUFFER_BIT;;//划个数字drawcrpot4三个指针dra wline;//drawother;dis;glutSwapBuffers;}〃画图void drawlinehradius=radius/
2.2;mradius=radius/l.Sjsradius=radius/l.5;cx=100+radius;cy=cx;glColor3fsr,sg,sb;handcx,cy,sradius,sangle;glLineWidth
3.0;handcx,cy,mradius,mangle;glLineWidth
5.0;handcx,cy,hradius,hangle;}void drawcrpotifwwhhdistances=hh;else distances=ww;radius=distances/2-100;glClearGL_COLOR_BUFFER_BIT;〃背景色glClearColorbr,bg,bb,
30.0;glColor3f
255.0,
50.0,l
10.0;光标定位,窗口左下角为glRasterPos2i100+radius,100;//0,0glutBitmapCharacterGLUT_BITMAP_TIMES_ROMAN_24;6,;glRasterPos2i100,100+radius;glutBitmapCharacterGLUT_BITMAP_TIMES_ROMAN_24;9,;glRasterPos2il00+2*radius,100+radius;glutBitmapCharacterGLUT_BITMAP_TIMES_ROMAN_24;3,;glRasterPos2i100+radius,100+2*radius;glutBitmapCharacterGLUT_BITMAP_TIMES_ROMAN_24;11;glutBitmapCharacterGLUT_BITMAP_TIMES_ROMAN_24,7;}〃画出表的圆盘void handintcx,int cy,int r,float thletafloatharr
[2];harr
[0]=cx+r*costhleta;harr
[1]=cy+r*sinthleta;。
个人认证
优秀文档
获得点赞 0