2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  本科畢業(yè)設(shè)計(論文)</p><p><b>  ( 屆)</b></p><p>  論文題目 校園教學(xué)北區(qū)場景的交互漫游設(shè)計</p><p>  所在學(xué)院 計算機與信息學(xué)院 </p><p>  專業(yè)班級 計算機科學(xué)與技術(shù) </p>

2、<p>  學(xué)生姓名 學(xué)號 </p><p>  指導(dǎo)教師 職稱 </p><p>  完成日期 年 月 日</p><p><b>  誠 信 聲 明</b></p><p> 

3、 我聲明,所呈交的畢業(yè)設(shè)計作品和論文是本人經(jīng)過近四年的基礎(chǔ)課程與專業(yè)課程學(xué)習(xí)的基礎(chǔ)上,在指導(dǎo)老師的指導(dǎo)下,經(jīng)過幾個月集中的畢業(yè)設(shè)計學(xué)習(xí)、實踐和努力工作所取得的成果。據(jù)本人查證,除了文中特別加以標(biāo)注和致謝的地方外,設(shè)計作品和論文中不包含其他人已經(jīng)發(fā)表或撰寫過的研究成果。我承諾,設(shè)計作品和論文中的所有內(nèi)容均真實、可信。</p><p>  學(xué)生簽名: </p><p>

4、;  簽名日期: 年 月 日</p><p><b>  論文目錄</b></p><p><b>  摘 要19</b></p><p>  Abstract20</p><p><b>  1 引言21</b></p><p>&

5、lt;b>  2 主要技術(shù)21</b></p><p>  2.1 Vega Prime和Lynx Prime21</p><p>  2.1.1 Vega和Lynx21</p><p>  2.1.2 VP系統(tǒng)結(jié)構(gòu)22</p><p>  2.1.3 LP的界面構(gòu)成23</p><p> 

6、 3 漫游系統(tǒng)的設(shè)計25</p><p>  3.1 基本場景的設(shè)計25</p><p>  3.1.1 場景布局25</p><p>  3.1.2 觀察者設(shè)置32</p><p>  3.1.3 運動方式的選擇33</p><p>  3.1.4 Pathtool自動導(dǎo)航路徑35</p>

7、<p>  3.1.5 環(huán)境設(shè)置42</p><p>  3.1.6 特殊效果42</p><p>  3.2交互控制的程序?qū)崿F(xiàn)43</p><p>  3.2.1 Vega API的調(diào)用43</p><p>  3.2.2 特殊效果的控制44</p><p>  4 系統(tǒng)開發(fā)中的問題52<

8、/p><p><b>  5 總結(jié)54</b></p><p><b>  [參考文獻]56</b></p><p>  附錄1:測試報告56</p><p>  附錄2:作品說明書58</p><p><b>  摘 要</b></p>

9、<p>  虛擬現(xiàn)實(Virtual Reality,簡稱VR)技術(shù)是最近十多年以來計算機技術(shù)領(lǐng)域發(fā)展最快的一項多學(xué)科綜合技術(shù)。虛擬現(xiàn)實是以計算機技術(shù)為支持的一種人工環(huán)境,是人類與計算機以及復(fù)雜數(shù)據(jù)信息進行交互的一種技術(shù)。</p><p>  本文針對校園場景模擬了虛擬校園。虛擬校園建立在虛擬現(xiàn)實技術(shù)之上,它不但可以還原校園的真實面貌于電腦上,供用戶鑒賞,還可以集成各種基礎(chǔ)數(shù)據(jù)到系統(tǒng)中,提供校園的地

10、理環(huán)境信息及其他空間數(shù)據(jù),達到真正的校園數(shù)字化漫游過程。</p><p>  本文以浙江萬里學(xué)院校園環(huán)境為虛擬場景,以開發(fā)工具Vega為平臺,完成了校園仿真模型的創(chuàng)建及優(yōu)化,并在此基礎(chǔ)上利用Vega Prime 2.0,在Visual C++環(huán)境下實現(xiàn)了校園的漫游。虛擬校園的構(gòu)建對于一個學(xué)校有著極其重要的意義。</p><p>  關(guān)鍵詞:虛擬現(xiàn)實,校園漫游,三維建模,Vega, Visu

11、al C++</p><p><b>  Abstract</b></p><p>  The recent ten years, the development of computer technology into the Virtual world field, Virtual Reality (VR), the abbreviation insgroupsto

12、 Reality the fastest growing a multidisciplinary integrated technology, Virtual Reality is a kind of artificial environment in computer technology and also is a technique with computers and extremely complex human data i

13、nteractive.</p><p>  Virtual campus is based on virtual reality technology above, not only will the real appearance in computer on campus for users to watch the reduction, and can all sorts of basic data int

14、egration into the system, provide the campus geographic information data and other spatial data, realize a real campus digital roaming process.</p><p>  In this paper,Based on the campus of ZheJiang WanLi Un

15、iversity as a virtual space,making use of development tool Vega,adopting hierarchical data structure,an emulation model of residential area is constructed and optimized.Based on this,by using Vega Prime 2.0,to realize th

16、e roaming of campus on Visual C++ environment. The construction of virtual campus for a school has a very important significance.</p><p>  Key words: Virtual reality, Campus roaming, 3D modeling, Vega, Visua

17、l C++</p><p><b>  1 引言</b></p><p>  虛擬現(xiàn)實在最近幾年內(nèi)發(fā)展迅速,已經(jīng)發(fā)展成為了非常重要的人機交互的界面,相比于傳統(tǒng)的人機界面還有流行的視窗操作,虛擬現(xiàn)實在技術(shù)上非常明顯的提高,可以說VR 技術(shù)的出現(xiàn)從根本上打破了人類局限于地理空間信息認(rèn)知方面觀點。 </p><p>  虛擬現(xiàn)實技術(shù)是一種

18、高度逼真的模擬人在自然環(huán)境中視、聽、動等行為的人機交互技術(shù)。該技術(shù)利用計算機產(chǎn)生逼真的三維視覺、聽覺、觸覺甚至味覺等感官世界。虛擬現(xiàn)實技術(shù)的突出特征是“沉浸”和“交互”。它要求計算機所創(chuàng)造的虛擬環(huán)境能使用戶具有全身心的參與感和體驗感。</p><p>  虛擬現(xiàn)實技術(shù)在我國畢竟還是一門較新的領(lǐng)域,從事這門科學(xué)研究的科研人員已經(jīng)不能只局限于從事最底層的開發(fā)工作,大量世界領(lǐng)先級產(chǎn)品,其性能的優(yōu)越性和產(chǎn)品的先進程度遠(yuǎn)遠(yuǎn)

19、超過自己開發(fā)這些模塊的功能。因此,掌握這類軟件的性能并對其進行二次開發(fā)顯得尤為重要。無論對程序員還是非程序員,Vega都是一套理想的使用工具。因為它無需花費大量時間和精力去編程,適合仿真軟件開發(fā)人員集中精力只解決特殊領(lǐng)域內(nèi)的問題[1]。</p><p>  本文以浙江萬里學(xué)院教學(xué)北區(qū)為對象,以vega軟件平臺上為基礎(chǔ)建立萬里學(xué)院教學(xué)區(qū)的虛擬現(xiàn)實場景,利用教學(xué)區(qū)的數(shù)字化地圖、和區(qū)域內(nèi)建筑物的呈現(xiàn),并在此基礎(chǔ)上利用V

20、ega Prime 2.0,在Visual C++環(huán)境下實現(xiàn)了校園的漫游。實現(xiàn)校園場景漫游運動 。</p><p><b>  2 主要技術(shù)</b></p><p>  2.1 Vega Prime和Lynx Prime</p><p>  Vega Prime(以下簡稱VP)是一個實時三維驅(qū)動的工具包。Lynx Prime(以下簡稱LP)是用

21、來定義VP中的類及其參數(shù)的人機交互界面,定義好的內(nèi)容可以保存到一個文件中。</p><p>  2.1.1 Vega和Lynx</p><p>  Vega是美國MultiGen-Paradigm公司用于虛擬現(xiàn)實、實現(xiàn)視景仿真、聲音仿真以及其他可視化領(lǐng)域的世界領(lǐng)先級應(yīng)用軟件工具。它支持快速復(fù)雜的視覺仿真程序,能為用戶提供一種處理復(fù)雜仿真事件的便捷手段。</p><p&g

22、t;  Vega包括友好的圖形環(huán)境頁面、完整的C語言應(yīng)用程序接口API、豐富的相關(guān)實用庫函數(shù)和一批可選的功能模塊,能夠滿足多種特殊的仿真要求。</p><p>  Lynx是用來設(shè)定和預(yù)覽Vega應(yīng)用程序的圖形式用戶界面。這些Vega應(yīng)用程序可以是用戶在Vega開發(fā)環(huán)境下建立的程序,也可以是使用整個Vega軟件包執(zhí)行的一個基本Vega應(yīng)用程序。</p><p>  Lynx圖形環(huán)境是點擊式

23、的,用戶只需用鼠標(biāo)左、中、右鍵點擊即可驅(qū)動圖形中的對象物以及動畫中的實時控制。它可以在不涉及源代碼的前提下便捷地改變應(yīng)用程序的性能,如顯示通道,多CPU資源分配、視點、觀察者、特殊效果、時間尺度、系統(tǒng)配置、模型和數(shù)據(jù)庫等。</p><p>  Vega使用Lynx界面定義和預(yù)覽Vega的應(yīng)用程序。在Vega中包含了創(chuàng)建了一個應(yīng)用程序所必須的全部API,但是簡單的應(yīng)用程序僅靠Lynx就可以實現(xiàn),Lynx允許用戶在不

24、用寫源代碼的情況下即可配置一個應(yīng)用程序。在許多場合,對于一個仿真應(yīng)用程序可以同時使用Lynx和Vega的API函數(shù)。[2]</p><p>  VP最好與LP一起使用。盡管VP包含了創(chuàng)建一個應(yīng)用所需的所有API,但LP簡化了開發(fā)過程,而且LP允許開發(fā)者無需編寫代碼即可創(chuàng)建一個應(yīng)用。</p><p>  LP是一個編輯器,用于增加不同種類的模型,為模型定義參數(shù)。這些參數(shù)都存貯于應(yīng)用配置文件(

25、ACF)中的一個模型結(jié)構(gòu)內(nèi),例如觀察者的位置,模型及它們在場景中的位置,在場景中的移動,光線,環(huán)境效果,及目標(biāo)硬件平臺。ACF文件包含了VP在初始化和運行時所需的信息。</p><p>  2.1.2 VP系統(tǒng)結(jié)構(gòu)</p><p>  圖2-1 vp系統(tǒng)結(jié)構(gòu)</p><p><b> ?。?)應(yīng)用配置文件</b></p><

26、p>  應(yīng)用配置文件包含了VP應(yīng)用在初始化和運行時所需的一切信息。通過編譯不同的ACF文件,一個VP能夠生成不同種類的應(yīng)用。ACF文件為擴展Mark-up語言(XML)格式。</p><p>  可以使用VP編輯器LP來開發(fā)一個ACF,然后使用VP API動態(tài)地改變應(yīng)用中模型運動。對于實時應(yīng)用來說,ACF不是必要的,但它可以將改動信息進行譯碼,記錄在.cpp程序中,這樣可以節(jié)省大量的時間。</p>

27、;<p>  2.1.3 LP的界面構(gòu)成</p><p>  LP用戶界面包括四個部分:實例樹形顯示區(qū)(Instance Tree View)、用戶操作區(qū)(GUI View)、應(yīng)用程序區(qū)(API View)、工具條(Toolbar)和目錄區(qū)(Menus)。</p><p> ?。?)GUI View</p><p>  用戶操作區(qū)顯示ACF模型及相關(guān)參

28、數(shù)。打開LP時,第一個顯示的用戶操作窗口叫myKernel,這是VP中Kernel(應(yīng)用程序的起始點)類型的一個實例。如圖2-2所示:</p><p>  圖2-2 用戶操作窗口myKernel</p><p>  (2)Instance Tree View</p><p>  實例樹位于LP窗口的左邊,它顯示了目前正在操作的ACF文件和文件中包含的所有類的實例

29、。有一些實例可能引用了其他實例或與其他實力相關(guān)聯(lián),在實例樹顯示區(qū),我們可以通過展開這些實例,以顯示它們之間的關(guān)聯(lián)性。如果一個實例在ACF文件的其他地方出現(xiàn),這就說明該實例被其他實例所引用。這些實例的文件名旁就標(biāo)有一個藍(lán)色的箭頭。向下的箭頭表示該實例第一次被使用;向上的箭頭表示這個實例的其他應(yīng)用[3]。如圖2-3所示:</p><p>  圖2-3 實例樹形顯示區(qū)</p><p> ?。?/p>

30、3)API View</p><p>  API區(qū)顯示選定實例的所有可能變量。在該區(qū),可以直接給變量賦值。如圖2-4所示:</p><p>  圖2-4 應(yīng)用程序區(qū)</p><p>  (4) Active Preview</p><p>  當(dāng)LynX Prime中的參數(shù)發(fā)生變化時,顯示運行一個基本Vega Prime應(yīng)用,這個應(yīng)用接收Ly

31、nX Prime發(fā)送的參數(shù)。就可以在ACF三維場景顯示中移動。</p><p>  2.1.4 Lynx生成的文件</p><p>  <?xml version="1.0"?></p><p>  <AcfRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc

32、e" xsi:schemaLocation="</p><p>  urn://www.multigen-paradigm.com mpi.xsd"</p><p>  xmlns="urn://www.multigen-paradigm.com"</p><p>  xmlns:vp="urn://www

33、.multigen-paradigm.com/vp"</p><p>  xmlns:vpEnv="urn://www.multigen-paradigm.com/vpEnv"</p><p>  xmlns:vpMotion="urn://www.multigen-paradigm.com/vpMotion"</p><

34、;p>  xmlns:vpFx="urn://www.multigen-paradigm.com/vpFx"</p><p>  xmlns:vpPath="urn://www.multigen-paradigm.com/vpPath"</p><p>  xmlns:vpShadow="urn://www.multigen-para

35、digm.com/vpShadow"</p><p><b>  ></b></p><p>  <vp:AcfInfo name="school2.acf"></p><p>  <vp:initializeModule>vpEnv</vp:initializeModule&g

36、t;</p><p>  <vp:initializeModule>vpMotion</vp:initializeModule></p><p>  <vp:initializeModule>vpFx</vp:initializeModule></p><p>  <vp:initializeModule>

37、vpPath</vp:initializeModule></p><p>  <vp:initializeModule>vpShadow</vp:initializeModule></p><p>  <vp:autoEnable>true</vp:autoEnable></p><p>  <vp:

38、appToRun>D:/mm/bysj/1/Debug/vpfx_particle_system.exe</vp:appToRun></p><p>  <vp:appToRunArgs>$ACF</vp:appToRunArgs></p><p>  <vp:comment></vp:comment></p>

39、<p>  <vp:createdByVersion>2.0.1</vp:createdByVersion></p><p>  </vp:AcfInfo></p><p><b>  ……</b></p><p><b>  3 漫游系統(tǒng)的設(shè)計</b></p>

40、<p>  3.1 基本場景的設(shè)計</p><p>  3.1.1 場景布局</p><p>  導(dǎo)入用建模工具Creator建好的模型。Multigen Creator系列軟件,由美國Multigen-Paradigm公司開發(fā),它擁有針對實時應(yīng)用優(yōu)化的OpenFlight數(shù)據(jù)格式,強大的多邊形建模、矢量建模、大面積地形精確生成功能,以及多種專業(yè)選項及插件,能高效、最優(yōu)化地生成

41、實時三維(RT3D)數(shù)據(jù)庫,并與后續(xù)的實時仿真軟件緊密結(jié)合,在視景仿真、城市仿真、校園仿真及工程應(yīng)用、科學(xué)可視化等實時仿真領(lǐng)域有著非常重要的的地位[4]。</p><p>  校園教學(xué)北區(qū)場景建筑包括了1號,空中花園,4到10號教學(xué)樓以及64號教學(xué)樓.如下圖所示。</p><p>  圖3-1 1號教學(xué)樓</p><p>  圖3-2 3號教學(xué)樓</p&g

42、t;<p>  圖3-3 4號教學(xué)樓</p><p>  圖3-4 6號教學(xué)樓</p><p>  圖3-5 8、9號教學(xué)樓</p><p>  圖3-6 64號教學(xué)樓</p><p><b>  圖3-7 連廊</b></p><p><b>  圖3-8 飛機

43、模型</b></p><p><b>  圖3-9 空中花園</b></p><p>  學(xué)校教學(xué)北區(qū)主要建筑物屬性及其參數(shù)設(shè)置如表3-1,3-2所示</p><p>  表3-1 模型屬性</p><p>  表3-2學(xué)校教學(xué)北區(qū)主要建筑物及其參數(shù)設(shè)置</p><p>  3.1.

44、2 觀察者設(shè)置</p><p> ?。?)觀察者(Observer):</p><p>  圖3-10三維空間中的XYZ坐標(biāo)點</p><p>  觀察者的位置是在三維空間中的XYZ坐標(biāo)點。</p><p><b>  +X指向右</b></p><p><b>  -X指向左</

45、b></p><p><b>  +Y指向前</b></p><p><b>  -Y指向后</b></p><p><b>  +Z指向上</b></p><p><b>  -z指向下</b></p><p>  觀察者的

46、方向是用坐標(biāo)系統(tǒng)中的朝向,斜度和轉(zhuǎn)角度的HPR值來表示。</p><p>  朝向是指Z軸上的轉(zhuǎn)向:</p><p><b>  +H指看向左旋轉(zhuǎn)</b></p><p><b>  -h指看向右旋轉(zhuǎn)</b></p><p><b>  斜度指X軸的轉(zhuǎn)向:</b></p&

47、gt;<p><b>  +P指向上旋轉(zhuǎn)</b></p><p><b>  -P指向下旋轉(zhuǎn)</b></p><p><b>  轉(zhuǎn)角度指Y軸轉(zhuǎn)向:</b></p><p>  +R指運動轉(zhuǎn)向右邊旋轉(zhuǎn)</p><p>  -R指運動轉(zhuǎn)向左邊旋轉(zhuǎn)</p>

48、<p>  考慮到觀察者能作為一雙眼睛從一個特殊的位置觀測場景,觀察者(Observer)控制Vega內(nèi)的視覺表現(xiàn)。另外,觀察者是通過把許多模擬的元素聚合在一起來控制觀測場景的,事實上,這些元素的聚合物要比其他Vega類的聚合物少得多。每個觀察者都有關(guān)聯(lián)的場景(sence)、通道(channels)、環(huán)境(environment)以及其他類用以描述可見的物體。[5]</p><p>  為方便觀察,

49、我設(shè)置了兩個觀察者。</p><p><b>  (2)通道</b></p><p>  所有圖形被著色到一條通道中;因此,觀察者至少要有一個附著的通道。視觀察者需要也可以有多條通道。</p><p>  對各通道進行著色時,按照各通道創(chuàng)建的順序進行,而不按照被加到觀察者中的順序進行。第一個建立的通道就是第一條被繪制的通道,而后續(xù)的通道是在同一

50、窗口中的其他通道。[7]</p><p>  3.1.3 運動方式的選擇</p><p>  我們利用系統(tǒng)自帶的一些模擬運動方式來實現(xiàn)場景的驅(qū)動。Vega Prime用vpMotion定義抽象的運動模型。視點可以設(shè)置為觀察者Observer,該視點同樣可以應(yīng)用在物體object上。所有具體的運動模型,比如Fly、UFO、Walk等等,都是從vpMotion這個抽象基類派生的[15]。<

51、;/p><p>  Vega使用運動模式的方法來模擬各種常見的運動狀態(tài),比如飛機飛行、散步、開車、轉(zhuǎn)體運動、滑行等等。運動模式最大的特點就是一,當(dāng)漫游物體和觀察者相結(jié)合時,用戶就可以使用常規(guī)的輸入設(shè)備(鼠標(biāo)或者鍵盤)實時地控制物體漫游的速度和方向,進而,模擬出逼真的運動仿真效果[9]。Vega提供給我們的運動模式如下表3-3所示:</p><p>  表3-3 Vega的運動模式</p&

52、gt;<p> ?。?)飛碟模式(UFO):</p><p>  字面理解就知道該模式稱為飛碟模式,是因為它可以模擬一個無慣性物體的運動狀態(tài)。</p><p>  此運動模式是不受慣性影響的,比如用鼠標(biāo)控制,無論原始運動狀態(tài)如何,按鼠標(biāo)左鍵就向前運動,按鼠標(biāo)右鍵就向后運動。鼠標(biāo)的中鍵相當(dāng)于一個渦輪,當(dāng)按下中鍵時運動速度瞬間提高將近5倍。同時中鍵還可以配合左右按鍵時間加速前進和

53、加速后退。不按鼠標(biāo)鍵該運動模式就會一直處于盤旋狀態(tài),并且會隨著鼠標(biāo)位置的移動方向反向旋轉(zhuǎn)[16]。飛碟模式的主要參數(shù)如下表3-4所示:</p><p>  表3-4飛碟模式的主要參數(shù)</p><p> ?。?)步行模式(Walk)</p><p>  步行模式最適合用來描述人的模型的運動。用鼠標(biāo)進行操作時,按住鼠標(biāo)左鍵的會讓觀察者以固定的速度向前運動,按下鼠標(biāo)右鍵會

54、使觀察者以相同的速度向后運動。運動的同時移動鼠標(biāo),觀察者會轉(zhuǎn)向相應(yīng)的方向,松開按鍵,運動就會立刻停止,按住中鍵同時朝不同的方向移動鼠標(biāo),可以模擬站在原地向四面八方觀望的效果,就像木偶一樣隨時都掌控在觀察者的手中[14]。</p><p>  通過參數(shù)的設(shè)置,在步行模式下還可以越過簡單的臺階或者樓梯,如果想避免視點飛離地面或鉆進地下,就必須要使用地形鉗位(Terrain Clamping)功能,它保證了觀察者的高度

55、始終與地形垂直偏移量(Terrain Z Offset)保持一致。步行模式的主要參數(shù)如下表3-5所示:</p><p>  表3-5 步行模式的主要參數(shù)</p><p> ?。?)駕駛模式(Drive)</p><p>  此運動方式用以模擬簡單的車輛駕駛系統(tǒng),系統(tǒng)的輸入設(shè)備(通常為鼠標(biāo))可用來控制駕駛。鼠標(biāo)左鍵相當(dāng)于汽車的油門,右鍵相當(dāng)于汽車的剎車,鼠標(biāo)中鍵相當(dāng)于

56、手剎制動,無論當(dāng)前是何種運動模式,只要按下中鍵,運動就驟然停止。移動鼠標(biāo)的動作相當(dāng)于操作方向盤,其操作就像我們玩極品飛車的感覺。只有在運動的時候才能轉(zhuǎn)向,正如駕駛一輛真實的車輛一樣。如果想模擬車輛倒退,只需按下鼠標(biāo)右鍵就可以了,倒退時轉(zhuǎn)向跟前進的原理如出一轍。在倒退時按鼠標(biāo)左鍵會使運動速度越來越慢,直到它停下來。然后轉(zhuǎn)為前進,反之亦然。用戶還可以通過參數(shù)的設(shè)置來控制車輛的初速度,最高速度,最低速度等等。駕駛模式的主要參數(shù)如下表3-6所示

57、:</p><p>  表3-6駕駛模式的主要參數(shù)</p><p>  3.1.4 Pathtool自動導(dǎo)航路徑</p><p>  路徑漫游就是通過播放預(yù)先編輯和事先設(shè)置好漫游路徑的方式來實現(xiàn)場景中的模型漫游。</p><p>  漫游路徑的設(shè)置有很多種方式,作品中所采用的是通過鼠標(biāo)設(shè)置控制點來設(shè)置路徑。路徑設(shè)置的主要步驟如下:a.在場景的

58、平面圖顯示的窗口中,由用戶使用鼠標(biāo)在平面圖上點取一系列控制點,設(shè)定每個點的坐標(biāo)和運動指向,將坐標(biāo)切換為邏輯坐標(biāo),進而得到了一個空間邏輯坐標(biāo)的控制點序列。由序列生成一個路徑文件[8]。</p><p>  Vega中的運動路徑首先是指一條包括一系列完整路徑點的路線(Pathing),然后使用導(dǎo)航器(Navigator)(作品特指直升飛機)來完成控制路徑控制點的工作。</p><p> ?。?

59、)導(dǎo)航器的工作原理</p><p>  在Vega中,通常用.way的文件來存放所有設(shè)置好的控制節(jié)點。導(dǎo)航器為路線文件中的每個控制點提供了一個“標(biāo)記”(Marker)的數(shù)據(jù)結(jié)構(gòu)用于存儲相關(guān)的控制信息,這些信息包括當(dāng)前控制點的三維坐標(biāo)方向,當(dāng)前控制點到下一個控制點之間的運動速度、在當(dāng)前控制點處的運動矢量方向和需要完成的動作,當(dāng)前控制點與下一個控制點之間的連接方式等等。然后用一個.nav的標(biāo)記文件來存放標(biāo)記信息,導(dǎo)航

60、器通過解釋標(biāo)記文件中的信息數(shù)據(jù)來控制對象實現(xiàn)定義路徑的運動。導(dǎo)航器會還可以進行路徑運動的循環(huán)。一旦復(fù)位,導(dǎo)航器自動地跳轉(zhuǎn)到起始點[9]。</p><p> ?。?)Path Tool的對話框,控制點和導(dǎo)航路徑的設(shè)置</p><p>  Path Tool的左側(cè)對話框用來設(shè)定Path和Navigator的參數(shù),對控制點屬性的設(shè)置非常關(guān)鍵。Way Points和Navigators原始對話框如

61、圖3-11和圖3-12所示: </p><p>  圖3-11 Way Points對話框 圖3-12 Navigators對話框</p><p>  1)Way Points (路徑控制點)</p><p>  在Lynx Pathing模塊中定義Path對象,并以文件的形式保存, 該文件就是控制Path對象的數(shù)據(jù)文件。在Se

62、lected Path下拉菜單中選中一個Path對象,通過PathTool可以地進行增加和調(diào)節(jié)控制點 </p><p>  路徑控制點設(shè)置和某一控制點的坐標(biāo)圖分別如圖3-13和3-14所示:</p><p>  圖3-13路徑控制點設(shè)置圖</p><p>  圖3-14某一控制點的坐標(biāo)顯示 紅綠藍(lán)分別表示三維坐標(biāo)方向</p><p>  2

63、)Navigators (導(dǎo)航)</p><p>  將設(shè)定好的的控制點鏈接,形成一個環(huán)路的導(dǎo)航路徑。Navigators文件創(chuàng)建對話框和PathNavigator參數(shù)圖如下圖3-15和圖3-16所示:</p><p>  圖3-15 Navigators文件創(chuàng)建對話框</p><p>  圖3-16 PathNavigator參數(shù)圖</p><

64、p>  分析說明如表3-7所示。</p><p><b>  3-7分析說明</b></p><p>  3)Selected Navigator Type (選定的導(dǎo)航類型)</p><p>  在Vega基類中,導(dǎo)航器的類型有五種Spline樣條曲線選項。如下表3-8所示:</p><p>  表3-8 導(dǎo)航器

65、類型</p><p>  作品中的路徑導(dǎo)航器類型如下圖3-17所示: </p><p>  圖3-17 路徑導(dǎo)航器類型</p><p>  路徑中每個點的參數(shù)如表3-9所示。</p><p>  表3-9 路徑中每個點的參數(shù)</p><p>  路徑完成后如圖3

66、-18所示。</p><p>  圖3-18 已完成的路徑圖</p><p>  3.1.5 環(huán)境設(shè)置</p><p>  LP里面的環(huán)境效果包括陽光、月光、霧、風(fēng)等。還可以控制一天中時間的流逝速度效果。你可以在幾分鐘的時間內(nèi)將黎明變成白天、黃昏和夜晚。</p><p>  VP中的環(huán)境是云、霧等大氣現(xiàn)象的綜合體。它包含了陽光和月光源。LP

67、中陽光和月光會依據(jù)天時進行自動調(diào)整[13]。</p><p>  LP提供以下幾種效果來幫你創(chuàng)建一個實時的環(huán)境:</p><p>  太陽-由一個亮盤來代表太陽在天空中的位置。</p><p>  月亮-由另一個亮盤來代表月亮在天空中的位置。</p><p><b>  云層-云層的一層。</b></p>

68、<p>  穹頂-刻劃出天際線的效果。穹頂有一個無邊的地平面,顏色可以自定義。</p><p><b> ?。?)改變天時</b></p><p>  默認(rèn)天時是從午時12點開始,時間決定了光照的強度。一天中太陽和月亮交替出現(xiàn)。</p><p>  Time Multiplier是控制時間快慢的工具。默認(rèn)值為1,表示仿真時間和現(xiàn)實時間

69、快慢相同;若值設(shè)為0,表示時間靜止;若值設(shè)為60,表示仿真時間是現(xiàn)實時間速度的60倍,這時在半小時的現(xiàn)實時間內(nèi)你就可以看到幾乎整天的仿真天時效果[10]。</p><p>  圖3-19 Time Multiplier</p><p><b>  (2)添加光點</b></p><p>  為了模擬光照效果,需要加入多個光源。光源在仿真場景中用

70、于照亮物體??梢酝ㄟ^LP來完成這些配置。光源分為:</p><p>  定向光源-指向特定的方向</p><p>  位置光源-某一個位置上的漫反射光源</p><p>  電光源-某一位置上的定向光源</p><p>  3.1.6 特殊效果</p><p>  使用Vega特殊效果模擬擴展板塊,可以方便地在視景仿真

71、應(yīng)用中模擬出各種很難用多邊形建模方式表現(xiàn)出來的的特殊視覺效果,包括常見的火焰燃燒效果、燃燒煙霧效果、各種爆炸效果、直升機旋轉(zhuǎn)的螺旋槳效果、飛行導(dǎo)彈的尾跡效果等,該模塊還提供了自定義粒子系統(tǒng)設(shè)置,允許用戶靈活地制作出能夠滿足特殊仿真要求的各種特殊效果。</p><p>  特效能讓應(yīng)用變得更加真實、豐富及奪目??梢远x煙火、爆炸、碎片等特效,也可以通過VP的粒子特效來模擬煙塵等效果。場景中的物體可以用來撞擊或破壞,

72、造成的結(jié)果可以加上特效。所有這些都可以通過LP來方便的進行定義[11]。</p><p>  圖3-20 特殊效果添加模塊</p><p>  3.2交互控制的程序?qū)崿F(xiàn)</p><p>  3.2.1 Vega API的調(diào)用</p><p>  Vega API的基本結(jié)構(gòu):</p><p>  Vega提供的眾多功能都

73、被封裝在用C語言定義的類中,每個Vega類都是一個完整的、能夠?qū)崿F(xiàn)對應(yīng)功能的,各種控制方法和表現(xiàn)屬性的集合,這些可以在應(yīng)用程序中調(diào)用的、相互關(guān)聯(lián)的類的集合構(gòu)成了Vega類庫。Vega的核心就是用于控制虛擬仿真環(huán)境的應(yīng)用程序編程接口,主要包括Vega開發(fā)函數(shù)庫和Vega實用函數(shù)庫兩個類庫[12]。</p><p>  為了滿足不同的開發(fā)目的,所有的Vega類庫都提供了多種形式的版本,以Windows平臺下的Vega

74、開發(fā)函數(shù)庫為例:</p><p>  PsVg.dll和PsVg.lib—以優(yōu)化過的共享動態(tài)連接庫形式提供;</p><p>  PsVgD.dll和PsVgD.lib—以調(diào)試版本的共享動態(tài)連接庫形式提供;</p><p>  PsVgS.lib—以優(yōu)化過的靜態(tài)類庫形式提供;</p><p>  PsVgDS.lib—以調(diào)試版本的靜態(tài)類庫形式

75、提供;</p><p><b>  API的初始化:</b></p><p>  vp::initialize執(zhí)行如下任務(wù):</p><p>  a.檢查license是否正確</p><p>  b.初始化靜態(tài)變量(static variables)和單例類(singleton classes)</p>

76、<p>  c.初始化內(nèi)存分配(memory allocator)</p><p>  d.初始化渲染庫(rendering library)</p><p>  e.初始化場景(scene graph)</p><p>  f.初始化ACF剝析程序(ACF parser)</p><p>  g.初始化模塊界面(module in

77、terface)</p><p>  h.初始化內(nèi)核(kernel classes)</p><p><b>  初始化實例:</b></p><p>  //vpModule::initializeModule(modulename);</p><p>  vpModule::initializeModule是初始化你

78、的應(yīng)用中所添加的模塊。初始化所添加模塊和用戶定制模塊需要使用以下句法:</p><p><b>  //初始化所有模塊</b></p><p>  vpModule::initializeModule( "vp" );</p><p>  vpModule::initializeModule( "vpEnv&quo

79、t; );</p><p>  vpModule::initializeModule( "vpMotion" );</p><p>  vpModule::initializeModule( "vpLADBM" );</p><p>  vpModule::initializeModule( "vpFx"

80、);</p><p>  vpModule::initializeModule( "vpIR" );</p><p>  3.2.2 特殊效果的控制</p><p>  #include <vpApp.h> //包含頭文件vpApp.h</p><p>  #in

81、clude <vpMotionUFO.h> //包含頭文件vpMotionUFO.h</p><p>  #include <vpFxParticleSystem.h> //包含頭文件vpFxParticleSystem.h</p><p>  #include "vuAllocTracer.h&q

82、uot; //包含頭文件vuAllocTracer.h</p><p>  vuAllocTracer tracer;</p><p>  class myApp : public vpApp {</p><p><b>  public:</b></p><p>  myApp() :

83、</p><p>  m_myFx->unref(); // 創(chuàng)建類</p><p>  m_myFx1->unref();</p><p>  m_myFx2->unref();</p><p>  m_myFx3->unref();</p><p><b&

84、gt;  {}</b></p><p>  ~myApp() //析構(gòu)函數(shù)</p><p><b>  {</b></p><p>  m_myFx->unref(); //取消VP成員變量實例化引用</p><p><b>  }</b></p&g

85、t;<p>  int configure() </p><p><b>  {</b></p><p>  // 調(diào)入粒子特殊效果</p><p>  vpApp::configure();</p><p>  m_myFx = vpFxParticleSystem::find( "myFxPa

86、rticleSystem" );</p><p>  assert(m_myFx);</p><p>  m_myFx->ref();</p><p>  m_myFx1 = vpFxParticleSystem::find( "myFxParticleSystem1" );</p><p>  asser

87、t(m_myFx1);</p><p>  m_myFx1->ref();</p><p><b>  ……</b></p><p>  return vsgu::SUCCESS;</p><p><b>  }</b></p><p>  virtual void o

88、nKeyInput(vrWindow::Key key, int mod) //覆蓋原來的鍵盤輸入</p><p><b>  {</b></p><p>  vuVec3d vVelocity;</p><p>  vuVec3d vWind;</p><p>  float fSize;<

89、;/p><p>  float fRandomVel;</p><p>  float fScaleVel;</p><p>  float fSphereVel;</p><p>  switch ( key ) </p><p>  {case vrWindow::KEY_ESCAPE:</p><

90、p>  vpApp::breakFrameLoop(); </p><p><b>  break;</b></p><p><b>  //粒子尺寸增加</b></p><p>  case vrWindow::KEY_F1:</p><p>  fSize = m_myFx->get

91、Size( 1.0f );</p><p>  fSize += 0.1f; </p><p>  crt::printf( "Size = %f\n", fSize );</p><p>  m_myFx->setSize( 1.0f, fSize );</p><p>

92、  m_myFx1->setSize( 1.0f, fSize );</p><p>  m_myFx2->setSize( 1.0f, fSize );</p><p>  m_myFx3->setSize( 1.0f, fSize );</p><p><b>  break;</b></p><p&g

93、t;<b>  //粒子尺寸減小</b></p><p>  case vrWindow::KEY_F2:</p><p>  fSize = m_myFx->getSize( 1.0f );</p><p>  fSize -= 0.1f; </p><p&

94、gt;  crt::printf( "Size = %f\n", fSize );</p><p>  m_myFx->setSize( 1.0f, fSize );</p><p>  m_myFx1->setSize( 1.0f, fSize );</p><p>  m_myFx2->setSize( 1.0f, fSiz

95、e );</p><p>  m_myFx3->setSize( 1.0f, fSize );</p><p><b>  break</b></p><p>  //粒子運動速度增加</p><p>  case vrWindow::KEY_F3:</p><p>  vVelocity

96、= m_myFx->getVelocity( 0.0f );</p><p>  vVelocity.m_vec[2] += 0.1; </p><p>  crt::printf( "Velocity: x = %f, y = %f, z = %f\n", </p><p>  vVelocit

97、y.m_vec[0], vVelocity.m_vec[1], vVelocity.m_vec[2] );</p><p>  m_myFx->setVelocity( 0.0f, vVelocity );</p><p>  m_myFx1->setVelocity( 0.0f, vVelocity );</p><p>  m_myFx2->s

98、etVelocity( 0.0f, vVelocity );</p><p>  m_myFx3->setVelocity( 0.0f, vVelocity );</p><p><b>  break;</b></p><p>  //粒子運動速度減小</p><p>  case vrWindow::KEY_F

99、4:</p><p><b>  ……</b></p><p><b>  break;</b></p><p>  //粒子運動傾角變大</p><p>  case vrWindow::KEY_F5:</p><p>  vWind = m_myFx->getWin

100、d( 0.0f );</p><p>  vWind.m_vec[0] += 0.1; </p><p>  crt::printf( "Wind: x = %f, y = %f, z = %f\n", </p><p>  vWind.m_vec[0], vWind.m_vec[1], vWind.m_vec[2

101、] );</p><p>  m_myFx->setWind( 0.0f, vWind );</p><p>  m_myFx1->setWind( 0.0f, vWind );</p><p>  m_myFx2->setWind( 0.0f, vWind );</p><p>  m_myFx3->setWind(

102、 0.0f, vWind );</p><p><b>  break;</b></p><p>  //粒子運動傾角變小</p><p>  case vrWindow::KEY_F6:</p><p><b>  ……</b></p><p><b>  bre

103、ak;</b></p><p>  //粒子與粒子之間的距離增加</p><p>  case vrWindow::KEY_F7:</p><p>  fRandomVel = m_myFx->getRandomVelocity( 0.0f );</p><p>  fRandomVel += 0.1f;

104、 </p><p>  crt::printf( "Random Velocity = %f\n", fRandomVel );</p><p>  m_myFx->setRandomVelocity( 0.0f, fRandomVel );</p><p>  m_myFx1->setR

105、andomVelocity( 0.0f, fRandomVel );</p><p>  m_myFx2->setRandomVelocity( 0.0f, fRandomVel );</p><p>  m_myFx3->setRandomVelocity( 0.0f, fRandomVel );</p><p><b>  break;&l

106、t;/b></p><p><b>  ;</b></p><p>  //粒子與粒子之間的距離減小</p><p>  case vrWindow::KEY_F8:</p><p><b>  ……</b></p><p><b>  break;</

107、b></p><p>  //粒子運動的頂端正方向擴散</p><p>  case vrWindow::KEY_F9:</p><p>  fSphereVel = m_myFx->getSphericalVelocity( 1.0f );</p><p>  fSphereVel += 0.1f;

108、 </p><p>  crt::printf( "Spherical Velocity = %f\n", fSphereVel );</p><p>  m_myFx->setSphericalVelocity( 1.0f, fSphereVel );</p><p>  m_myFx1->set

109、SphericalVelocity( 1.0f, fSphereVel );</p><p>  m_myFx2->setSphericalVelocity( 1.0f, fSphereVel );</p><p>  m_myFx3->setSphericalVelocity( 1.0f, fSphereVel );</p><p><b>

110、  break;</b></p><p><b>  ;</b></p><p>  //粒子運動的頂端反方向擴散</p><p>  case vrWindow::KEY_F10:</p><p><b>  ……</b></p><p><b>  

111、break;</b></p><p>  //粒子形狀變?yōu)榭v向的橢圓形</p><p>  case vrWindow::KEY_F11:</p><p>  fScaleVel = m_myFx->getScaleAlongVelocity( 0.0f );</p><p>  fScaleVel += 0.1f;

112、 </p><p>  crt::printf( "Scale Along Velocity = %f\n", fScaleVel );</p><p>  m_myFx->setScaleAlongVelocity( 0.0f, fScaleVel );</p><p>  m_myFx1->

113、setScaleAlongVelocity( 0.0f, fScaleVel );</p><p>  m_myFx2->setScaleAlongVelocity( 0.0f, fScaleVel );</p><p>  m_myFx3->setScaleAlongVelocity( 0.0f, fScaleVel );</p><p><b&

114、gt;  break;</b></p><p>  //粒子形狀變?yōu)闄M向的橢圓形</p><p>  case vrWindow::KEY_F12:</p><p><b>  ……</b></p><p><b>  break;</b></p><p>  /

115、/粒子發(fā)散的高度增加</p><p>  case vrWindow::KEY_G: </p><p>  m_myFx->setGravitationalConstant( </p><p>  m_myFx->getGravitationalConstant() + 0.1f );</p>&

116、lt;p>  m_myFx1->setGravitationalConstant( </p><p>  m_myFx1->getGravitationalConstant() + 0.1f );</p><p>  m_myFx2->setGravitationalConstant( </p><p>  m_myFx2->getGr

117、avitationalConstant() + 0.1f );</p><p>  m_myFx3->setGravitationalConstant( </p><p>  m_myFx3->getGravitationalConstant() + 0.1f );</p><p>  crt::printf( "Gravitational C

118、onstant = %f\n", </p><p>  m_myFx->getGravitationalConstant() ,</p><p>  m_myFx1->getGravitationalConstant(),</p><p>  m_myFx2->getGravitationalConstant() ,</p>

119、<p>  m_myFx3->getGravitationalConstant());</p><p><b>  break;</b></p><p>  //粒子的發(fā)散高度減小</p><p>  case vrWindow::KEY_g: </p><p><b

120、>  ……</b></p><p><b>  break;</b></p><p>  //粒子顏色發(fā)生改變</p><p>  case vrWindow::KEY_C: </p><p>  m_myFx->setColorVariation( </

121、p><p>  m_myFx->getColorVariation() + 0.1f );</p><p>  m_myFx1->setColorVariation( </p><p>  m_myFx1->getColorVariation() + 0.1f );</p><p>  m_myFx2->setColorV

122、ariation( </p><p>  m_myFx2->getColorVariation() + 0.1f );</p><p>  m_myFx3->setColorVariation( </p><p>  m_myFx3->getColorVariation() + 0.1f );</p><p>  crt::

溫馨提示

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

最新文檔

評論

0/150

提交評論