時鐘課程設(shè)計報告帶可運行的源代碼_第1頁
時鐘課程設(shè)計報告帶可運行的源代碼_第2頁
時鐘課程設(shè)計報告帶可運行的源代碼_第3頁
時鐘課程設(shè)計報告帶可運行的源代碼_第4頁
時鐘課程設(shè)計報告帶可運行的源代碼_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

計算機圖形學(xué)

期末課程設(shè)計報告課程名稱: 計算機圖形學(xué)設(shè)計題目:編程實現(xiàn)時鐘運動院系: 計算機與信息工程學(xué)院專業(yè): 網(wǎng)絡(luò)工程起止日期:起11年11月27日~2012年1月5日指導(dǎo)教師: 楊斌glBegin(GL_LINES);glVertex2f(harr[0],harr[l]);glVertex2f(ex,cy);glEnd();)voiddrawother()(glColor3f(0.0,255.0,105.0);Bresenham_Circle(cx,cy,double(radius+20));)voidBresenham_Circle(intxO,intyO,doubleradius){intx,y,d;x=0;y=int(radius);d=(int)3-2*radius;while(x<=y)(CirPot(xO,yO,x9y);if(d<0) d+=4*x+1;else(d+=4*(x-y)-2;y—;)x++;))voidCirPot(intxO,intyO,intx,inty)(glBegin(GL_POINTS);glVertex2f(xO+x,yO+y);glVertex2f(x0+x,y0?y);glVertex2f(xO-x,yO+y);glVertex2f(x0-x,y0-y);glVertex2f(xO+y,yO+x);glVertex2f(x0+y,y0-x);glVertex2f(x0-y,y0+x);glVertex2f(xO-y,yO-x);glEnd();)voidmyidle()(::Sleep(1000);_strtime(timebuffer);〃取系統(tǒng)時間到timebuffer數(shù)組中for(inti=0;i<9;i++)hour=((int)timebuffer[0]-48)*10+((int)timebuffer[1]-48);miniter=((int)timebuffer[3]-48)*10+((int)timebuffer[4]-48);second=((int)timebuffer[6]-48)*10+((int)timebuffer[7]-48);sangle=(float)(3.1415/2-(float)second*2*3.1415/60);mangle=(float)3.1415/2-(float)(miniter+(float)second/60)/60*2*3.1415;hangle=(float)3.1415/2-(float)(hour+(float)(miniter+(float)second/60)/60)*2*3.1415/12;glutPostRedisplayO;)voidReshape(intw,inth)(ww=w;hh=h;glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadldentityO;gluOrtho2D(-20,(GLdouble)w,-180.0,(GLdouble)h);glMatrixMode(GL_MODELVIEW);glLoadldentityO;)voidchange()〃改變顏色{br=0.0,bg=255Qbb=0.0;sr=0.0,sg=255.0,sb=0.0;}voidresume()//恢復(fù)顏色{br=O.O,bg=O.O,bb=O.O;sr=1.0,sg=1.O,sb=O.O;}voidprocessMenuEvents(intoption)(switch(option)(casechangecolor:change();break;caseresumecolor:resume();break;casequit:cxit(O);break;})voidcreateGLUTMenus()intmenu;menu=glutCreateMenu(processMenuEvents);glutAddMenuEntry("交換顏色,changecolor);glutAddMenuEntry("恢復(fù)顏色"jesumecolor);glutAddMenuEntry("退出H,quit);glutAttachMenu(GLUT_RIGHT_BUTTON);)intmain(intargc,char**argv)(glutlnit(&argc,argv);glutInitWindowPosition(0,0);glutInitWindowSize(winheight,winwidth);glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);glutCreateWindow("計算初L-09--40---陸洋)MyinitQ;glutDisplayFunc(Display);glutldleFunc(myidle);glutReshapeFunc(Reshape);createGLUTMenus();glutMainLoopO;return0;)評語:評閱教師簽名:目錄TOC\o"1-5"\h\z\o"CurrentDocument"1?引言1\o"CurrentDocument".需求分析1.概要設(shè)計1概要設(shè)計實現(xiàn)的內(nèi)容1函數(shù)的功能描述1\o"CurrentDocument".詳細設(shè)計2\o"CurrentDocument".調(diào)試與操作說明3\o"CurrentDocument".課程設(shè)計總結(jié)與體會4\o"CurrentDocument".致謝4\o"CurrentDocument"8?參考文獻59?附錄5課程設(shè)計的主要內(nèi)容1?引言本學(xué)期系統(tǒng)的學(xué)習(xí)了計算機圖形學(xué),在學(xué)期末按課程要求對其進行設(shè)計,本課程主要內(nèi)容包括以圖形學(xué)算法為目標(biāo),深入研究。續(xù)而策劃設(shè)計實現(xiàn)一個能夠表現(xiàn)計算機圖形學(xué)算法原理的或完整過程的演示系統(tǒng),并能從某些方面做出評價和改進意見。通過完成一個完整程序,經(jīng)歷策劃、設(shè)計、開發(fā)、總結(jié)。達到通過本課程設(shè)計,使自己鞏固和實踐計算機圖形學(xué)課程中的理論和算法;掌握基本圖形顯示程序設(shè)計方法,及二維和三維圖形變換等程序設(shè)計方法,學(xué)習(xí)表現(xiàn)計算機圖形學(xué)算法的技巧。同時以達到培養(yǎng)認(rèn)真學(xué)習(xí)積極探索的精神。2.需求分析圖形學(xué)設(shè)計報告題目:編程實現(xiàn)時鐘運動圖形學(xué)設(shè)計報告任務(wù)及要求:顯示時鐘三個指針,實現(xiàn)三根時針間的相互關(guān)系;通過右鍵切換實現(xiàn)時鐘背景和指針顏色。課程設(shè)計思想:編程實現(xiàn)時鐘運動,通過使用OpenGL提供的標(biāo)準(zhǔn)庫函數(shù),綜合圖形學(xué)Bresenham畫線和畫圓的算法,OpenGL顏色模型中的RGBA模式,顏色表示模式等實現(xiàn)指針式時鐘運動,并通過點擊右鍵菜單實習(xí)時鐘背景與時針顏色的轉(zhuǎn)換。 _ _ _根據(jù)Bresenham畫線和畫圓的算法,畫出時鐘的指針和表盤。再根據(jù)OpenGL顏色模型用glColorO定義當(dāng)前顏色。設(shè)置當(dāng)時鐘運行時交換的菜單,運行程序時可變換時鐘背景與時針的顏色。在此中綜合實現(xiàn)本學(xué)期中學(xué)習(xí)到OpenGL編程中部分的方法與操作。軟硬件運行環(huán)境:MicrosoftWindowsXPO工發(fā)工具:VC++6.0。概要設(shè)計實現(xiàn)的內(nèi)容利用VC++6.0完成了一個時鐘,顯示時鐘三個指針,實現(xiàn)三根時針間的相互關(guān)系;通過右鍵切換實現(xiàn)時鐘背景和指針顏色。函數(shù)的功能描述⑴時鐘數(shù)字函數(shù):voiddis();⑵繪制時鐘:voidDisplay();⑶畫出時鐘上的數(shù)字函數(shù):voiddrawcrpot();⑷繪制時鐘三個指針函數(shù):voiddrawline();⑸繪制時鐘的圓盤:voiddrawcrpot();⑹獲取系統(tǒng)時間的函數(shù):voidmyidle();⑺改變顏色的函數(shù):voidchange();(8只灰復(fù)顏色的函數(shù):voidresume();(9)通過wasd移動時鐘的函數(shù):voidkeyboard();4.詳細設(shè)計1畫圖。voidDisplay(void)glClear(GL_COLOR_BUFFER_BTT);drawcrpot();〃劃4個數(shù)字drawline。;//三個指針drawother();dis();glutSwapBuffers();)2畫表的圓盤。voiddrawcrpot()(if(ww>hh)distances=hh;elsedistances=ww;radius=distances/2-l00;glClear(GL_COLOR_BUFFER_BIT);glClearColor(br,bg,bb,30.0);//背景色glColor3f(255.0,50.0,110.0);glRasterPos2i(100+radius,100);//光標(biāo)定位,窗口左下角為(0,0)glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24;6,);glRasterPos2i(100,100+radius);glutBitmapCharacter(GLUT_B!TMAP_TIMES_ROMAN_24;9,);glRasterPos2i(l00+2*radius,l00+radius);glutBitmapCharacter(GLUT_BTTMAP_TIMES_ROMAN_24;3,);glRasterPos2i(100+radius,100+2*radius);glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24;r);glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,,21);)3獲取系統(tǒng)時間。voidmyidle()(::Sleep(1000);_strtime(timebuffer);4改變顏色。voidchange。//改變顏色{br=0.0,bg=255.0,bb=0.0;sr=0.0,sg=255.0,sb=0.0;}5恢復(fù)顏色。voidresume()〃恢復(fù)顏色{br=O.O,bg=O.O,bb=O.O;sr=1.0,sg=l.O,sb=O.O;)6鍵盤事件wasd移動voidkeyboard(unsignedcharm,intx,inty)〃鍵盤事件wasd移動(switch(m){case'wf:glTranslatef(O.Of,lO.Of,O.Of);break;case's':glTranslatef(O.Of,-lO.Of,O.Of);break;case'a':glTranslatef(-1O.Of,O.Of,O.Of);break;cased:glTranslatef(10.0f,O.Of,O.Of);break;default:glViewport(0,0,700,700);))7菜單。voidcreateGLUTMenus()(intmenu;menu=glutCreateMenu(processMenuEvents);glutAddMenuEntry("交換顏色",changecolor);glutAddMenuEntry("恢復(fù)顏色"jesumecolor);glutAddMenuEntry("退出n,quit);glutAttachMenu(GLUT_RTGHT_BUTTON);).調(diào)試與操作說明1一個指針式時鐘生成,通過右鍵菜單可以切換時鐘背景與指針顏色。如圖1所示圖1繪制效果圖2顏色切換后的效果圖如圖2所示圖2切換顏色效果圖.課程設(shè)計總結(jié)與體會在本次課程設(shè)計里面,熟練掌握了使用OpenGL提供的標(biāo)準(zhǔn)庫函數(shù),Bresenham畫線和畫圓的算法,OpenGL顏色模型中的RGBA模式,顏色表示模式等知識。在本次設(shè)計中存在眾多不足,對專業(yè)知識有待進一步的提高。.致謝本圖形學(xué)設(shè)計是在我的老師楊斌的親切關(guān)懷和悉心指導(dǎo)下完成的。他嚴(yán)肅的科學(xué)態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神,精益求精的工作作風(fēng),深深地感染和激勵著我。從課題的選擇到設(shè)計的最終完成。我要感謝楊老師對我的教育培養(yǎng),您細心指導(dǎo)我的學(xué)習(xí)與研究,在此,我要向您深深地鞠上一躬。還要感謝在我身邊幫助過我的同學(xué)們,感謝你們熱情的付出!你們兢兢業(yè)業(yè),奮發(fā)向上的精神,將是我今后人生前進道路上的一種力量!再次感謝我的老師!.參考文獻[1]徐文鵬.計算機圖形學(xué)M.北京:機械工業(yè)出版社,2009.[2]唐榮錫,等.計算機圖形學(xué)教程(修訂版)[M].北京:科學(xué)出版社,2007.[3]銀紅霞,等.計算機圖形學(xué)[M].北京:中國水利水電出版社,2000..附錄程序源代碼和部分注釋:#include<gl/glut.h>#include<windows.h>#include<math.h>#include<string.h>#include<sstream>#include<fstream>#include<stdlib.h>#include〈time.h>〃定義頭文件defineN3000;definechangecolor1defineresumecolor2definequit3intwinheight=700,winwidth=500;intcx=400,cy=200,radius=0;inthradius=150,mradius=150,sradius=300;floatsangle,mangle,hangle;chartimebuffer[100];intww=0,hh=0;inttt=1,11=0;intdistances=0;chara[尸,定義函數(shù)”;intsecond,miniter,hour;intsecondl,miniterl,hourl;floatbr=0.0,bg=?0,bb=255.0;floatsr=0.0,sg=255.0,sb=0.0;〃定義函數(shù)boolbLight=false;voiddrawcrpot();voiddrawlinc();voidhand(intex,intcy,intr,floatthleta);voidBresenham_Circle(intx0,intyO,doubleradius);voidCirPot(intx0,intyO,intx,inty);voiddrawother();voidcreateGLUTMenus();voidprocessMenuEvents(intoption);voidMyinit(void)(glClearColor(l.OJ.OJ.OJ.O);glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);glLineWidth(lO.O);glPointSize(2);_strtime(timebuffer);hourl=50;miniterl=60;second1=70;tt=2;)voiddistimbuffer(char.strings)(intlengths;lengths=(int)strlen(strings);glRasterPos2i(cx-50,cy+50);for(intmm=O;mm<lengths;mm++)(glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,strings[mm]);))voiddisclock(char*string)(intlength;length=(int)strlen(string);glRasterPos2i(cx-20,cy-10);for(intm=0;m<length;m++)(glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,string[m]);))voiddis()(disclock(a);distimbuffer(timebuffer);voidDisplay(void)glClear(GL_COLOR_BUFFER_BIT);drawcrpot。;//劃4個數(shù)字drawline();//三個指針drawother();dis();glutSwapBuffers();}〃畫圖voiddrawline()(hradius=radius/2.2;mradius=radius/l.Sjsradius=radius/l.5;cx=100+radius;cy=cx;glColor3f(sr,sg,sb);hand(cx,cy,sradius,sangle);glLineWidt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論