版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、三維圖形的光照、貼圖及陰影處理(OpenGL)實(shí)驗(yàn)過(guò)程:一、在VS6.0中建立新工程。1、新建一個(gè)Win32 Application的工程。2、向工程項(xiàng)目添加C+源文件。3、將OpenGL框架復(fù)制到文件中。4、設(shè)置OpenGL窗口標(biāo)題。二、場(chǎng)景設(shè)置。1、視線處于一具有地板及前、左、右三面墻壁的空間中。2、空間頂部中央有一光源。3、空間中央有一地球儀,不斷旋轉(zhuǎn)。三、建立視口結(jié)構(gòu)及視點(diǎn)屬性。1、在坐標(biāo)系上建立視圖結(jié)構(gòu)。如圖。2、參數(shù)設(shè)置。窗口大小:800*600。視口大小:800*600。透視深度:0.1100。透視角:60°。視點(diǎn)位置:(0.0, 2.0, 15.0)。視線方向:z軸負(fù)
2、方向。視點(diǎn)上方向:y軸正方向。3、調(diào)用函數(shù)glViewport()、gluPerspective()和gluLookAt()實(shí)現(xiàn)。四、繪制三維圖形。1、開(kāi)啟深度測(cè)試模式。為防止圖形重疊時(shí)出現(xiàn)層次混亂,必須對(duì)繪制圖形進(jìn)行消隱處理。直接調(diào)用函數(shù)glEnable(GL_DEPTH_TEST)開(kāi)啟深度測(cè)試。2、繪制地面與墻壁。調(diào)用OpenGL基本幾何元素繪制過(guò)程glBegin(GL_QUADS)、glBegin(GL_QUAD_STRIP)繪制四個(gè)平面,坐標(biāo)范圍為:x: -1010, y: -220, z: -1010。坐標(biāo)系結(jié)構(gòu)如圖。3、繪制地球儀。設(shè)計(jì)函數(shù)void DrawEarth()實(shí)現(xiàn)地球儀
3、的繪制,分別調(diào)用OpenGL球面繪制函數(shù)gluSphere()繪制地球形狀、柱面繪制函數(shù)gluCylinder()繪制地軸兩頭形狀。(1)參數(shù)設(shè)置。球面半徑:2。球面細(xì)度:水平100,垂直100。柱面半徑:0.05。柱面高度:1。柱面細(xì)度:水平50,垂直1。(2)結(jié)構(gòu)如圖。4、繪制模擬光源。(1)繪制“燈罩”。調(diào)用glBegin(GL_TRIANGLE_STRIP)繪制4個(gè)三角形,構(gòu)成棱椎形燈罩的4個(gè)側(cè)面。(2)繪制“燈泡”。調(diào)用gluSphere()繪制球形燈泡。(3)參數(shù)設(shè)置。燈罩底面:四個(gè)底面頂點(diǎn)距底面中心距離為1。燈罩高度:1。燈罩顏色:頂點(diǎn)為(0.8, 0, 0),底面頂點(diǎn)為(0.8
4、, 0.8, 0),繪制時(shí)顏色自然過(guò)渡。燈泡半徑:0.4。燈泡顏色:(1, 1, 0.8)。(4)整體結(jié)構(gòu)如圖。五、光照效果。1、設(shè)置全局環(huán)境光。調(diào)用函數(shù)glLightModelfv()調(diào)節(jié)全局泛射光強(qiáng)度為(1, 1, 1, 1)。2、設(shè)置光源0。調(diào)用函數(shù)glLightfv()調(diào)節(jié)光源泛射光強(qiáng)度為(1, 1, 1, 1),漫反射光強(qiáng)度為(2, 2, 2, 1),光源位置為(0, 10, 0, 1),最后一個(gè)參數(shù)指定光照類(lèi)型為非平行光。3、光照效果開(kāi)啟與關(guān)閉。光照效果僅作用于地面、墻壁、地球及地軸,模擬光源不使用光照效果。調(diào)用函數(shù)glEnable(GL_LIGHTING)和glDisable(G
5、L_LIGHTING)實(shí)現(xiàn)光照模式的開(kāi)啟和關(guān)閉。六、設(shè)置地球儀和模擬光源的自轉(zhuǎn)。調(diào)用函數(shù)glRotatef()實(shí)現(xiàn)旋轉(zhuǎn),轉(zhuǎn)軸與地軸同一直線,設(shè)置變量earth_rotate為旋轉(zhuǎn)角度,每幀更新遞增4°,則繪圖時(shí)自動(dòng)旋轉(zhuǎn)。七、紋理貼圖。1、載入貼圖。(1)設(shè)計(jì)函數(shù)BOOL LoadTexture()實(shí)現(xiàn)貼圖載入,對(duì)應(yīng)的貼圖引用ID保存在數(shù)組textureNTEX中。(2)在初始化函數(shù)Initialize()中調(diào)用LoadTexture()載入貼圖。2、繪制貼圖。(1)調(diào)用函數(shù)glBindTexture()為下面繪制的圖形綁定貼圖。(2)調(diào)用函數(shù)glTexCoord2f()建立二維圖形與
6、貼圖的坐標(biāo)映射。(3)調(diào)用函數(shù)gluQuadricTexture()建立球面與貼圖的坐標(biāo)映射。3、貼圖模式的開(kāi)啟與關(guān)閉。貼圖只應(yīng)用于地面、墻壁和地球面,地軸和模擬光源不使用貼圖。調(diào)用函數(shù)glEnable(GL_TEXTURE_2D)和glDisable(GL_TEXTURE_2D)實(shí)現(xiàn)貼圖模式的開(kāi)啟和關(guān)閉。4、帶光照效果和紋理貼圖的圖形繪制。八、陰影效果。1、平面陰影投射矩陣的推導(dǎo)。設(shè)投射平面的方程為Ax + By + Cz + D=0,光源位置為L(zhǎng)(Lx, Ly, Lz),空間某點(diǎn)P(Px, Py, Pz)在平面上的投影坐標(biāo)為S(Sx', Sy', Sz'),則有L,
7、P,S共線,且ASx' + BSy' + CSz' + D = 0。如圖。令向量L = (Lx, Ly, Lz, 0),P = (Px, Py, Pz, 1),S = (Sx', Sy', Sz', 1),N = (A, B, C, D),則有ASx' + BSy' + CSz' + D = S · N = k'(P L) + L · N= k'P + (1 k')L · N = 0,令k = (k' 1) / k'得(P + kL) · N=
8、0,解得k = (P · N) / (L · N) = (APx + BPy + CPz + D) / (ALx + BLy + CLz)。將上式代入S = P + kL可得Sx' = Px + kLx = Px Lx(APx + BPy + CPz + D)/(ALx + BLy + CLz)
9、 = Px · (BLy + CLz) Py · BLx Pz · CLx 1 · DLx/(ALx + BLy + CLz) = P · (BLy + CLz, BLx, CLx,
10、0; DLx )/(ALx + BLy + CLz),Sy' = P · ( ALy,
11、160; ALx + CLz, CLy, DLy
12、 )/(ALx + BLy + CLz),Sz' = P · ( ALz, BLz, ALx + BLy, DLz
13、 )/(ALx + BLy + CLz),1 = P · (0,
14、; 0, 0, ALx + BLy + CLz )/(ALx + BLy
15、 + CLz)。在OpenGL中,四維坐標(biāo)有以下轉(zhuǎn)換關(guān)系:(x, y, z, k) = (kx, ky, kz, 1)。由此,得到S的四維向量坐標(biāo)S = HP,其中P為空間某點(diǎn)P的向量坐標(biāo),H即為平面陰影投射矩陣。在OpenGL中,有一個(gè)4×4的空間平面坐標(biāo)變換矩陣R,將三維坐標(biāo)映射為屏幕實(shí)際顯示出來(lái)的二維圖形。故有S0 = RS = RHP = R'P,其中R' = RH。從而在R'的變換下,圖形將被“壓扁”地繪制到陰影投射平面上。2、陰影投射矩陣的生成算法。設(shè)計(jì)函數(shù)void GenerateShadow()計(jì)算陰影投射矩陣,記錄在二維數(shù)組shadow44中
16、。3、繪制陰影。(1)關(guān)閉光照和紋理貼圖,設(shè)置陰影顏色。(2)為防止陰影與投射平面重合導(dǎo)致繪圖層次混亂,將陰影繪制平面上移一個(gè)小單位。(3)對(duì)于四個(gè)陰影投射平面,分別計(jì)算陰影投射矩陣,并與當(dāng)前模型視圖矩陣相乘。(4)由于當(dāng)前模型視圖矩陣被修改,要恢復(fù)之前的狀態(tài)必須將運(yùn)算前的矩陣壓入矩陣棧,陰影繪制結(jié)束后彈出。(5)調(diào)用地球儀繪制函數(shù)DrawEarth()即可完成陰影繪制。九、鍵盤(pán)控制。1、設(shè)置變量posX、posY、posZ、rotH、rotV,分別控制地球儀坐標(biāo)和水平、垂直旋轉(zhuǎn)角度。2、在地球儀繪制函數(shù)void DrawEarth()中添加坐標(biāo)變換函數(shù)。3、在框架函數(shù)void Update(
17、)中添加鍵盤(pán)按鍵響應(yīng)及邊緣控制。十、文字說(shuō)明。1、制作文字貼圖。2、繪制文字貼圖平面。綁定貼圖,建立坐標(biāo)映射,繪制平面。平面位置在視口空間的前部,即總在地球儀位置前方。3、設(shè)置透明效果。設(shè)置混合類(lèi)型,開(kāi)啟透明模式,關(guān)閉深度測(cè)試,設(shè)置陰影顏色及其透明度。繪制結(jié)束后關(guān)閉透明模式,重新開(kāi)啟深度測(cè)試。實(shí)驗(yàn)結(jié)果:一、圖形繪制效果。1、整體效果較為理想。2、消隱效果良好。如不開(kāi)啟深度測(cè)試,則會(huì)出現(xiàn)以下現(xiàn)象。二、透視效果。1、窗口結(jié)構(gòu)和整體透視效果與計(jì)算預(yù)期結(jié)果一致。2、地球儀移動(dòng)到窗口邊緣時(shí)會(huì)出現(xiàn)明顯變形,如圖所示。三、光照效果。1、僅地球儀和墻壁、地面受中心光源0光照,其他只受全局環(huán)境泛射光影響,與預(yù)期
18、結(jié)果相同。2、地球儀受光明顯,出現(xiàn)光照面與陰暗面,且方向正確。3、關(guān)閉貼圖可以看到良好的整體光照效果。四、貼圖效果。1、平面、球面貼圖均得到較好效果。圖略。2、顏色深度設(shè)置為16位色,如果圖片格式不正確,會(huì)出現(xiàn)貼圖錯(cuò)誤。五、陰影效果。1、在透明模式下,地球陰影與地軸陰影相疊加,陰影明顯失真。2、陰影在多個(gè)面的交匯處得到十分準(zhǔn)確的效果。六、動(dòng)畫(huà)效果。1、實(shí)現(xiàn)了地球儀和模擬光源的自轉(zhuǎn),轉(zhuǎn)速適中。2、使用10個(gè)鍵盤(pán)按鍵實(shí)現(xiàn)地球儀的平移和旋轉(zhuǎn)控制。3、在接近墻壁、地面和視點(diǎn)處設(shè)置坐標(biāo)控制,限制了球面的平移范圍。但因地軸位置不確定,無(wú)法實(shí)現(xiàn)范圍控制,即有可能穿透邊緣。七、文字說(shuō)明及其透明效果。1、位于所
19、有圖形之前,窗口右上角邊緣附近。2、透明效果良好。實(shí)驗(yàn)討論:一、關(guān)于OpenGL框架。1、老師給的框架無(wú)法直接實(shí)現(xiàn)鍵盤(pán)控制功能,所以選用了計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)教程(OpenGL版)中的簡(jiǎn)單框架。2、在OpenGL框架下,只需要增加一些全局變量,修改少數(shù)幾個(gè)函數(shù)的內(nèi)容即可實(shí)現(xiàn)繪圖及控制功能。如在Initialize()函數(shù)中初始化窗口環(huán)境,在DrawSceneGL()中繪制圖形和其他效果,在Update()中設(shè)置鍵盤(pán)實(shí)時(shí)控制。3、但是在這個(gè)VC環(huán)境的框架下,每個(gè)函數(shù)分別實(shí)現(xiàn)了不同的功能,不可混用。Initialize()只在創(chuàng)建窗口時(shí)調(diào)用一次,DrawSceneGL()在整個(gè)程序運(yùn)行過(guò)程中被反復(fù)調(diào)用
20、,而Update()則在有鍵盤(pán)動(dòng)作時(shí)響應(yīng)。剛開(kāi)始時(shí)將LoadTexture()函數(shù)放在DrawSceneGL()中調(diào)用,結(jié)果程序運(yùn)行是反復(fù)載入紋理貼圖,最終導(dǎo)致內(nèi)存溢出,程序崩潰。4、在OpenGL中,圖形是根據(jù)DrawSceneGL()被連續(xù)繪制的,因此動(dòng)畫(huà)控制無(wú)需用循環(huán)實(shí)現(xiàn),只需設(shè)置改變量即可。二、OpenGL是一個(gè)狀態(tài)機(jī)。1、OpenGL的整個(gè)繪制過(guò)程時(shí)刻貫穿著“狀態(tài)機(jī)”的思想,強(qiáng)調(diào)的是“當(dāng)前狀態(tài)”。即在每一個(gè)圖形的繪制之前必須先設(shè)置好各種繪制狀態(tài),如視圖屬性、光照效果、貼圖功能、透明模式等等,圖形的繪制都是根據(jù)當(dāng)前的繪制狀態(tài)進(jìn)行繪制的。2、我們可以將OpenGL設(shè)想成為一臺(tái)機(jī)器,機(jī)器上許多狀態(tài)開(kāi)關(guān),當(dāng)我們?cè)O(shè)定好一組狀態(tài)組合之后,就可以開(kāi)始繪制。在工作過(guò)程中,機(jī)器根據(jù)狀態(tài)組合進(jìn)行實(shí)時(shí)計(jì)算,得到被繪制圖形上各個(gè)點(diǎn)的實(shí)際顯示結(jié)果。繪制完成后可以重新設(shè)定狀態(tài)組合,進(jìn)行另一輪的圖形繪制,但無(wú)法對(duì)已經(jīng)繪制
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度食堂廢棄物處理與資源化利用合同6篇
- 2025年度太空水實(shí)驗(yàn)研究用純凈水源采購(gòu)合同3篇
- 二零二五年度秀嶼區(qū)文印中心承包協(xié)議6篇
- 2025年教科新版八年級(jí)科學(xué)下冊(cè)階段測(cè)試試卷
- 2025年上外版必修1化學(xué)上冊(cè)月考試卷含答案
- 2025年滬教版第二冊(cè)歷史上冊(cè)月考試卷
- 2025年人教新課標(biāo)七年級(jí)英語(yǔ)上冊(cè)階段測(cè)試試卷含答案
- 2025年冀教版五年級(jí)語(yǔ)文下冊(cè)月考試卷含答案
- 2024年滬教版選修3物理上冊(cè)階段測(cè)試試卷
- 2025年人教新起點(diǎn)高一生物下冊(cè)月考試卷含答案
- 環(huán)衛(wèi)項(xiàng)目年終工作總結(jié)
- (高清版)DZT 0432-2023 煤炭與煤層氣礦產(chǎn)綜合勘查規(guī)范
- 郵政儲(chǔ)蓄銀行-客戶經(jīng)理(個(gè)人消費(fèi)貸款)-試題+答案
- 中國(guó)專(zhuān)利獎(jiǎng)申報(bào)要點(diǎn)
- 2024年大學(xué)試題(宗教學(xué))-佛教文化筆試歷年真題薈萃含答案
- 《中外美術(shù)鑒賞》課件西方美術(shù)鑒賞導(dǎo)論
- 中小學(xué)教師違反職業(yè)道德行為處理辦法
- 梁平法制圖規(guī)則及鋼筋翻樣講解
- 乙肝 丙肝培訓(xùn)課件
- 責(zé)任制整體護(hù)理護(hù)理
- 2024屆湖北省武漢實(shí)驗(yàn)外國(guó)語(yǔ)學(xué)校數(shù)學(xué)七上期末統(tǒng)考模擬試題含解析
評(píng)論
0/150
提交評(píng)論