基于OpenGL水波模擬論文_第1頁(yè)
基于OpenGL水波模擬論文_第2頁(yè)
基于OpenGL水波模擬論文_第3頁(yè)
基于OpenGL水波模擬論文_第4頁(yè)
基于OpenGL水波模擬論文_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 PAGE28 / NUMPAGES31論文題目: 基于OpenGL的水波動(dòng)畫模擬系 別:_ _計(jì)算機(jī)系_ Wave simulation based on OpenGLCollege:Specialty and Grade:Number:Name: Advisor:Submitted time: May 7, 20目錄TOC o 1-4 h z u HYPERLINK l _Toc31113 1.1 課題提出的背景 PAGEREF _Toc31113 3 HYPERLINK l _Toc2201 1.1.2 課題的意義 PAGEREF _Toc2201 3 HYPERLINK l _Toc2

2、9345 1.2 國(guó)外研究現(xiàn)狀 PAGEREF _Toc29345 3 HYPERLINK l _Toc9490 1.2.1 四大類水波模擬的方法 PAGEREF _Toc9490 3 HYPERLINK l _Toc22933 1.2.2水波模擬面臨的困難 PAGEREF _Toc22933 4 HYPERLINK l _Toc16439 1.2.3 國(guó)水波動(dòng)畫模擬相關(guān)研究 PAGEREF _Toc16439 4 HYPERLINK l _Toc2233 1.2.4 國(guó)外水波動(dòng)畫模擬相關(guān)研究 PAGEREF _Toc2233 5 HYPERLINK l _Toc24366 第二章 基于Ope

3、nGLMFC建?;A(chǔ) PAGEREF _Toc24366 7 HYPERLINK l _Toc7252 2.3 OpenGL渲染管線 PAGEREF _Toc7252 8 HYPERLINK l _Toc29190 2.3.1 顯示列表 PAGEREF _Toc29190 8 HYPERLINK l _Toc7539 2.3.2 求值器 PAGEREF _Toc7539 8 HYPERLINK l _Toc22992 2.3.3 基于頂點(diǎn)的操作 PAGEREF _Toc22992 9 HYPERLINK l _Toc23608 2.3.4 圖元裝配 PAGEREF _Toc23608 9 HY

4、PERLINK l _Toc5175 2.3.5像數(shù)操作 PAGEREF _Toc5175 9 HYPERLINK l _Toc15749 2.3.6紋理裝配 PAGEREF _Toc15749 9 HYPERLINK l _Toc24809 2.3.7光柵化 PAGEREF _Toc24809 9 HYPERLINK l _Toc8002 2.3.8片段操作 PAGEREF _Toc8002 9 HYPERLINK l _Toc5981 2.4計(jì)算機(jī)圖形學(xué) PAGEREF _Toc5981 10 HYPERLINK l _Toc20361 2.3 MFC框架 PAGEREF _Toc2036

5、1 10 HYPERLINK l _Toc22457 2.4基于OpenGL+MFC的三維模擬的編程環(huán)境配置 PAGEREF _Toc22457 12 HYPERLINK l _Toc13951 第三章 水波的計(jì)算機(jī)模擬原理和關(guān)鍵技術(shù) PAGEREF _Toc13951 14 HYPERLINK l _Toc22493 3.1水的流體物理性質(zhì) PAGEREF _Toc22493 14 HYPERLINK l _Toc4003 3.2 基本原理 PAGEREF _Toc4003 16 HYPERLINK l _Toc21988 3.2.1 建立區(qū)域采樣法水波數(shù)學(xué)模型 PAGEREF _Toc21

6、988 16 HYPERLINK l _Toc14035 3.2.2 水波擴(kuò)散分析與解決方法 PAGEREF _Toc14035 16 HYPERLINK l _Toc17311 第四章 基于OpenGL的水波模擬 PAGEREF _Toc17311 17 HYPERLINK l _Toc28259 4.1 系統(tǒng)設(shè)計(jì) PAGEREF _Toc28259 17 HYPERLINK l _Toc6857 4.2 水波模擬的算法設(shè)計(jì) PAGEREF _Toc6857 17 HYPERLINK l _Toc28405 4.3 擾動(dòng) PAGEREF _Toc28405 21 HYPERLINK l _T

7、oc2058 44 水波模擬系統(tǒng)的邏輯視圖 PAGEREF _Toc2058 21 HYPERLINK l _Toc22253 4.5 主要結(jié)構(gòu)體和類的設(shè)計(jì): PAGEREF _Toc22253 23 HYPERLINK l _Toc19215 4.5 實(shí)驗(yàn)結(jié)果 PAGEREF _Toc19215 24 HYPERLINK l _Toc32443 第五章結(jié)論與展望 PAGEREF _Toc32443 27 HYPERLINK l _Toc23600 5.1 結(jié)論 PAGEREF _Toc23600 27 HYPERLINK l _Toc8279 5.2展望 PAGEREF _Toc8279 2

8、7 HYPERLINK l _Toc11392 參考文獻(xiàn) PAGEREF _Toc11392 28摘要近年來(lái), 自然景物的模擬一直是計(jì)算機(jī)圖形學(xué)最具挑戰(zhàn)的問(wèn)題之一, 關(guān)于山、水等自然景物的模擬, 在計(jì)算機(jī)游戲、影視、廣告各領(lǐng)域中有著廣泛的用途, 作為自然景物模擬的重要容, 對(duì)水流、水波的模擬正日益引起人們的關(guān)注.。本論文通過(guò)對(duì)國(guó)外水波動(dòng)畫模擬的相關(guān)成就的介紹,與對(duì)其的一定了解和文獻(xiàn)的參考,基本實(shí)現(xiàn)了水波的模擬,基于opengl+MFC建模基礎(chǔ)展開(kāi)探討,對(duì)水波的計(jì)算模擬原理和關(guān)鍵技術(shù)進(jìn)行闡述,例如水波的物理模型,運(yùn)動(dòng)方程,物理特性等,結(jié)合以上知識(shí)進(jìn)行水波模擬,實(shí)驗(yàn)證明該方法實(shí)現(xiàn)簡(jiǎn)單,模擬的水波動(dòng)

9、畫效果滿足實(shí)時(shí)性和逼真性的要求。關(guān)鍵詞: 水波模擬; 物理模型; opengl; 運(yùn)動(dòng)方程;Abstract:In recent years, the impersonation of natural landscape has been a computer graphics the most challenging problems, one of the hills, waters and natural scenery, in computer games, advertising film, the area has an extensive use of natural scene

10、ry as an important part of a simulation of the water, water was increasingly a cause for concern.This paper with animated simulations water through the achievement of its introduction, and be sure to understand and the reference, the water, based on the modeling opengl mfc based on the water, the im

11、personation and the key technologies, such as water physical model, the equation of motion, physical properties, etc, the more knowledge on the corrugated, experiments prove this method to process of animation, the effect of water content timely and accurate sexualKeywords: the corrugated; the physi

12、cal models to simulate; opengl; equation of motion; 第一章 緒論OpenGL 是由Silicon Graphics 公司推出的一種高性能圖形開(kāi)發(fā)軟件工具包,該工具包括大約120 條不同的指令,它獨(dú)立于硬件,獨(dú)立于窗口系統(tǒng),由于具有這個(gè)優(yōu)越的特性,因此可以運(yùn)行于各種操作系統(tǒng),而且可以在各個(gè)平臺(tái)之間進(jìn)行移植,并且能在網(wǎng)絡(luò)環(huán)境下以客戶/服務(wù)器模式工作,已經(jīng)成為專業(yè)圖形處理、科學(xué)計(jì)算等高端應(yīng)用領(lǐng)域的標(biāo)準(zhǔn)圖形庫(kù),因此Microsoft,SGI,IBM 等在計(jì)算機(jī)市場(chǎng)中占主導(dǎo)地位的大公司都用它作為自己的標(biāo)準(zhǔn)圖形庫(kù)課題提出的背景通過(guò)計(jì)算機(jī)盡可能逼真的模擬現(xiàn)

13、實(shí)世界,一直是計(jì)算機(jī)圖形學(xué),特別是虛擬現(xiàn)實(shí)技術(shù)的一個(gè)研究熱點(diǎn)。對(duì)于地形的綿延起伏、光的折射和反射等自然現(xiàn)象的模擬,人們可以根據(jù)一些現(xiàn)有的不太復(fù)雜的數(shù)學(xué)公式,通過(guò)數(shù)學(xué)建模來(lái)獲得某種特定的效果。但是對(duì)于另外一些自然現(xiàn)象,例如各種煙霧,水,火焰等流體現(xiàn)象,雖然看似簡(jiǎn)單,但是對(duì)其進(jìn)行描述的物理模型卻極其復(fù)雜,這時(shí)只有去追溯該現(xiàn)象本身的物理根源,并借助更為精確的物理描述才能真實(shí)再現(xiàn)其外在的視覺(jué)效果。水波模擬不僅是一個(gè)很具有挑戰(zhàn)性的研究課題,更具有很好的商業(yè)價(jià)值,它在航海仿真、虛擬城市游覽、視頻游戲、數(shù)字電影和數(shù)字廣告中都有大量應(yīng)用。一片逼真自然的水面可以很好的增加場(chǎng)景的逼真感和沉浸感。目前的一些三維圖形

14、軟件產(chǎn)品已經(jīng)有不少包含了流體模擬的模塊,如Maya里面的MayaFluid EffectsTM;3DS Max提供的glu3D流體插件;Next Limit推出的RealFlow和RealWave獨(dú)立軟件包更是出類拔萃,被稱為PC機(jī)上最好的兩種流體動(dòng)力學(xué)模擬軟件。但是他們只是流體的圖形建模工具。1.1.2 課題的意義從一杯純凈的清水到潺潺的小溪,從微波起伏的湖面到巨浪滔天的海洋,這些日常生活中看似十分平常的東西,在計(jì)算機(jī)圖形學(xué)和虛擬現(xiàn)實(shí)技術(shù)研究者的眼中看來(lái),與模擬地形、雨雪等其他自然景觀相比較,模擬流體更具有挑戰(zhàn)性。究其原因,主要流體的形體多變,沒(méi)有一個(gè)固定的形狀,很難用一個(gè)通用的方程來(lái)表示;

15、物理模型極其復(fù)雜,其波動(dòng)是受到重力、摩擦力、粘滯力等各種力的綜合影響;力學(xué)方程的數(shù)學(xué)表達(dá)式多為偏微分方程,求解難度大,計(jì)算復(fù)雜;具有復(fù)雜的光學(xué)效果,如水的透明度、折射和反射等。雖然具有挑戰(zhàn)性,但方法總比問(wèn)題多。早期我們使用波形函數(shù)模擬簡(jiǎn)單的水面波動(dòng),隨著計(jì)算機(jī)硬件水平的發(fā)展和研究技術(shù)的進(jìn)步,如今可以根據(jù)流體的物理模型,使用數(shù)值方法模擬真實(shí)感很強(qiáng)的三維流體。近年來(lái),計(jì)算機(jī)圖形學(xué)的發(fā)展突飛猛進(jìn)并有著極為廣泛的用途. 計(jì)算機(jī)圖形學(xué)的發(fā)展使得三維表現(xiàn)技術(shù)得以形成,所謂計(jì)算機(jī)三維圖形就是指將用數(shù)據(jù)描述的三維空間通過(guò)計(jì)算轉(zhuǎn)換成三維圖像并顯示或打印出來(lái)的技術(shù),OPENGL 就是支持計(jì)算機(jī)三維圖形的一個(gè)程序庫(kù)

16、. 在計(jì)算機(jī)圖形學(xué)中,模擬水流動(dòng)畫是一個(gè)很有意義的課題.1.2 國(guó)外研究現(xiàn)狀1.2.1 四大類水波模擬的方法目前水波動(dòng)畫的模擬方法大體上可以分為四大類:第一類:基于波的分析方法。這類方法直接構(gòu)造參數(shù)曲面來(lái)代表水表面,參數(shù)曲面由波形函數(shù)表示,也就是說(shuō)這一類方法通過(guò)直接模擬波屬性來(lái)得到水波的水波圖像,可以模擬雨點(diǎn)造成的水波,微風(fēng)造成的漣漪和紊亂的短波峰,但是解決不了水流的形體的破碎問(wèn)題.第二類:基于物理模型的方法。基于物理模型的基本思路是用物理規(guī)律約束物體的運(yùn)動(dòng),然后用圖形學(xué)方法把物體形狀渲染出來(lái),這種方法可以保證物體的動(dòng)態(tài)逼真性,也可以輕松地制作出逼真的動(dòng)畫來(lái),這方面的典是Navier-Stok

17、es方程.它有很強(qiáng)的物理背景,是當(dāng)今非淺性科學(xué)研究中的重點(diǎn)和熱點(diǎn)問(wèn)題. 若使用這種方法建立淺水波模型,再使用計(jì)算流體動(dòng)力學(xué)的數(shù)值分析工具來(lái)求取方程數(shù)值解,這個(gè)方法過(guò)于復(fù)雜且對(duì)光影處理能力差.第三類:基于粒子系統(tǒng)的方法,這類方法把流體看作離散的粒子集,粒子有一定的屬性,使用這種方法人們成功地描述了瀑布、噴泉、水滴以與浪花飛沫.第四類:基于光影處理的方法。這類方法專注于模擬水流的光影特效,能出色地模擬人們從水底和水上觀察照射在水波上形成的光與影現(xiàn)象.這方面的工作把注意力集中到如何模擬光線和水流的作用效果上來(lái),無(wú)法兼顧水流的其他特性.1.2.2水波模擬面臨的困難水波有一系列特性,如擴(kuò)散、衰減、折射以

18、與反射等,我們需要了解這些特性以與我們所面臨的問(wèn)題,我們所面臨的問(wèn)題主要有:(1) 對(duì)波的模擬,水波是水流運(yùn)動(dòng)的關(guān)鍵屬性,當(dāng)水流受到各種外部與部物體的作用時(shí),會(huì)產(chǎn)生波,并且在水流部傳播,視覺(jué)上表現(xiàn)為水表面上的波紋和漩渦;(2) 光與影的處理,水是透明的,它的視覺(jué)印象很大程度上取決于周圍的環(huán)境,另外水對(duì)光的折射作用使水中的光影效果復(fù)雜多變;(3) 水流形體的繪制,水的形狀是不確定,易于改變,一方面,若把水的形狀看成一個(gè)高度場(chǎng)表示的曲面,則無(wú)法表現(xiàn)水流的破碎以與卷曲的波紋,另一方面若把水看成由許多水粒子組成的點(diǎn)集,又面臨如何進(jìn)行可視化的問(wèn)題;(4) 水流與外界物體的相互作用,當(dāng)一個(gè)物體掉入水中或水

19、有物體在運(yùn)動(dòng)水流會(huì)受到怎樣的影響1.2.3 國(guó)水波動(dòng)畫模擬相關(guān)研究上述的水面模擬方法都有一個(gè)共同的不足,那就是不能描述水體的自由流動(dòng)和水面的劇烈變形,如波浪破碎等。為了克服這種缺陷,有研究者提出了采用粒子系統(tǒng)的方法來(lái)實(shí)現(xiàn),但是畢竟真實(shí)感還是不夠。隨著計(jì)算機(jī)處理能力的增強(qiáng)和計(jì)算流體動(dòng)力學(xué)的廣泛應(yīng)用,以與對(duì)模擬結(jié)果真實(shí)感的追求,近年來(lái)國(guó)外對(duì)流體模擬的研究都轉(zhuǎn)向了基于物理的流體模擬,因?yàn)榛谖锢矸椒ㄋ玫降脑囼?yàn)結(jié)果,相對(duì)于基于參數(shù)建模方法所得到的結(jié)果,不僅真實(shí)感要好上許多,而且可以實(shí)現(xiàn)流體表面的自由流動(dòng)和劇烈變形效果,如流體飛濺,表面破碎,以與泡沫等,這是后者所難以企與的。基于物理的方法主要分為兩種

20、:一種是基于網(wǎng)格的歐拉法,它從研究流體所占據(jù)的空間中各個(gè)固定點(diǎn)處的運(yùn)動(dòng)著手,分析運(yùn)動(dòng)流體所充滿的空間中每一個(gè)固定點(diǎn)上流體的速度、壓強(qiáng)、密度等參數(shù)隨時(shí)間的變化情況,以與研究由某一空間點(diǎn)轉(zhuǎn)到另一空間點(diǎn)時(shí)這些參數(shù)的變化情況;另一種方法是基于粒子方法的拉格朗日方法,研究流體中某一指定微團(tuán)的速度、壓強(qiáng)、密度等描述流體運(yùn)動(dòng)的參數(shù)隨時(shí)間的變化情況,以與研究由一個(gè)流體微團(tuán)轉(zhuǎn)到其他流體微團(tuán)時(shí)參數(shù)的變化情況,以此建立整個(gè)流體的運(yùn)動(dòng)仿真。雖然我國(guó)計(jì)算機(jī)圖形學(xué)和虛擬現(xiàn)實(shí)技術(shù)的研究起步晚于歐美發(fā)達(dá)國(guó)家,但是近年來(lái)國(guó)虛擬現(xiàn)實(shí)技術(shù),特別是視頻游戲的快速發(fā)展,促進(jìn)了我國(guó)水波模擬研究和技術(shù)的進(jìn)步,也取得了很多的成績(jī)。懷平根據(jù)小

21、振幅波理論文獻(xiàn)1中,水波的波形近似成正弦分布這一理論并結(jié)合細(xì)胞自動(dòng)機(jī)的模型,采用鄰域傳播的思想對(duì)水波進(jìn)行動(dòng)態(tài)建模,可以構(gòu)造出不同鄰域下水波演變的細(xì)胞自動(dòng)機(jī)模型。并且采用以POINT圖元為基本粒子的粒子系統(tǒng),對(duì)水花效果進(jìn)行實(shí)時(shí)的模擬。為將水波和浪花逼真地結(jié)合在一起,作者運(yùn)用色彩融和的技術(shù)來(lái)完成浪花的顯示。實(shí)踐證明用該算法模擬水波,既不需要特意構(gòu)造具體的波形函數(shù),也不用求解復(fù)雜的納維一斯托克斯方程,就能夠在普通的PC平臺(tái)上實(shí)現(xiàn)效果比較真實(shí)的水面模擬。夏青利用柏林噪聲函數(shù)生成的高度場(chǎng)為海浪中的每個(gè)頂點(diǎn)提供高度采樣源,同時(shí)針對(duì)海浪仿真中計(jì)算機(jī)量大的問(wèn)題,又提出一種實(shí)時(shí)繪制可見(jiàn)梯形圍技術(shù),解決海浪仿真中

22、數(shù)據(jù)量大的問(wèn)題,確保實(shí)時(shí)仿真和逼真的視覺(jué)效果,同時(shí)使用菲涅爾效果,將反射和折射效果混合在一起,增強(qiáng)海浪起伏的真實(shí)感。王勝正在以往水波模型研究的基礎(chǔ)上,根據(jù)海浪的形態(tài),充分考慮各種隨機(jī)參數(shù),建立一個(gè)高性能的基于統(tǒng)計(jì)模型與FFT的波浪生成方法,模擬船舶在海浪中航行的各種特殊效果。軍采用Gerstner-Rankine模型,引入概率統(tǒng)計(jì)思想,借鑒了映射網(wǎng)格的方法,采用視點(diǎn)相關(guān)的圓形網(wǎng)格,代替?zhèn)鹘y(tǒng)的普通網(wǎng)格完成水面高度場(chǎng)的采樣,且能支持實(shí)時(shí)動(dòng)態(tài)連續(xù)分辨率水波表現(xiàn)的建模和繪制。邱捷利用水波物理模型模擬海面運(yùn)動(dòng),該方法實(shí)現(xiàn)簡(jiǎn)單,而且擁有良好的性能,適合于三維游戲引擎。鵬,立朝等另辟新徑,在優(yōu)化算法的同時(shí),

23、重點(diǎn)對(duì)規(guī)則水波模型算法進(jìn)行了研究,采用計(jì)算和顯示分開(kāi)的策略,預(yù)先產(chǎn)生大量水波數(shù)據(jù)予以保存,然后在渲染時(shí)再調(diào)用這些數(shù)據(jù)實(shí)現(xiàn)了三維規(guī)則水面波浪的繪制與仿真,該方法的優(yōu)點(diǎn)是既滿足顯示質(zhì)量的要求,又滿足實(shí)時(shí)性要求,但由于波浪數(shù)據(jù)是預(yù)先生成的,沒(méi)有考慮隨機(jī)擾動(dòng)等外界干擾。1.2.4 國(guó)外水波動(dòng)畫模擬相關(guān)研究技術(shù)發(fā)達(dá)的歐美國(guó)家很早就開(kāi)展了對(duì)海洋和湖面這類廣域水面水波模擬的研究,也一直走在流體模擬研究的前列,很多新穎的模擬方法都是由國(guó)外學(xué)者提出來(lái)的。早期水波模擬方法主要采用參數(shù)建模方式,通過(guò)直接構(gòu)造參數(shù)曲面來(lái)表示水面。早在1809年Gerstner1提出了GerstIler模型用于海浪建模,采用波函數(shù)來(lái)模擬

24、海面高低起伏的運(yùn)動(dòng)。1863年Rankine又對(duì)這一模型進(jìn)行改進(jìn)和完善,后人稱之為Gerstner-Rankine模型。概略地講,這一模型描述沿圓形或橢圓形固定軌道運(yùn)轉(zhuǎn)的水粒子。由表面中的每一個(gè)粒子沿著其靜止位置點(diǎn)作圓周運(yùn)動(dòng)。假設(shè)海平面靜止時(shí)是XY平面,Z軸指向朝上,一個(gè)粒子的運(yùn)動(dòng)方程為: (1-1) (1-2)該方法不需要大量的網(wǎng)格轉(zhuǎn)換計(jì)算,但需要合理地調(diào)整參數(shù)和添加一些背景噪聲。為增加逼真度,Gerstner-Rankine模型往往采用疊加不同頻率的波形函數(shù)和增加網(wǎng)格頂點(diǎn)方法,因此計(jì)算量也隨之增大,另外一個(gè)不足之處是對(duì)于不同的波形需要重新定義不同波形函數(shù),缺乏通用性??焖俑道锶~變換(Fas

25、t Foumier Transformation,F(xiàn)FT)可實(shí)現(xiàn)時(shí)域到頻域的變換,在很多領(lǐng)域有廣泛的應(yīng)用。Jensen2、Tessendorf3、Fredrik Limsater4分別詳細(xì)描述了利用海洋統(tǒng)計(jì)和經(jīng)驗(yàn)?zāi)P?,通過(guò)FFT合成一個(gè)類似海浪譜分布的高度場(chǎng)模擬海浪的方法,此方法的模擬的海面場(chǎng)景是目前參數(shù)法當(dāng)中真實(shí)感是最強(qiáng)的,也是當(dāng)今運(yùn)用最廣泛的水面建模方法。相信很多人都看過(guò)“泰坦尼克號(hào)和“新海神號(hào)歷險(xiǎn)記”這兩部電影,對(duì)電影中那鋪天蓋地的海水吞沒(méi)泰坦尼克號(hào)和海神號(hào)時(shí)的場(chǎng)景肯定印象深刻。其實(shí)那些海水都是使用快速傅里葉變換的方法模擬出來(lái)的。但由于在合成過(guò)程中常采用規(guī)則矩形粗網(wǎng)格來(lái)完成實(shí)時(shí)繪制和避免

26、FFT方法產(chǎn)生的視覺(jué)上明顯的重復(fù)性,從而降低了圖像的質(zhì)量和真實(shí)感。另一個(gè)不足之處就是因?yàn)榱黧w表面的網(wǎng)格點(diǎn)只能在其起始位置附近運(yùn)動(dòng),無(wú)法模擬波浪破碎和水沫效果。需要借助粒子系統(tǒng)解決,將粒子系統(tǒng)放在水面與岸相撞擊的地方,以粒子來(lái)模擬浪花和泡沫,提高模擬的真實(shí)感。海洋統(tǒng)計(jì)學(xué)研究指出,海面波浪的起伏運(yùn)動(dòng)是一個(gè)服從正態(tài)分布的隨機(jī)過(guò)程,而且具有各態(tài)歷經(jīng)性,因此服從高斯分布的噪聲函數(shù)開(kāi)始在大規(guī)模水面模擬中得到了廣泛的應(yīng)用。1985年P(guān)erlin提出柏林噪聲函數(shù)。該函數(shù)是能夠在空間中產(chǎn)生連續(xù)噪聲的函數(shù)。通過(guò)疊加不同層次的噪聲函數(shù)可以很好的模擬自然現(xiàn)象中的分層現(xiàn)象,在地形生成5,立體云模擬6和水面模擬當(dāng)中應(yīng)用廣

27、泛。在水面模擬當(dāng)中可通過(guò)柏林噪聲函數(shù)來(lái)構(gòu)造海面高度場(chǎng),模擬水面的隨機(jī)起伏,例如Johanson7引入投影網(wǎng)格的概念,在后透視空間構(gòu)造海面網(wǎng)格,并通過(guò)Pedin噪聲的疊加來(lái)構(gòu)建海面高度場(chǎng)。Lawrence MLachman8則借鑒了LOD這一有效的場(chǎng)景管理方式,提出了一種多層次開(kāi)放式結(jié)構(gòu)對(duì)海水進(jìn)行建模,通過(guò)使用多層次多分辨率方法在GPU上實(shí)現(xiàn)海浪模擬,提高了渲染速度。海面波浪的運(yùn)動(dòng)具有一定的物理規(guī)律,因此基于物理模型的海洋模擬是近年來(lái)海面模擬的一個(gè)研究熱點(diǎn)。Simon Premoze9提出了一種新的基于物理模型的大面積水面(如海面,湖泊水面)產(chǎn)生方法,作者根據(jù)海洋學(xué)的觀察數(shù)據(jù)實(shí)時(shí)生成波浪,并且通

28、過(guò)幾個(gè)簡(jiǎn)單又具有物理意義的參數(shù),如風(fēng)速,風(fēng)向來(lái)控制波浪。同時(shí)還考慮光在水中傳播的物理特性,在不同天氣環(huán)境和光照下,水體也呈現(xiàn)不同的顏色,最終的模擬效果十分逼真。隨著可編程GPU的出現(xiàn),GPU的運(yùn)用已不僅僅是3D加速和渲染,已經(jīng)有很多研究者開(kāi)始利用GPU的強(qiáng)大計(jì)算能力來(lái)加速計(jì)算。針對(duì)FFT計(jì)算量大的缺陷,Jason LMiteheU10提出了一種基于GPU的傅里葉域多邊帶(multiband Fourier domain)方法,模擬了廣袤海洋場(chǎng)景。第二章 基于OpenGLMFC建模基礎(chǔ)2.1 OpenGL簡(jiǎn)介OpenGL(全寫Open Graphics Library)是個(gè)定義了一個(gè)跨編程語(yǔ)言、

29、 HYPERLINK ://zh-cn/%E8%B7%A8%E5%B9%B3%E5%8F%B0 o 跨平臺(tái) 跨平臺(tái)的 HYPERLINK ://zh-cn/%E7%BC%96%E7%A8%8B%E6%8E%A5%E5%8F%A3 o 編程接口 編程接口(Application programming interface)的規(guī)格,它用于生成 HYPERLINK ://zh-cn/%E4%BA%8C%E7%BB%B4%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9B%BE%E5%BD%A

30、2 o 二維計(jì)算機(jī)圖形 二維、 HYPERLINK ://zh-cn/%E4%B8%89%E7%B6%AD%E8%A8%88%E7%AE%97%E6%A9%9F%E5%9C%96%E5%BD%A2 o 三維計(jì)算機(jī)圖形 三維圖像。這個(gè)接口由近三百五十個(gè)不同的函數(shù)調(diào)用組成,用來(lái)從簡(jiǎn)單的圖元繪制復(fù)雜的三維景象。而另一種編程接口系統(tǒng)是僅用于 HYPERLINK ://zh-cn/Microsoft_Windows o Microsoft Windows Microsoft Windows上的 HYPERLINK :/zh.wikipedi

31、/zh-cn/Direct3D o Direct3D Direct3D。 OpenGL常用于 HYPERLINK ://zh-cn/CAD o CAD CAD、 HYPERLINK ://zh-cn/%E8%99%9B%E6%93%AC%E5%AF%A6%E5%A2%83 o 虛擬實(shí)境 虛擬實(shí)境、科學(xué)可視化程序和 HYPERLINK ://w/index.php?title=%E9%9B%BB%E5%AD%90%E9%81%8A%E6%88%B2%E9%96%8B%E7%99%BC&act

32、ion=edit&redlink=1 o 電子游戲開(kāi)發(fā)(尚未撰寫) 電子游戲開(kāi)發(fā)。OpenGL的高效實(shí)現(xiàn)(利用了圖形加速硬件)存在于 HYPERLINK ://zh-cn/Microsoft_Windows o Microsoft Windows Windows,很多 HYPERLINK ://zh-cn/UNIX o UNIX UNIX平臺(tái)和 HYPERLINK ://zh-cn/MacOS o MacOS MacOS。這些實(shí)現(xiàn)一般由顯示設(shè)備廠商提供,而且非常依賴于該廠商提供的硬件。 HYPERL

33、INK ://zh-cn/%E9%96%8B%E6%94%BE%E5%8E%9F%E5%A7%8B%E7%A2%BC o 開(kāi)放源代碼 開(kāi)放源代碼庫(kù) HYPERLINK ://zh-cn/Mesa_library o Mesa library Mesa是一個(gè)純基于軟件的圖形API,它的代碼兼容于OpenGL。但是,由于許可證的原因,它只聲稱是一個(gè)“非常相似”的API。OpenGL規(guī)由 HYPERLINK ://zh-cn/1992%E5%B9%B4 o 1992年 1992年成立的OpenGL架構(gòu)評(píng)審

34、委員會(huì)(ARB)維護(hù)。ARB由一些特別興趣于建立一個(gè)統(tǒng)一的普遍可用的API的公司組成。根據(jù)OpenGL官方, HYPERLINK ://zh-cn/2002%E5%B9%B4 o 2002年 2002年 HYPERLINK ://zh-cn/6%E6%9C%88 o 6月 6月的ARB投票成員包括 HYPERLINK ://zh-cn/3Dlabs o 3Dlabs 3Dlabs、 HYPERLINK ://zh-cn/%E8%98%8B%E6%9E%9C%E5%85

35、%AC%E5%8F%B8 o 蘋果公司 Apple Computer、 HYPERLINK ://zh-cn/ATI%E6%8A%80%E8%A1%93%E5%85%AC%E5%8F%B8 o ATI技術(shù)公司 ATI Technologies、 HYPERLINK ://zh-cn/%E6%88%B4%E5%B0%94 o 戴爾 Dell Computer、 HYPERLINK ://w/index.php?title=Evans_%26_Sutherland&action=edit&redlink

36、=1 o Evans & Sutherland(尚未撰寫) Evans & Sutherland、 HYPERLINK ://zh-cn/Hewlett-Packard o Hewlett-Packard Hewlett-Packard、 HYPERLINK ://zh-cn/International_Business_Machines o International Business Machines IBM、 HYPERLINK ://zh-cn/Intel o Intel Intel、 HY

37、PERLINK ://zh-cn/Matrox o Matrox Matrox、 HYPERLINK ://zh-cn/NVIDIA o NVIDIA NVIDIA、 HYPERLINK ://zh-cn/Silicon_Graphics o Silicon Graphics SGI和 HYPERLINK ://zh-cn/Sun_Microsystems o Sun Microsystems Sun Microsystems( HYPERLINK :/zh.wiki

38、/zh-cn/Microsoft o Microsoft Microsoft曾是創(chuàng)立成員之一,但已于 HYPERLINK ://zh-cn/2003%E5%B9%B4 o 2003年 2003年 HYPERLINK ://zh-cn/3%E6%9C%88 o 3月 3月退出)。2.1 OpenGL發(fā)展歷程1992年7月,SGI公司發(fā)布了OpenGL的1.0版本,隨后又與微軟公司共同開(kāi)發(fā)了Windows NT版本的OpenGL,從而使一些原來(lái)必須在高檔圖形工作站上運(yùn)行的大型3D圖形處理軟件也可以在微機(jī)上運(yùn)用。199

39、5年OpenGL的1.1版本面市,該版本較1.0性能提高許多,并加入了一些新的功能。包括提高頂點(diǎn)位置、法線、顏色、色彩指數(shù)、紋理坐標(biāo)、多邊形邊緣標(biāo)識(shí)的傳輸速度,引入了新的紋理特性等等。1997年,Windows 95下3D游戲的大量涌現(xiàn),游戲開(kāi)發(fā)公司迫切需要一個(gè)功能強(qiáng)大、兼容性好的3D圖形接口,而當(dāng)時(shí)微軟公司自己的3D圖形接口DirectX 3.0功能卻是很糟糕。微軟公司最終在Windows 95的OSR2版和后來(lái)的Windows 版本中加入了對(duì)OpenGL的支持。這樣,不但許多支持OpenGL的電腦3D游戲得到廣泛應(yīng)用,而且許多在3D圖形設(shè)計(jì)軟件也可以運(yùn)用支持OpenGL標(biāo)準(zhǔn)的3d加速卡,大

40、大提高其3D圖形的處理速度。2003年的7月28日,SGI和ARB公布了OpenGL 1.5。OpenGL 1.5中包括OpenGL ARB的正式擴(kuò)展規(guī)格繪制語(yǔ)言“OpenGL Shading Language”。OpenGL 1.5的新功包括:頂點(diǎn)Buffer Object、Shadow功能、隱蔽查詢、非乘方紋理等。2004年8月,OpenGL2.0版本發(fā)布OpenGL 2.0標(biāo)準(zhǔn)的主要制訂者并非原來(lái)的SGI,而是逐漸在ARB中占據(jù)主動(dòng)地位的3Dlabs。opengl2.0支持OpenGL Shading Language、新的shader擴(kuò)展特性以與其他多項(xiàng)增強(qiáng)特性。2008年8月初Khr

41、onos工作組在Siggraph 2008大會(huì)上宣布了OpenGL 3.0圖形接口規(guī),GLSL1.30 shader語(yǔ)言和其他新增功能將再次未來(lái)開(kāi)放3D接口發(fā)展指明方向。OpenGL 3.0 API開(kāi)發(fā)代號(hào)為L(zhǎng)ongs Peak,和以往一樣,OpenGL 3.0仍然作為一個(gè)開(kāi)放性和跨平臺(tái)的3D圖形接口標(biāo)準(zhǔn),在Shader語(yǔ)言盛行的今天,OGL3.0增加了新版本的shader語(yǔ)言:GLSL 1.30,可以充分發(fā)揮當(dāng)前可編程圖形硬件的潛能。同時(shí),OGL3.0還引入了一些新的功能,例如頂點(diǎn)矩陣對(duì)象,全幀緩存對(duì)象功能,32bit浮點(diǎn)紋理和渲染緩存,基于阻塞隊(duì)列的條件渲染,緊湊行半浮點(diǎn)頂點(diǎn)和像素?cái)?shù)據(jù),四

42、個(gè)新壓縮機(jī)制等等。Open GL仍然是唯一能夠取代微軟對(duì)3D圖形技術(shù)的完全控制的API。它仍然具有一定的生命力,但是Silicon Graphics已經(jīng)不再以任何讓微軟不悅的方式推廣Open GL,因而它存在較高的風(fēng)險(xiǎn)。游戲開(kāi)發(fā)人員是一個(gè)有著獨(dú)立思想的群體,很多重要的開(kāi)發(fā)人員目前仍然在使用Open GL。因此,硬件開(kāi)發(fā)商正在設(shè)法加強(qiáng)對(duì)它的支持。Direct3D目前還不能支持高端的圖形設(shè)備和專業(yè)應(yīng)用; Open GL在這些領(lǐng)域占據(jù)著統(tǒng)治地位。最后,開(kāi)放源碼社區(qū)(尤其是Mesa項(xiàng)目)一直致力于為任何類型的計(jì)算機(jī)(無(wú)論它們是否使用微軟的操作系統(tǒng))提供Open GL支持。08年8月正式公布OpenGL

43、3.0版本。并且得到了nv的支持,其官方上提供針對(duì)N卡的sdk下載。2.3 OpenGL渲染管線絕大數(shù)OpenGL實(shí)現(xiàn)都有相似的操作順序,一系列相關(guān)的處理階段稱為OpenGL渲染管線。圖1顯示了這些順序,雖然并沒(méi)有嚴(yán)格規(guī)定OpenGL必須采用這樣的實(shí)現(xiàn),但它提供了一個(gè)可靠的指南,可以預(yù)測(cè)OpenGL將以什么樣的順序來(lái)執(zhí)行這些操作。圖1 OpenGL渲染管道圖1顯示了Henry Ford在福特汽車公司采用的裝配線方法,它也是OpenGL處理數(shù)據(jù)的方法。幾何數(shù)據(jù)(頂點(diǎn),直線和多邊形)所經(jīng)歷的處理階段包括求值和基于頂點(diǎn)的操作,而像素?cái)?shù)據(jù)(像素,圖像和位圖)的處理過(guò)程側(cè)有所不同。在最終的像素?cái)?shù)據(jù)寫入到

44、幀緩沖區(qū)之前,這兩種類型的數(shù)據(jù)都將經(jīng)過(guò)一樣的最終步驟(光棚化和片斷操作)。下面,詳細(xì)地介紹OpenGL渲染管線的一些關(guān)鍵階段:2.3.1 顯示列表任何數(shù)據(jù),不管它所描述的是幾何圖形還是像素,都可以保存在顯示列表(display list)中,供當(dāng)前或以后使用。當(dāng)然,我們也可以不把數(shù)據(jù)保存在顯示列表中,而是立即對(duì)數(shù)據(jù)進(jìn)行處理,這種模式也稱為立即模式(immediate mode)。當(dāng)一個(gè)顯示列表被執(zhí)行時(shí),被保存的數(shù)據(jù)就從顯示列表中取出,就像在立即模式下直接由應(yīng)用程序所發(fā)送的那樣。2.3.2 求值器所有的幾何圖元最終都要通過(guò)頂點(diǎn)來(lái)描述。參數(shù)化曲線和表面最初可能是通過(guò)控制點(diǎn)以與成為基函數(shù)(Basic

45、 function)的多項(xiàng)式函數(shù)進(jìn)行描述的。求職器提供了一種方法。根據(jù)控制點(diǎn)計(jì)算表示表面的頂點(diǎn)。這種方法是一種多項(xiàng)式映射,它可以根據(jù)控制點(diǎn)產(chǎn)生表面法線、紋理坐標(biāo)、顏色以與空間坐標(biāo)。2.3.3 基于頂點(diǎn)的操作對(duì)于頂點(diǎn)數(shù)據(jù),接下來(lái)的一個(gè)步驟就是基于頂點(diǎn)的操作,就是把頂點(diǎn)變換為圖元。有些類型的頂點(diǎn)數(shù)據(jù)(例如空間坐標(biāo))是通過(guò)一個(gè)4*4的浮點(diǎn)矩陣進(jìn)行變換的??臻g坐標(biāo)從3D世界的一個(gè)位置投影到屏幕上的一個(gè)位置。如果啟用了高級(jí)特性,這個(gè)階段將更為忙碌。如果使用了紋理,這個(gè)階段還將生成并變換紋理坐標(biāo)。如果啟用了光照,就需要綜合變換后的頂點(diǎn),表面法線,光源位置,材料屬性以與其他光照信息進(jìn)行光照計(jì)算,產(chǎn)生最終的顏

46、色值。2.3.4 圖元裝配圖元裝配的一個(gè)主要容就是剪裁,它的任務(wù)是消除位于半空間(half-space)之外的那部分幾何圖元,而這個(gè)半空間是由一個(gè)平面所定義的。點(diǎn)剪裁就是簡(jiǎn)單地接受或拒絕頂點(diǎn),直線或多邊形剪裁則可能需要添加額外的頂點(diǎn),具體取決于直線或多邊形是如何進(jìn)行剪裁的。在有些情況下,接下來(lái)需要執(zhí)行一個(gè)稱為透視除法(perspective division)的步驟。它使遠(yuǎn)處的物體看起來(lái)比近處的物體更小一些。接下來(lái)所進(jìn)行的是視口(viewport)和深度(z坐標(biāo))操作。如果啟用了剔除功能(culling)并且該圖元是個(gè)多邊形,那么它就有可能被剔除測(cè)試所拒絕。取決于多邊形模式,多邊形可能被畫成點(diǎn)

47、的形式或者直線的形式。這個(gè)階段所產(chǎn)生的結(jié)果就是完整的幾何圖元,也就是根據(jù)相關(guān)的顏色,深度(有時(shí)還有紋理坐標(biāo)值以與和光棚化處理有關(guān)的一些指導(dǎo)信息)進(jìn)行了變換和剪裁的頂點(diǎn)。2.3.5像數(shù)操作在OpenGL的渲染管線中,和單路徑的幾何數(shù)據(jù)相比,像素?cái)?shù)據(jù)所經(jīng)歷的流程有所不同。首先,來(lái)自系統(tǒng)存的一個(gè)數(shù)組中的像素進(jìn)行解包,從某種格式(像素的原始格式可能有多種)解包為適當(dāng)數(shù)量的數(shù)據(jù)成分。接著,這些數(shù)據(jù)被縮放、偏移,并根據(jù)一副像素圖進(jìn)行處理。處理結(jié)果先進(jìn)行截取,然后或者寫入到紋理存,或者發(fā)送到光棚化階段。如果像素?cái)?shù)據(jù)時(shí)從幀緩沖區(qū)讀取的,就對(duì)他們執(zhí)行像素轉(zhuǎn)換操作(縮放、偏移、映射和截取)。然后,這些結(jié)果被包裝為

48、一種適當(dāng)?shù)母袷剑⒎祷氐较到y(tǒng)存的一個(gè)數(shù)組中。OpenGL有一種特殊的像素復(fù)制操作,可以把數(shù)據(jù)從幀緩沖區(qū)復(fù)制到幀緩沖區(qū)的其他位置或紋理存中。這樣,在數(shù)據(jù)寫入到紋理存或者寫回到幀緩沖區(qū)之前,只需要進(jìn)行一道像素轉(zhuǎn)換就可以了。2.3.6紋理裝配OpenGL應(yīng)用程序可以在幾何物體上應(yīng)用紋理圖像,使它們看上去更為逼真。如果需要使用多幅紋理圖像,把它們放在紋理對(duì)象中是一種明智的做法。這樣,就可以很方便地在他們之間進(jìn)行切換。有些OpenGL實(shí)現(xiàn)擁有一些特殊的資源,可以加速紋理的處理。這種資源可能是專用的,高性能的紋理存。如果確實(shí)擁有這種存,紋理對(duì)象可能會(huì)優(yōu)先進(jìn)行處理,以控制這種有限和寶貴的資源的使用。2.3.

49、7光柵化光棚化就是把幾何數(shù)據(jù)和像素?cái)?shù)據(jù)轉(zhuǎn)換為片斷(fragment)的過(guò)程。每個(gè)片斷方塊對(duì)應(yīng)用于幀緩沖區(qū)中的一個(gè)像素。把頂點(diǎn)連接起來(lái)形成直線或者計(jì)算填充多邊形的部像素時(shí),需要考慮直線和多邊形的點(diǎn)畫模式,直線的寬度,點(diǎn)的大小,著色模型以與用于支持抗鋸齒處理的覆蓋計(jì)算。每個(gè)片斷方塊都將具有各自的顏色和深度值。2.3.8片段操作在數(shù)據(jù)實(shí)際存儲(chǔ)到幀緩沖區(qū)之前,將要執(zhí)行一系列的操作。這些操作可能會(huì)修改甚至丟棄這些片斷。所有這些操作都可以被啟用或禁用。第一個(gè)可能執(zhí)行的操作是紋理處理。在紋理存中為每個(gè)片斷生成一個(gè)紋理單元(texel,也就是紋理元素),并應(yīng)用到這個(gè)片斷上。接著可能進(jìn)行的是霧計(jì)算,然后是剪裁測(cè)

50、試,alpha測(cè)試,模板測(cè)試和深度緩沖區(qū)測(cè)試(深度緩沖區(qū)用于消除被隱藏的表面)。如果一個(gè)片斷無(wú)法通過(guò)一個(gè)啟用的測(cè)試,它的連續(xù)處理過(guò)程可能會(huì)被中斷。隨后,將要執(zhí)行的可能是混合,抖動(dòng),邏輯操作以與根據(jù)一個(gè)位掩碼的屏蔽操作。最后,經(jīng)過(guò)完整處理的片斷就被繪制到適當(dāng)?shù)木彌_區(qū),最終成為一個(gè)像素并到達(dá)它的最終目的地。2.4計(jì)算機(jī)圖形學(xué)計(jì)算機(jī)圖形學(xué)是研究怎樣用數(shù)字計(jì)算機(jī)生成、處理和顯示圖形的一門學(xué)科,1963年,伊凡.澤蘭在麻省理工學(xué)院發(fā)表了名為畫板的博士論文,標(biāo)志著計(jì)算機(jī)圖形學(xué)的正式誕生。此前的計(jì)算機(jī)主要是符號(hào)處理系統(tǒng),自從有了計(jì)算機(jī)圖形學(xué),計(jì)算機(jī)可以部分的表現(xiàn)人的右腦功能了,所以計(jì)算機(jī)圖形學(xué)的建立具有相當(dāng)

51、重要的意義。我國(guó)開(kāi)展計(jì)算機(jī)圖形設(shè)備和計(jì)算機(jī)輔助幾何設(shè)計(jì)方面的研究開(kāi)始于20世紀(jì)60年代中后期。進(jìn)入20世紀(jì)80年代以來(lái),我國(guó)在計(jì)算機(jī)圖形學(xué)領(lǐng)域無(wú)論在理論研究還是在實(shí)際應(yīng)用方面都取得了可喜的成果。計(jì)算機(jī)圖形學(xué)是伴隨著電子計(jì)算機(jī)與其外圍設(shè)備而產(chǎn)生和發(fā)展起來(lái)的,是利用計(jì)算機(jī)研究圖形的表示、生成、處理、顯示的學(xué)科。經(jīng)過(guò)30多年的發(fā)展,計(jì)算機(jī)圖形學(xué)已成為計(jì)算機(jī)科學(xué)中,最為活躍的分支之一,并得到廣泛的應(yīng)用。計(jì)算機(jī)圖形學(xué)的研究領(lǐng)域非常廣泛,包括幾何和自然景象模型的建立、彩色真實(shí)感圖形的生成、交互技術(shù)、人機(jī)界面、圖形系統(tǒng)標(biāo)準(zhǔn)等。他的主要應(yīng)用圍包括計(jì)算機(jī)輔助設(shè)計(jì)與制造、作戰(zhàn)指揮和軍事訓(xùn)練、計(jì)算機(jī)動(dòng)畫與藝術(shù)以與地

52、形地貌和自然資源圖等。計(jì)算機(jī)圖形學(xué)前沿的研究課題包括科學(xué)計(jì)算的可視化、虛擬現(xiàn)實(shí)技術(shù)、基于物理規(guī)律的幾何造型、自然景象的模擬、計(jì)算機(jī)動(dòng)畫以與利用并行處理技術(shù)提高真實(shí)感圖形的現(xiàn)實(shí)處理速度等。隨著計(jì)算機(jī)系統(tǒng)、圖形輸入、圖形輸出設(shè)備的發(fā)展,計(jì)算機(jī)圖形軟件有了很大的發(fā)展。在這基礎(chǔ)上,計(jì)算機(jī)圖形學(xué)所設(shè)計(jì)的算法通過(guò)了幾十年熱烈的討論和探索,也越來(lái)越豐富和完善。計(jì)算機(jī)圖形學(xué)設(shè)計(jì)的算法非常豐富,大致可分為以下幾類:(1)基本圖元素的生成算法,如生成直線、圓弧、二次曲線、區(qū)域填色、反走樣等。(2)基本圖元素的幾何變換、投影變換、裁剪等。(3)圖元素(點(diǎn)、線、環(huán)、面、體)的求交與分類以與集合運(yùn)算。(4)自由曲線和曲

53、面的生成、插值、拼接、分解等。(5)隱藏面和隱藏線的消除以與具有光照顏色效果的真是圖形顯示。(6)不同字體的點(diǎn)陣表示,矢量中、西文字符的生成與變換。(7)模糊景物的生成。(8)三維或高維數(shù)據(jù)場(chǎng)的可視化。(9)三維形體的實(shí)時(shí)顯示和圖形的并行處理。(10)虛擬現(xiàn)實(shí)環(huán)境的生成與其控制算法等。圍繞著寫算法,多年來(lái)發(fā)表了很多論文,有些算法越來(lái)越完善,甚至實(shí)現(xiàn)了固化。然而有些算法還不是十分理想,可以進(jìn)行適當(dāng)?shù)男薷膩?lái)進(jìn)一步提高其效率。2.3 MFC框架一MFC概述 MFC是一個(gè)編程框架 MFC (Microsoft Foundation Class Library) 中的各種類結(jié)合起來(lái)構(gòu)成了一個(gè)應(yīng)用程序框架

54、,它的目的就是讓程序員在此基礎(chǔ)上來(lái)建立Windows下的應(yīng)用程序,這是一種相對(duì)SDK來(lái)說(shuō)更為簡(jiǎn)單的方法。因?yàn)榭傮w上,MFC框架定義了應(yīng)用程序的輪廓,并提供了用戶接口的標(biāo)準(zhǔn)實(shí)現(xiàn)方法,程序員所要做的就是通過(guò)預(yù)定義的接口把具體應(yīng)用程序特有的東西填入這個(gè)輪廓。Microsoft Visual C+提供了相應(yīng)的工具來(lái)完成這個(gè)工作:AppWizard可以用來(lái)生成初步的框架文件(代碼和資源等);資源編輯器用于幫助直觀地設(shè)計(jì)用戶接口;ClassWizard用來(lái)協(xié)助添加代碼到框架文件;最后,編譯,則通過(guò)類庫(kù)實(shí)現(xiàn)了應(yīng)用程序特定的邏輯。 封裝 構(gòu)成MFC框架的是MFC類庫(kù)。MFC類庫(kù)是C+類庫(kù)。這些類或者封裝了Wi

55、n32應(yīng)用程序編程接口,或者封裝了應(yīng)用程序的概念,或者封裝了OLE特性,或者封裝了ODBC和DAO數(shù)據(jù)訪問(wèn)的功能,等等,分述如下。 對(duì)Win32應(yīng)用程序編程接口的封裝 用一個(gè)C+ Object來(lái)包裝一個(gè)Windows Object。例如:class CWnd是一個(gè)C+ window object,它把Windows window(HWND)和Windows window有關(guān)的API函數(shù)封裝在C+ window object的成員函數(shù),后者的成員變量m_hWnd就是前者的窗口句柄。 對(duì)應(yīng)用程序概念的封裝 使用SDK編寫Windows應(yīng)用程序時(shí),總要定義窗口過(guò)程,登記Windows Class,創(chuàng)

56、建窗口,等等。MFC把許多類似的處理封裝起來(lái),替程序員完成這些工作。另外,MFC提出了以文檔-視圖為中心的編程模式,MFC類庫(kù)封裝了對(duì)它的支持。文檔是用戶操作的數(shù)據(jù)對(duì)象,視圖是數(shù)據(jù)操作的窗口,用戶通過(guò)它處理、查看數(shù)據(jù)。 對(duì)COM/OLE特性的封裝 OLE建立在COM模型之上,由于支持OLE的應(yīng)用程序必須實(shí)現(xiàn)一系列的接口(Interface),因而相當(dāng)繁瑣。MFC的OLE類封裝了OLE API大量的復(fù)雜工作,這些類提供了實(shí)現(xiàn)OLE的更高級(jí)接口。 對(duì)ODBC功能的封裝 以少量的能提供與ODBC之間更高級(jí)接口的C+類,封裝了ODBC API的大量的復(fù)雜的工作,提供了一種數(shù)據(jù)庫(kù)編程模式。從CWinAp

57、p、CDocument、CView、CMDIFrameWnd、CMDIChildWnd類對(duì)應(yīng)地派生出CTApp、CTDoc、CTView、CMainFrame、CChildFrame五個(gè)類,這五個(gè)類的實(shí)例分別是應(yīng)用程序?qū)ο蟆⑽臋n對(duì)象、視對(duì)象、主框架窗口對(duì)象和文檔邊框窗口對(duì)象。主框架窗口包含了視窗口、工具條和狀態(tài)欄。對(duì)這些類或者對(duì)象解釋如下。 (1)應(yīng)用程序 應(yīng)用程序類派生于CWinApp?;诳蚣艿膽?yīng)用程序必須有且只有一個(gè)應(yīng)用程序?qū)ο螅?fù)責(zé)應(yīng)用程序的初始化、運(yùn)行和結(jié)束。 (2)邊框窗口 如果是SDI應(yīng)用程序,從CFrameWnd類派生邊框窗口類,邊框窗口的客戶子窗口(MDIClient)直接

58、包含視窗口;如果是MDI應(yīng)用程序,從CMDIFrameWnd類派生邊框窗口類,邊框窗口的客戶子窗口(MDIClient)直接包含文檔邊框窗口。 如果要支持工具條、狀態(tài)欄,則派生的邊框窗口類還要添加CToolBar和CStatusBar類型的成員變量,以與在一個(gè)OnCreate消息處理函數(shù)中初始化這兩個(gè)控制窗口。 邊框窗口用來(lái)管理文檔邊框窗口、視窗口、工具條、菜單、加速鍵等,協(xié)調(diào)半模式狀態(tài)(如上下文的幫助(SHIFT+F1模式)和打印預(yù)覽)。 (3)文檔邊框窗口 文檔邊框窗口類從CMDIChildWnd類派生,MDI應(yīng)用程序使用文檔邊框窗口來(lái)包含視窗口。 (4)文檔 文檔類從CDocument類

59、派生,用來(lái)管理數(shù)據(jù),數(shù)據(jù)的變化、存取都是通過(guò)文檔實(shí)現(xiàn)的。視窗口通過(guò)文檔對(duì)象來(lái)訪問(wèn)和更新數(shù)據(jù)。 (5)視 視類從CView或它的派生類派生。視和文檔聯(lián)系在一起,在文檔和用戶之間起中介作用,即視在屏幕上顯示文檔的容,并把用戶輸入轉(zhuǎn)換成對(duì)文檔的操作。 (6)文檔模板 文檔模板類一般不需要派生。MDI應(yīng)用程序使用多文檔模板類CMultiDocTemplate;SDI應(yīng)用程序使用單文檔模板類CSingleDocTemplate。 應(yīng)用程序通過(guò)文檔模板類對(duì)象來(lái)管理上述對(duì)象(應(yīng)用程序?qū)ο?、文檔對(duì)象、主邊框窗口對(duì)象、文檔邊框窗口對(duì)象、視對(duì)象)的創(chuàng)建。2.4基于OpenGL+MFC的三維模擬的編程環(huán)境配置1創(chuàng)建

60、MFC項(xiàng)目創(chuàng)建項(xiàng)目文件。選擇File|New菜單項(xiàng),新建一個(gè)基于對(duì)話框的項(xiàng)目文件MyDlgOpenGL; 修改對(duì)話框模板。刪除對(duì)話框中的靜態(tài)文本,調(diào)整控件的位置;2. 配置基于OpenGLMFC的開(kāi)發(fā)環(huán)境將glu.dll,glu32.dll,glut.dll,glut32.dll,opengl32.dll文件拷貝到操作系統(tǒng)WINNT/System32目錄下。將gl.h,glaux.h,glu.h,glut.h拷貝到Microsoft Visual Studio/VC98/Include/GL目錄中中。將glaux.lib,glu32.lib,glut32.lib,opengl32.lib拷貝到

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論