三維圖形設(shè)計課程設(shè)計報告_第1頁
三維圖形設(shè)計課程設(shè)計報告_第2頁
三維圖形設(shè)計課程設(shè)計報告_第3頁
三維圖形設(shè)計課程設(shè)計報告_第4頁
三維圖形設(shè)計課程設(shè)計報告_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、數(shù)字媒體技術(shù)專業(yè)三維圖形設(shè)計課程設(shè)計報告專業(yè)班級:學(xué)生學(xué)號:學(xué)生姓名:指導(dǎo)教師:2015年秋季學(xué)期起止時間:2016-1-11至2016-1-15院系:印刷包裝與數(shù)字媒體學(xué)院復(fù)式漫游摘要本文主要描述了計算機(jī)圖形學(xué)中,利用OpenGL實(shí)現(xiàn)的三維場景漫游作品復(fù)式漫游。其中合理運(yùn)用計算機(jī)圖形學(xué)知識,通過基本圖元的繪制函數(shù)繪制出復(fù)雜的圖形,進(jìn)行紋理貼圖、幾何變換、建立光照模型,最終建立出具有真實(shí)感的三維場景。該作品還可以實(shí)現(xiàn)鼠標(biāo)控制、鍵盤交互、漫游等功能,使我們可以自由地在場景中移動,觀看復(fù)式小樓的角角落落。本文主要從設(shè)計目的、系統(tǒng)設(shè)計、系統(tǒng)結(jié)構(gòu)框圖、實(shí)現(xiàn)思路、系統(tǒng)功能流程圖、實(shí)現(xiàn)步驟、調(diào)試運(yùn)行、設(shè)計

2、總結(jié)這幾方面對作品進(jìn)行介紹,附錄部分可看到運(yùn)行效果圖。詳細(xì)內(nèi)容請見本文。關(guān)鍵詞:OpenGL復(fù)式漫游計算機(jī)圖形學(xué)知識目錄緒論3正文3設(shè)計目的3系統(tǒng)設(shè)計4系統(tǒng)結(jié)構(gòu)框圖5實(shí)現(xiàn)思路5系統(tǒng)功能流程圖6實(shí)現(xiàn)步驟7調(diào)試運(yùn)行10設(shè)計總結(jié)10參考文獻(xiàn)11附錄11緒論三維場景漫游就是假定有一個虛擬人可以在三維場景中進(jìn)行移動從而觀察整個場景的過程。漫游的既可以通過移動視點(diǎn)和觀察方向(照相機(jī))來進(jìn)行,也可以保持視點(diǎn)在坐標(biāo)原點(diǎn)通過移動場景來進(jìn)行。 我所采用的是保持視點(diǎn)在坐標(biāo)原點(diǎn)通過移動場景來進(jìn)行。我做的三維場景漫游是關(guān)于一幢簡易別墅的漫游。進(jìn)入院子,別墅便可映入眼簾。這個別墅我一共建了兩層,第一層左側(cè)是客廳,右側(cè)是餐

3、區(qū)。通過客廳的樓梯便可上到二層,二層便是臥室,出了臥室的右面是一片草坪,屋主人便可在此運(yùn)動或休憩。大家可以使用方向鍵在別墅里進(jìn)行游覽。通過方向鍵的左右鍵實(shí)現(xiàn)左右轉(zhuǎn)動來仔細(xì)觀摩每個房間;通過上下方向鍵可進(jìn)行前進(jìn)或后退。 通過pageup和pagedown可從仰視和俯視兩個角度來觀察房問。 還有按住鼠標(biāo)左鍵便可左右轉(zhuǎn)動整個場景; 單擊鼠標(biāo)右鍵通過選項(xiàng)菜單可改變背景的顏色以及實(shí)現(xiàn)白天黑夜的效果。此次作品是在VC平臺上借助OpenGL庫函數(shù)及基本圖元繪制、glut內(nèi)置幾何體、圖形的幾何變換、矩陣堆棧函數(shù)、二維觀察變換、三維觀察變換、光照模型、紋理貼圖、鍵盤和鼠標(biāo)的交互輸入、場景漫游等計算機(jī)圖形學(xué)相關(guān)知

4、識實(shí)現(xiàn)的,具具體實(shí)現(xiàn)過程見正文。最終運(yùn)行的效果圖請見附錄部分。關(guān)于此次作品我是很認(rèn)真、努力地完成,具間計算坐標(biāo)、查找紋理貼圖花費(fèi)了很大的功夫。作品算不上完美,至少算是態(tài)度端正吧。作品中也存在很多不足,殷切希望老師能夠批評指正。正文設(shè)計目的:(1)通過此次課程設(shè)計,能夠使我對課程中所學(xué)的基本原理、算法和技術(shù)有更深入的理解,并將這些環(huán)節(jié)的知識融會貫通,鞏固課內(nèi)所學(xué)的理論、技術(shù)和技能;(2)通過做三維場景漫游,一方面是使我能夠接觸到這項(xiàng)技術(shù),并深入地學(xué)習(xí)了解它,然后運(yùn)用它;另一方面是希望通過這項(xiàng)技術(shù),能夠?qū)ζ渌嚓P(guān)軟件的學(xué)習(xí)起到一定的輔助作用。通過對OpenGL相關(guān)庫函數(shù)的學(xué)習(xí)和運(yùn)用,提高我們綜合開

5、發(fā)圖形軟件的開發(fā)能力,未畢業(yè)設(shè)計和畢業(yè)后從事與圖形開發(fā)相關(guān)的工作打下打下良好的綜合技能和知識基礎(chǔ)。系統(tǒng)設(shè)計:(1)首先先建立一個場景,即建立這棟別墅的周圍環(huán)境,讓其看起來更加真實(shí)。通過建立四個面并貼圖實(shí)現(xiàn),四周貼上街道背景圖,地面貼上草坪圖。開始繪制別墅。別墅為雙層別墅,按照所構(gòu)想的別墅結(jié)構(gòu)坐標(biāo)先繪制出別墅的整體框架。最后再給別墅加上屋頂。然后給別墅里每個房間添置上家具。在客廳里分別出繪制沙發(fā)、茶幾、茶壺、吊燈、樓梯,窗戶,電視,壁畫,再給所繪制出來的圖形貼上紋理貼圖;同理餐廳也是先繪制出餐桌,椅子,冰箱并貼上圖片,臥室添置床、吊燈還有衣柜并貼圖。臥室右邊的院落貼上草坪的圖片。簡易的二層復(fù)式便

6、建好了。(4)接著在別墅的四周圍上墻面,即用四個矩形外加貼圖實(shí)現(xiàn)。并給院子加上半敞開的門,最后鋪上鵝卵石的道路。(5)用多個球體組合拼接成一個小熊,并寫一個函數(shù)讓我們在運(yùn)行程序的時候小熊會沿著鵝卵石道路徑直走到院子門口停住,歡迎每個游客的到來。(6)再添加一些功能,通過菜單選擇可以切換白天和黑夜的效果。最后附上美妙的背景音樂,讓大家可以隨著音樂愉悅地參觀這棟別墅。系統(tǒng)結(jié)構(gòu)框圖:房間細(xì)節(jié)布局圖實(shí)現(xiàn)思路:(1)四周場景中的街道、草坪是由四個矩形拼接而成,并用紋理貼圖的相關(guān)知識所實(shí)現(xiàn)的。(2)別墅整體結(jié)構(gòu)的創(chuàng)建以及周圍的院落、道路、大門都是靠基本圖元的繪制所完成的,即四邊形和三角形。(3)別墅中內(nèi)部

7、的家具,像沙發(fā)、衣柜、餐桌、椅子等都是是通過多個四邊形繪制而成的,并通過一定的平移、旋轉(zhuǎn)、縮放變換達(dá)到最終的效果;客廳的吊燈和臥室的吊燈分別是靠幾何體中的圓柱和圓錐體;客廳中的樓梯是用長方體并平移變換而成。(4)小熊的繪制是由多個不同顏色的球體堆疊而成,通過將z坐標(biāo)設(shè)成變量,不斷地改變坐標(biāo)值并調(diào)用回調(diào)函數(shù)讓其實(shí)現(xiàn)自動平移。(5)實(shí)現(xiàn)白天或黑夜的效果運(yùn)用菜單實(shí)現(xiàn),分別通過打開光源和關(guān)閉關(guān)閉光源。(6)在整個場景中瀏覽,前后移動、左右轉(zhuǎn)動視角通過漫游技術(shù),結(jié)合鼠標(biāo)和鍵盤控制的交互技術(shù)實(shí)現(xiàn)。系統(tǒng)功能流程圖:開始開始運(yùn)行程由運(yùn)行程由, 背景音樂開始播放口小熊從別里移動到院子大背景音樂開始播放口小熊從別

8、里移動到院子大門門前前. .使使用上健通過院門進(jìn)入別堆用上健通過院門進(jìn)入別堆, ,用左右鍵左右轉(zhuǎn)動視角可觀察用左右鍵左右轉(zhuǎn)動視角可觀察房間的布局房間的布局, ,用用pagcup和和pagcdov口可抬頭、低頭,井能口可抬頭、低頭,井能觀看倒二樓的房間觀看倒二樓的房間O按住鼠標(biāo)左制可左分轉(zhuǎn)動整個場按住鼠標(biāo)左制可左分轉(zhuǎn)動整個場景景; ;單擊鼠標(biāo)右單擊鼠標(biāo)右鍵彈出菜鍵彈出菜單單,可以選擇可以選擇H大和黑夜的效果大和黑夜的效果,也可以選擇顏色選項(xiàng)也可以選擇顏色選項(xiàng),改改變背景變背景顏色顏色. .實(shí)現(xiàn)步驟:1.先進(jìn)行VC6.0環(huán)境下基于OpenGL程序開發(fā)的運(yùn)行環(huán)境配置(1)將OpenGL開發(fā)庫子目錄下

9、INCLUDE所有文件拷貝到VC所在子目錄的includegl目錄下。(2)將OpenGL開發(fā)庫子目錄下LIB所有文件拷貝到VC所在子目錄的lib目錄下。(3)將OpenGL開發(fā)庫子目錄下DLL所有文件拷貝到windows所在子目錄的system32目錄下。配置好后,便可用vc+6.0開始創(chuàng)建工程,編寫程序。將所需要用到的相關(guān)頭文件即stdafx.h、stdlib.h、math.hGL/glut.h、GL/glaux.h包含進(jìn)去。2 .編寫main函數(shù)(1)首先用函數(shù)glutInitDisplayMode()定義顯示方式為雙緩沖區(qū), 深度緩沖區(qū)的RGB胸口。(2)調(diào)用函數(shù)glutCreateW

10、indow()來創(chuàng)建窗口并設(shè)置標(biāo)題為復(fù)式漫游;再分別用glutInitWindowPosition()和glutInitWindowSize()來定義窗口的位置和大??; 用initScene()初始化場景,在函數(shù)中開啟深度檢測。(3)用回調(diào)函數(shù)glutDisplayFunc(DrawGLScene)調(diào)用DrawGLScene函數(shù)在窗口中繪制圖形;用回調(diào)函數(shù)glutReshapeFunc(ReSizeGLScene)T以實(shí)現(xiàn)當(dāng)窗口發(fā)生變化時,調(diào)用ReSizeGLScene重新定義窗口屬性。(4)最后加入glutMainLoop()函數(shù)讓程序進(jìn)入一個永不結(jié)束的循環(huán)。3.在ReSizeGLScene

11、函數(shù)中設(shè)置觀察點(diǎn),選擇投影矩陣,設(shè)置模型矩陣,再用gluPerspective和gluLookAt設(shè)置觀察方式和視點(diǎn)。4 .在DrawGLScene函數(shù)中繪制三維場景(1)先用glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)清除顏色緩存和深度緩存。(2)計算好坐標(biāo)后,用g舊egin(GL_QUADS)先后繪制出場景周圍的環(huán)境、別墅的結(jié)構(gòu) 以 及 別 墅 內(nèi) 部 的 家 具 。 其 中 的 屋 頂 是 主 要 是 由 四 邊 形 和 三 角 形 即glBegin(GL_TRIANGLES)組合繪制而成。(3)客廳的沙發(fā)是先用多個四邊形繪制出,然后用

12、glTranslatef()和glRotatef()平移旋轉(zhuǎn)后得到了組合沙發(fā),最后再用glPushMatrix()和glPopMatrix()放入堆棧,以防影響其他的坐標(biāo)位置??蛷d的吊燈是用gluCylinder()繪制兩個空心圓柱體得到的,同理進(jìn)行平移旋轉(zhuǎn)放到合適的位置,最后放入堆棧。樓梯則是用glutSolidCube()繪制多個立方體并對其進(jìn)行多次平移后實(shí)現(xiàn)的。二樓臥室的吊燈是靠glutSolidCone()實(shí)心圓錐體繪制出的。其他的家具、裝飾同理。(4)然后給別墅周圍圍上院墻、 鋪上道路、 并裝上大門, 同理都由四邊形拼接實(shí)現(xiàn)。(5)最后用glutSolidSphere(膾制出多個球體

13、,通過平移組合成一個簡易的小熊。并將其的Z坐標(biāo)設(shè)為一個變量,用if語句讓它在一定的范圍內(nèi)自增,在main函數(shù)中用glutIdleFunc(DrawGLScene)調(diào)用DrawGLScene實(shí)現(xiàn)小熊的自動前行。5.光照模型的建立(1)在main函數(shù)里加入SetupRC()函數(shù)。(2)在SetupRC()函數(shù)里先定義三個光源,即為環(huán)境光、漫反射光和鏡面反射光并設(shè)置好它們的顏色后,開啟深度檢測,并用glEnable(GL_LIGHTING)開啟使能光照,用glLightfv()建立光照并設(shè)置光源位置。6.力口入OpenGL紋理貼圖(1)先用GLuinttexture24創(chuàng)建紋理存儲,然后在LoadG

14、LTextures()函數(shù)中,用AUX_RGBImageRec*TextureImage1創(chuàng)建紋理的存儲空間。(2)接著用TextureImagei=LoadBMP(data/i.bmp)載入多張不同的圖片,用glGenTextures(1,&texturei)生成紋理。(3)在IMtGL()函 數(shù) 中 用glEnable(GL_TEXTURE_2D)開 啟 紋 理 貼 圖 , 并 用glBindTexture(GL_TEXTURE_2D,texturei)選擇生成的紋理,貼在所需要的面上,像別 墅 中 的 地 板 , 家 具 、 壁 紙 、 草 坪 都 是 貼 的 紋 理 貼 圖 。

15、 最 后 再 用glDisable(GL_TEXTURE_2D)關(guān)閉紋理。(4)在main函數(shù)里加入LoadGLTexturesQ數(shù)和InitGL()函數(shù)。7.鍵盤的控制即漫游技術(shù)的實(shí)現(xiàn)(1)首先在main函數(shù)里加入函數(shù)glutSpecialFunc(specialKey冰響應(yīng)特殊鍵事件處理回調(diào)。(2)在specialKey()函數(shù)中用switch語句使在按下不同的按鍵時做出相應(yīng)的響應(yīng),達(dá)到交互的效果。按上下鍵可以實(shí)現(xiàn)前進(jìn)和后退,則是靠不斷改變鏡頭在X和Z方向上的移動量。前進(jìn)的時候,坐標(biāo)不斷減小,拉近距離;反之,后退的時候,坐標(biāo)則不斷增加以實(shí)現(xiàn)漫游。(3) pageup和pagedown是通過

16、不斷改變x軸方向上旋轉(zhuǎn)的角度大小,即結(jié)合glRotatef(lookupdown,1.0f,0.0f,0.0f)實(shí)現(xiàn)的。(4)在此函數(shù)還加了一個可以使游戲者產(chǎn)生跳躍感的效果, 能夠更加真實(shí)地模擬人走路的時候,視線此起彼伏的狀態(tài)。8.鼠標(biāo)控制技術(shù)的實(shí)現(xiàn)在main函數(shù)里力口入glutMouseFunc(processMous咪調(diào)用函數(shù)processMouse來處理鼠標(biāo)左鍵是否被按下,加入glutMotionFunc(processMouseActiveMotion)調(diào)用processMouseActiveMotion函數(shù)來處理鼠標(biāo)拖動事件,如果左鍵按下,則通過改變X和Y方向上的旋轉(zhuǎn)角,來轉(zhuǎn)動整個場

17、景。9.添加彈出式菜單(1)先用menu=glutCreateMenu(processMenuEvents)建菜單,并告訴GLUT,processMenuEventst理菜單事件。(2)給菜單添加條目,分別為“Black、“Green、“Blue”、“Yellow、“Night”、“Day”,然后用glutAttachMenu(GLUT_RIGHT_BUTTON)把菜單和鼠標(biāo)右鍵關(guān)聯(lián)起來。(3)在processMenuEvents函數(shù)中把傳過來的value值用switch、case語句進(jìn)行選擇。前四個顏色選項(xiàng),是通過glClearColor(red,green,blue,0.0改變背景顏色;最

18、后兩個白天黑夜的實(shí)現(xiàn),分別是通過開啟光源和關(guān)閉光源實(shí)現(xiàn)的。(4)最后在main函數(shù)中調(diào)用createGLUTMenus()函數(shù)。10.背景音樂的添加(1)為了使程序有更豐富的效果,我添加了音樂小幸運(yùn)。首先加入導(dǎo)入音樂的頭文件#includemmsystem.h。(2)然后將PlaySound(小幸逋.wav,NULL,SND_ALIAS|SND_ASYNC)力口入到main函數(shù)里。程序運(yùn)行后,便可播放背景音樂了。調(diào)試運(yùn)行:總的來說,運(yùn)行程序較為順利。只出現(xiàn)過一個小問題,即只要一按方向鍵進(jìn)行前進(jìn)或后退時,畫面中有的紋理貼圖便會自動消失。后來經(jīng)仔細(xì)檢查發(fā)現(xiàn)是一開始定義紋理存儲空間時定義的不夠,匹配正確的數(shù)組個數(shù)后便可正常顯示紋理貼圖了。設(shè)計總結(jié):這次課程設(shè)計的圓滿結(jié)束,意味著我們對計算機(jī)圖形學(xué)的學(xué)習(xí)將要告一段落了

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論