




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、課程設(shè)計(jì)(論文)任務(wù)書(shū) 軟 件 學(xué) 院 學(xué)院 橋梁 專(zhuān)業(yè) 2 班 一、課程設(shè)計(jì)(論文)題目 旋轉(zhuǎn)的彩色立方體 二、課程設(shè)計(jì)(論文)工作自 2014 年 6 月 2 日起至 2014 年 6 月 6 日止。三、課程設(shè)計(jì)(論文) 地點(diǎn): 軟 件 學(xué) 院 實(shí) 訓(xùn) 中 心 四、課程設(shè)計(jì)(論文)內(nèi)容要求:1本課程設(shè)計(jì)的目的 計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì)是計(jì)算機(jī)圖形學(xué)課程中的知識(shí)、技術(shù)和技能的一個(gè)綜合應(yīng)用, 是培養(yǎng)圖形軟件開(kāi)發(fā)能力的綜合訓(xùn)練。通過(guò)課程設(shè)計(jì),使學(xué)生更深入地理解和掌握計(jì)算機(jī)圖形學(xué)理論與相關(guān)算法,鞏固課內(nèi)所學(xué)的知識(shí)、技術(shù)和技能,進(jìn)一步提高圖形軟件開(kāi)發(fā)的能力。為畢業(yè)設(shè)計(jì)和畢業(yè)后從事計(jì)算機(jī)繪圖、計(jì)算機(jī)輔助設(shè)
2、計(jì)、輔助教學(xué)、輔助工程、圖形處理等打下基礎(chǔ)。2課程設(shè)計(jì)的任務(wù)及要求1)課程設(shè)計(jì)任務(wù):1、繪制一個(gè)不停轉(zhuǎn)動(dòng)的立方體,通過(guò)鍵盤(pán)的方向控制旋轉(zhuǎn)方向;2、實(shí)現(xiàn)立方體的紋理映射,為立方體的六個(gè)面分別貼上不同的紋理;3、利用消影技術(shù),實(shí)驗(yàn)立方體表面的遮擋關(guān)系;4、具有比較好的動(dòng)畫(huà)效果,消除閃爍現(xiàn)象。2)課程設(shè)計(jì)論文編寫(xiě)要求(1)課程設(shè)計(jì)任務(wù)及要求(2)設(shè)計(jì)思路-工作原理、功能規(guī)劃(3)詳細(xì)設(shè)計(jì)-數(shù)據(jù)分析、算法思路、功能實(shí)現(xiàn)(含程序流程圖、主要代碼及注釋?zhuān)?、界面等。?)運(yùn)行調(diào)試與分析討論-給出運(yùn)行屏幕截圖,分析運(yùn)行結(jié)果,有何改進(jìn)想法等。(5)設(shè)計(jì)體會(huì)與小結(jié)-設(shè)計(jì)遇到的問(wèn)題及解決辦法,通過(guò)設(shè)計(jì)學(xué)到了哪些新知
3、識(shí),鞏固了哪些知識(shí),有哪些提高。(6)參考文獻(xiàn)(必須按標(biāo)準(zhǔn)格式列出,可參考教材后面的參考文獻(xiàn)格式)(7)報(bào)告按規(guī)定排版打印,要求裝訂平整,否則要求返工;(8)課設(shè)報(bào)告的裝訂順序如下:封面-任務(wù)書(shū)-中文摘要-目錄-正文-附錄(代碼及相關(guān)圖片)(9)嚴(yán)禁抄襲,如有發(fā)現(xiàn),按不及格處理。4)課程設(shè)計(jì)評(píng)分標(biāo)準(zhǔn): (1)學(xué)習(xí)態(tài)度:10分;(2)系統(tǒng)設(shè)計(jì):20分;(3)編程調(diào)試:20分;(4)回答問(wèn)題:20分;(5)論文撰寫(xiě):30分。5)參考文獻(xiàn):(1)陸楓 何云峰. 計(jì)算機(jī)圖形學(xué)基礎(chǔ)(第2版)M. 電子工業(yè)出版社(2)張曦煌 杜俊俐. 計(jì)算機(jī)圖形學(xué)M. 北京郵電大學(xué)出版社(3)孫家廣. 計(jì)算機(jī)圖形學(xué)M.
4、清華大學(xué)出版社. 6)課程設(shè)計(jì)進(jìn)度安排1準(zhǔn)備階段(4學(xué)時(shí)):選擇設(shè)計(jì)題目、了解設(shè)計(jì)目的要求、查閱相關(guān)資料2程序模塊設(shè)計(jì)分析階段(4學(xué)時(shí)):程序總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)3代碼編寫(xiě)調(diào)試階段(8學(xué)時(shí)):程序模塊代碼編寫(xiě)、調(diào)試、測(cè)試4撰寫(xiě)論文階段(4學(xué)時(shí)):總結(jié)課程設(shè)計(jì)任務(wù)和設(shè)計(jì)內(nèi)容,撰寫(xiě)課程設(shè)計(jì)論文學(xué)生簽名: 2014 年 6 月 6 日課程設(shè)計(jì)(論文)評(píng)審意見(jiàn)(1)學(xué)習(xí)態(tài)度(10分):優(yōu)()、良()、中()、一般()、差(); (2)系統(tǒng)設(shè)計(jì)(20分):優(yōu)( )、良()、中()、一般()、差(); (3)編程調(diào)試(20分):優(yōu)()、良()、中()、一般()、差();(4)回答問(wèn)題(20分):優(yōu)()、良(
5、)、中()、一般()、差();(5)論文撰寫(xiě)(30分):優(yōu)()、良()、中()、一般()、差(); 評(píng)閱人: 職稱(chēng): 講師 2014 年 6 月 6 日中文摘要 軟件專(zhuān)業(yè)經(jīng)過(guò)三年的課程學(xué)習(xí),已經(jīng)積累了相關(guān)高級(jí)語(yǔ)言程序設(shè)計(jì)的基本知識(shí)。畫(huà)出彩色正方體并使之旋轉(zhuǎn),這一題目考察了程序設(shè)計(jì)自頂而下、逐步細(xì)化的相關(guān)基本思想。題目難點(diǎn)在于實(shí)現(xiàn)可視化界面的交互、顏色的顯示以及圖像的旋轉(zhuǎn)過(guò)程。 經(jīng)過(guò)查找相關(guān)資料,本程序采用功能強(qiáng)大的圖形庫(kù)OPENGL并調(diào)用一系列WINDOWS API采用C/C+語(yǔ)言在Microsoft Visual C+6.0環(huán)境下編寫(xiě)。很好的解決了用C/C+編寫(xiě)圖形界面的難點(diǎn)問(wèn)題。通過(guò)Win
6、32平臺(tái)的OPENGL API實(shí)現(xiàn)了逼真的三維旋轉(zhuǎn)效果 關(guān)鍵詞:正方體;顏色變化;旋轉(zhuǎn);可視化;OPENGL目錄一、課程設(shè)計(jì)任務(wù)及要求1二、需求分析21、設(shè)計(jì)說(shuō)明22、運(yùn)行環(huán)境23、程序功能實(shí)現(xiàn)2三、總體設(shè)計(jì)31.OpenGL實(shí)現(xiàn)3四、詳細(xì)設(shè)計(jì)41、程序流程圖42.程序代碼分析51.OPENGL的初始化工作52.立方體的主體繪制53.顏色的繪制及變換84.旋轉(zhuǎn)的控制105.鼠標(biāo)的控制11六、設(shè)計(jì)體會(huì)與小結(jié)15七、參考文獻(xiàn)16一、課程設(shè)計(jì)任務(wù)及要求1、繪制一個(gè)不停轉(zhuǎn)動(dòng)的立方體,通過(guò)鍵盤(pán)的方向控制旋轉(zhuǎn)速度;2、實(shí)現(xiàn)立方體的紋理映射,為立方體的六個(gè)面分別貼上不同的紋理;3、利用消影技術(shù),實(shí)驗(yàn)立方體表
7、面的遮擋關(guān)系;4、可以通過(guò)鍵盤(pán)的方向改變視點(diǎn)及視線(xiàn)方向,從不同的位置和不同角度觀察立方體;5、具有比較好的動(dòng)畫(huà)效果,消除閃爍現(xiàn)象。二、需求分析1、設(shè)計(jì)說(shuō)明計(jì)劃采用OPENGL圖形庫(kù)并調(diào)用一系列WINDOWS API采用C/C+語(yǔ)言編寫(xiě)。首先,應(yīng)熟悉OPENGL在WIN32平臺(tái)下的相關(guān)API,以及其余WINDOWS窗口交互的相關(guān)接口方法,來(lái)構(gòu)建窗口的內(nèi)容。其次,熟悉了解OPENGL庫(kù)函數(shù)在窗體中實(shí)現(xiàn)繪圖(既繪制正方體),實(shí)現(xiàn)正方體旋轉(zhuǎn)功能的相關(guān)函數(shù)。最后,實(shí)現(xiàn)OPENGL與WINDOWS的交互的過(guò)程,完成程序及注釋。2、運(yùn)行環(huán)境 一臺(tái)可以實(shí)現(xiàn).exe可執(zhí)行文件,讀取txt文本文檔,以及在Visu
8、alC +6.0環(huán)境下進(jìn)行程序設(shè)計(jì)的可操作系統(tǒng)或其他電子設(shè)備。3、程序功能實(shí)現(xiàn) 1、可實(shí)現(xiàn)立方體的六個(gè)面分別具有不同的紋理; 2、通過(guò)消影技術(shù),顯現(xiàn)立方體表面的遮擋關(guān)系; 3、有較好的動(dòng)畫(huà)效果并去除閃爍現(xiàn)象; 4、使用鍵盤(pán)可更改旋轉(zhuǎn)的速度和方向且能從不同視角觀察立方體; 5、操作界面簡(jiǎn)潔,程序易于修改。 三、總體設(shè)計(jì) 1.OpenGL實(shí)現(xiàn) OpenGL 的工作順序就是一個(gè)從定義幾何要素到把象素段寫(xiě)入幀緩沖區(qū)的過(guò)程。在屏幕上顯示圖象的主要步驟是以下3 步: 1)構(gòu)造幾何要素(點(diǎn)、線(xiàn)、多邊形、圖像、位圖),創(chuàng)建對(duì)象的數(shù)學(xué)描述。在三維空間放置對(duì)象,選擇有利的觀察點(diǎn)。 2)計(jì)算對(duì)象的顏色,這些顏色可能
9、直接定義,或由光照條件及紋理間接給出。 3)光柵化,把對(duì)象的數(shù)學(xué)描述和顏色信息轉(zhuǎn)換到屏幕的象素。 2.程序模塊圖 圖3-2-1 程序模塊圖 四、詳細(xì)設(shè)計(jì)1、程序流程圖圖4-1-1 程序流程圖2.程序代碼分析1.OPENGL的初始化工作 通過(guò)查找資料OPENGL的初始化工作由如下庫(kù)函數(shù)過(guò)程來(lái)完成 glShadeModel(GL_SMOOTH); / 啟用陰影平滑 啟用smooth shading(陰影平滑)。陰影平滑通過(guò)多邊形精細(xì)的混合色彩,并對(duì)外部光進(jìn)行平滑。 glClearColor(0.0f, 0.0f, 0.0f, 0.5f); / 黑色背景 色彩值的范圍從0.0f到1.0f。0.0f代
10、表最黑的情況,1.0f就是最亮的情況。glClearColor 后的第一個(gè)參數(shù)是Red Intensity(紅色分量),第二個(gè)是綠色,第三個(gè)是藍(lán)色。最大值也是1.0f,代表特定顏色分量的最亮情況。 接下來(lái)的三個(gè)函數(shù)必須做的是關(guān)于depth buffer(深度緩存)的。將深度緩存設(shè)想為屏幕后面的層。深度緩存不斷的對(duì)物體進(jìn)入屏幕內(nèi)部有多深進(jìn)行跟蹤。我們本節(jié)的程序其實(shí)沒(méi)有真正使用深度緩存,但幾乎所有在屏幕上顯示3D場(chǎng)景OpenGL程序都使用深度緩存。它的排序決定那個(gè)物體先畫(huà)。這樣您就不會(huì)將一個(gè)圓形后面的正方形畫(huà)到圓形上來(lái)。深度緩存是OpenGL十分重要的部分。 glClearDepth(1.0f);
11、 / 設(shè)置深度緩存 glEnable(GL_DEPTH_TEST); / 啟用深度測(cè)試 glDepthFunc(GL_LEQUAL); / 所作深度測(cè)試的類(lèi)型 接下來(lái)是透視圖修飾使透視圖好看些: glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); / 真正精細(xì)的透視修正。2.立方體的主體繪制 首先使glClear(GL_COLOR_BUFFER_BITGL_DEPTH_BUFFER_BIT); 清除屏幕和深度緩存然后進(jìn)行各頂點(diǎn)的繪制并開(kāi)始繪制立方體void CCubeView:CreateRGBPalette() PIXELFORMATDESC
12、RIPTOR pfd; LOGPALETTE *pPal; int n, i; n = :GetPixelFormat(m_pDC-GetSafeHdc(); :DescribePixelFormat(m_pDC-GetSafeHdc(), n, sizeof(pfd), &pfd); if (pfd.dwFlags & PFD_NEED_PALETTE) n = 1 palVersion = 0x300; pPal-palNumEntries = n; for (i=0; ipalPalEntryi.peRed = ComponentFromIndex(i, pfd.cRedBits, pf
13、d.cRedShift); pPal-palPalEntryi.peGreen = ComponentFromIndex(i, pfd.cGreenBits, pfd.cGreenShift); pPal-palPalEntryi.peBlue = ComponentFromIndex(i, pfd.cBlueBits, pfd.cBlueShift); pPal-palPalEntryi.peFlags = 0; /* fix up the palette to include the default GDI palette */ if (pfd.cColorBits = 8) & (pfd
14、.cRedBits = 3) & (pfd.cRedShift = 0) & (pfd.cGreenBits = 3) & (pfd.cGreenShift = 3) & (pfd.cBlueBits = 2) & (pfd.cBlueShift = 6) )void CCubeView:CreateRGBPalette() PIXELFORMATDESCRIPTOR pfd; LOGPALETTE *pPal; int n, i; n = :GetPixelFormat(m_pDC-GetSafeHdc(); :DescribePixelFormat(m_pDC-GetSafeHdc(),
15、n, sizeof(pfd), &pfd); if (pfd.dwFlags & PFD_NEED_PALETTE) n = 1 palVersion = 0x300; pPal-palNumEntries = n; for (i=0; in; i+) /* fix up the palette to include the default GDI palette */ if (pfd.cColorBits = 8) & (pfd.cRedBits = 3) & (pfd.cRedShift = 0) & (pfd.cGreenBits = 3) & (pfd.cGreenShift = 3)
16、 & (pfd.cBlueBits = 2) & (pfd.cBlueShift = 6) ) for (i = 1 ; i palPalEntrydefaultOverridei = defaultPalEntryi; m_cPalette.CreatePalette(pPal); delete pPal; m_pOldPalette = m_pDC-SelectPalette(&m_cPalette, FALSE); m_pDC-RealizePalette(); 3.顏色的繪制及變換void CCubeView:DrawScene(void) static BOOL bBusy = FA
17、LSE; static GLfloat wAngleY = 10.0f; static GLfloat wAngleX = 1.0f; static GLfloat wAngleZ = 5.0f; if(bBusy) return; bBusy = TRUE; glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glTranslatef(0.0f, 0.0f, -m_fRadius); glRotatef(wAngleX, 1.0f,
18、0.0f, 0.0f); glRotatef(wAngleY, 0.0f, 1.0f, 0.0f); glRotatef(wAngleZ, 0.0f, 0.0f, 1.0f); wAngleX += 1.0f; wAngleY += 10.0f; wAngleZ += 5.0f;glBegin(GL_QUAD_STRIP);glColor3f(1.0f, 0.0f, 1.0f);glVertex3f(-0.5f, 0.5f, 0.5f); glColor3f(0.0f, 0.0f, 0.0f); glVertex3f(-0.5f, -0.5f, -0.5f); glEnd(); glPopMa
19、trix(); glFinish(); SwapBuffers(wglGetCurrentDC(); bBusy = FALSE;BOOL CCubeView:OnEraseBkgnd(CDC* pDC) return TRUE;4.旋轉(zhuǎn)的控制 void CCubeView:OnSize(UINT nType, int cx, int cy) CView:OnSize(nType, cx, cy); if(cy 0) glViewport(0, 0, cx, cy); if(m_oldRect.right cx) | (m_oldRect.bottom cy) RedrawWindow();
20、m_oldRect.right = cx; m_oldRect.bottom = cy; glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f, (GLdouble)cx/cy, 3.0f, 7.0f); glMatrixMode(GL_MODELVIEW); void CCubeView:OnTimer(UINT nIDEvent) DrawScene();CView:OnTimer(nIDEvent);/ Eat spurious WM_TIMER messagesMSG msg;while(:PeekMes
21、sage(&msg, m_hWnd, WM_TIMER, WM_TIMER, PM_REMOVE);/ GL helper functions5.鼠標(biāo)的控制void CCubeView:Init() PIXELFORMATDESCRIPTOR pfd; int n;HGLRChrc;GLfloatfMaxObjSize, fAspect;GLfloatfNearPlane, fFarPlane; m_pDC = new CClientDC(this); ASSERT(m_pDC != NULL); if (!bSetupPixelFormat() return; n = :GetPixelFo
22、rmat(m_pDC-GetSafeHdc(); :DescribePixelFormat(m_pDC-GetSafeHdc(), n, sizeof(pfd), &pfd); CreateRGBPalette(); hrc = wglCreateContext(m_pDC-GetSafeHdc(); wglMakeCurrent(m_pDC-GetSafeHdc(), hrc); GetClientRect(&m_oldRect); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST);BOOL CCubeView:bSetupPixelFormat() s
23、tatic PIXELFORMATDESCRIPTOR pfd = sizeof(PIXELFORMATDESCRIPTOR), / size of this pfd 1, / version number PFD_DRAW_TO_WINDOW | / support window PFD_SUPPORT_OPENGL | / support OpenGL PFD_DOUBLEBUFFER, / double buffered PFD_TYPE_RGBA, / RGBA type 24, / 24-bit color depth 0, 0, 0, 0, 0, 0, / color bits ignored 0, / no alpha buffer 0, / shift bit ignored 0, / no accumulation buffer 0, 0, 0, 0, / accum bits ignored 32, / 32-bit z-buffer 0, / no stencil buffer 0, / no auxiliary buffer PFD_MAIN_PLANE, / main layer 0, / reserved 0, 0, 0 / layer masks ignored ; int pixelformat; if ( (pixelformat
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 培養(yǎng)學(xué)生社會(huì)責(zé)任感的教育活動(dòng)計(jì)劃
- 《生物無(wú)機(jī)化學(xué)》課程教學(xué)大綱
- 《化工仿真實(shí)習(xí)》課程教學(xué)大綱
- 減庫(kù)存與提升周轉(zhuǎn)率的策略計(jì)劃
- 咨詢(xún)服務(wù)會(huì)計(jì)的工作計(jì)劃
- 跨界合作中的安全保障措施總結(jié)計(jì)劃
- 企業(yè)內(nèi)部的培訓(xùn)效果評(píng)估與反饋
- 制定個(gè)人學(xué)習(xí)發(fā)展的藍(lán)圖計(jì)劃
- 兒科學(xué)科中生物安全教育的重要性
- 2024年高考數(shù)學(xué)專(zhuān)項(xiàng)復(fù)習(xí):直線(xiàn)與圓
- 2.0MWp屋頂太陽(yáng)能分布式光伏發(fā)電項(xiàng)目監(jiān)理大綱2
- 山的飛花令經(jīng)典1000首小學(xué)
- 煉油廠(chǎng)化工廠(chǎng)車(chē)間崗位勝任力素質(zhì)模型設(shè)計(jì)
- 電子課件-《市場(chǎng)營(yíng)銷(xiāo)》-A45-2298完整版教學(xué)課件全書(shū)電子講義(最新)
- 紅土鎳礦濕法冶煉技術(shù)綜述
- 隧道開(kāi)挖作業(yè)臺(tái)車(chē)計(jì)算書(shū)
- 水利水電工程金屬結(jié)構(gòu)與機(jī)電設(shè)備安裝安全技術(shù)規(guī)程
- 新視野大學(xué)英語(yǔ)讀寫(xiě)譯4U校園第一單元課后測(cè)試答案
- 國(guó)學(xué)基本知識(shí)(課堂PPT)
- 獨(dú)資公司章程范本下載
- OQC出貨檢驗(yàn)報(bào)告
評(píng)論
0/150
提交評(píng)論