版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 本科畢業(yè)設(shè)計(論文)</p><p><b> ( 屆)</b></p><p> 論文題目 校園連廊場景的交互漫游設(shè)計</p><p> 所在學(xué)院 計算機與信息學(xué)院 </p><p> 專業(yè)班級 計算機科學(xué)與技術(shù) </p>&
2、lt;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> 摘 要18</b></p><p> Abstract19</p><p><b> 1引言20</b></p><p>&
5、lt;b> 2主要技術(shù)21</b></p><p> 2.1 Vega Prime API21</p><p> 2.2 Lynx Prime22</p><p> 2.3 C++開發(fā)平臺23</p><p> 2.4 輔助工具23</p><p> 3漫游系統(tǒng)的設(shè)計24<
6、;/p><p> 3.1場景元素單獨模型24</p><p> 3.1.1校園建筑物模型24</p><p> 3.1.2文化模型26</p><p> 3.2 場景設(shè)計27</p><p> 3.2.1場景搭建27</p><p> 3.2.2觀察者設(shè)置28</p&g
7、t;<p> 3.2.3運動方式的選擇30</p><p> 3.2.4環(huán)境設(shè)置34</p><p> 3.2.5特殊效果36</p><p> 3.3 交互控制的程序?qū)崿F(xiàn)38</p><p> 3.3.1 Vega API的調(diào)用38</p><p> 3.3.2 特殊效果的控制4
8、0</p><p> 4開發(fā)中問題的探究46</p><p><b> 5總結(jié)49</b></p><p><b> 致謝50</b></p><p><b> [參考文獻(xiàn)]51</b></p><p> 附錄1:測試記錄52<
9、/p><p> 附錄2:作品說明書53</p><p><b> 摘 要</b></p><p> 虛擬現(xiàn)實技術(shù)以計算機技術(shù)為核心生成逼真的虛擬環(huán)境。用戶通過必要的設(shè)備與虛擬環(huán)境中的物體進(jìn)行交互,產(chǎn)生親臨真實環(huán)境的感受。</p><p> 本課題以浙江萬里學(xué)院為背景,通過MultiGen Creator和3DS M
10、ax對校園模型進(jìn)行創(chuàng)建和修改,通過Lynx Prime對校園場景進(jìn)行搭建與配置,真實呈現(xiàn)出校園連廊場景。</p><p> 同時加入物體運動和粒子特效,通過VegaPrime API、C++開發(fā)平臺對粒子特效進(jìn)行控制,實現(xiàn)校園連廊場景的交互漫游設(shè)計。</p><p> 關(guān)鍵詞:虛擬現(xiàn)實,漫游,連廊,Vega</p><p><b> Abstract
11、</b></p><p> With the rapid development of virtual reality technologies and increasingly sophisticated, VR have a wide range of applicationson town planning, tourism, entertainment, education, indust
12、ry, and other fields.</p><p> This topic is Zhejiang Wanli University as the background,To create and modify the architectural models and cultural models by MultiGen Creator and 3DS Max,To build the campus
13、scene and design by Lynx Prime.It can Show more real campus scenes.</p><p> When on campus for simulation, joined the movement of objects and particles effects and realization of roaming for the objects in
14、the gallery scene, and through the VegaPrime API, C++ development platform to achieve control over particle effects, complete the interactive design of campus scenes gallery.</p><p> Key words: Virtual real
15、ity, Roaming, Corridor, Vega</p><p><b> 1引言</b></p><p> 虛擬現(xiàn)實技術(shù)是20世紀(jì)80年代新崛起的一種綜合集成技術(shù),由計算機硬件、軟件以及各種傳感器構(gòu)成的三維信息虛擬環(huán)境,可以逼真地模擬現(xiàn)實世界(甚至是不存在的)的事物和環(huán)境,可通過操控,與虛擬環(huán)境進(jìn)行交互。</p><p> 虛擬
16、現(xiàn)實在最近幾年內(nèi)發(fā)展迅速,已經(jīng)發(fā)展成為了非常重要的人機交互的界面,相比于傳統(tǒng)的人機界面還有流行的視窗操作,虛擬現(xiàn)實在技術(shù)上非常明顯的提高,可以說VR 技術(shù)的出現(xiàn)從根本上打破了人類局限于地理空間信息認(rèn)知方面觀點。 </p><p> 隨著隨著計算機技術(shù)的高速發(fā)展,各種仿真軟件技術(shù)的發(fā)展和計算機圖形處理性能的提升,虛擬現(xiàn)實技術(shù)進(jìn)行復(fù)雜場景的仿真和場景的交互漫游已成為可能。國內(nèi)外越來越多的仿真用戶采用視景仿真技術(shù)來模
17、擬人類生活的環(huán)境,例如校園、軍事基地、住宅、商業(yè)廣場等等。所以,它在城市規(guī)劃、旅游業(yè)、娛樂、教育、工業(yè)等眾多領(lǐng)域都有廣泛的應(yīng)用。</p><p> 利用這一技術(shù)我們可以呈現(xiàn)較為真實的城市面貌,游覽虛擬校園環(huán)境,控制交通工具運動和碰撞,展示粒子的特殊效果,甚至還能為電影做特技等等,可見虛擬交互漫游的功能多么強大。</p><p> MultiGen Creator系列軟件由美國Multi
18、gen-Paradigm公司開發(fā),在視景仿真、交互式游戲、科學(xué)可視化等實時仿真領(lǐng)域有著世界領(lǐng)先的地位。Multigen Creator是一個軟件包,專門創(chuàng)建用于視景仿真的實時三維模型。Vega是MultiGen-Paradigm公司最主要的工業(yè)軟件環(huán)境,用于實時視覺模擬、虛擬現(xiàn)實和普通視覺應(yīng)用。Vega將先進(jìn)的模擬功能和易用工具相結(jié)合,對于復(fù)雜的應(yīng)用,能夠提供便捷的創(chuàng)建、編輯和驅(qū)動工具,顯著地提高工作效率。兩者相結(jié)合就可以把靜止模型變成
19、動態(tài)的。用戶可以通過程序添加控制,實現(xiàn)人機交互,讓用戶有身臨其境的感覺[1]。 </p><p><b> 2主要技術(shù)</b></p><p> 2.1 Vega Prime API</p><p> Vega Prime是美國MultiGen Paradigm公司應(yīng)用于虛擬現(xiàn)實和實時視景仿真等領(lǐng)域的世界領(lǐng)先的軟件開發(fā)環(huán)境。Vega P
20、rime將簡單易用的可視化工具與高級仿真功能巧妙地結(jié)合起來,從而使用戶可以快捷地創(chuàng)建、編輯、運行復(fù)雜的仿真應(yīng)用。</p><p> Vega Prime 提供真正跨平臺、可擴展的開發(fā)環(huán)境,來高效創(chuàng)建和配置視景仿真、城市仿真、基于仿真的訓(xùn)練、通用可視化應(yīng)用。它既具有強大的功能來滿足當(dāng)今最為復(fù)雜的應(yīng)用要求,又具備高度的易用性來提高效率。</p><p> Vega Prime 基于VSG(
21、Vega Scene Graph——MPI 公司先進(jìn)的跨平臺場景圖形API,底層(OpenGL),同時包括Lynx Prime GUI (用戶圖形界面)工具,讓用戶既可以用圖形化的工具進(jìn)行快速配置,又可以用底層場景圖形API 來進(jìn)行應(yīng)用特定功能的創(chuàng)建。它將先進(jìn)的功能和良好的易用性結(jié)合在一起,幫助用戶快速、準(zhǔn)確地開發(fā)實時三維應(yīng)用,加速成果的發(fā)布[2]。Vega Prime的系統(tǒng)結(jié)構(gòu),如下圖2-1所示。</p><p&g
22、t; 圖2-1 Vega Prime的系統(tǒng)結(jié)構(gòu)</p><p> 2.2 Lynx Prime</p><p> Lynx Prime 是一個可擴展的、跨平臺的GUI 配置工具,它用標(biāo)準(zhǔn)的基于XML的數(shù)據(jù)交換格式以提供最大的靈活性,極大地增強了VegaPrime 應(yīng)用的快速創(chuàng)建、修改和配置。</p><p> Lynx Prime是用來設(shè)定和預(yù)覽Vega應(yīng)用
23、程序的圖形式用戶界面。這些Vega應(yīng)用程序可以是用戶在Vega開發(fā)環(huán)境下建立的程序,也可以是使用整個Vega軟件包執(zhí)行的一個基本Vega應(yīng)用程序。</p><p> Lynx Prime圖形環(huán)境是可點擊式的,用戶只需用鼠標(biāo)的點擊即可驅(qū)動圖形中的對象物以及動畫中的實時控制。它可以在不涉及源代碼的前提下便捷地改變應(yīng)用程序的性能,如顯示通道、多CPU資源分配、視點、雙察看、特殊效果、時間尺度、系統(tǒng)配置、模型和數(shù)據(jù)庫等
24、。此外,Lynx Prime的開放性使用戶可以根據(jù)自己的特殊需求賦予其新的功能。</p><p> Lynx Prime的預(yù)覽功能可使用實時地看到修改的效果。事實上,這個強大而全面的仿真工具可以幫助用戶輕而易舉地完成工作任務(wù)。</p><p> Vega使用Lynx Prime界面定義和預(yù)覽Vega的應(yīng)用程序。在Vega中包含了創(chuàng)建一個應(yīng)用程序所必須的全部API,但是簡單的應(yīng)用程序僅靠
25、Lynx Prime就可以實現(xiàn),Lynx Prime允許用戶在不用寫源代碼的情況下即可配置一個應(yīng)用程序。在許多場合,對于一個仿真應(yīng)用程序可以使用Lynx Prime和Vega的API函數(shù)[3]。</p><p> LP用戶界面包括四個部分:實例樹形顯示區(qū)(Instance Tree View)、用戶操作區(qū)(GUI View)、應(yīng)用程序區(qū)(API View)、工具條(Toolbar)和目錄區(qū)(Menus),如下圖
26、2-2所示。</p><p> 圖2-2 LP用戶界面</p><p> 2.3 C++開發(fā)平臺</p><p> 對于在Windows平臺上開發(fā)Vega應(yīng)用程序,考慮到Vega函數(shù)是用C++語言編寫的,故采用Microsoft Visual Studio .NET 2003來作為開發(fā)工具,特別是Visual C++中的MFC類庫是一個相當(dāng)成熟的類庫,基于該類
27、庫開發(fā)的應(yīng)用程序不僅結(jié)構(gòu)合理緊湊,而且可以大大縮短開發(fā)周期[4]。</p><p> 若要在Visual C++環(huán)境下運行Vega應(yīng)用程序,就要對Project進(jìn)行設(shè)置。</p><p> 第一步是檢查并配置系統(tǒng)環(huán)境變量,參數(shù)如下:</p><p> MPI_INSTALL_DEFAULT的值為安裝目錄,e:\Program Files\Multigen-Pa
28、radigm。</p><p> MPI_ INSTALL _PRSOURCES的值為安裝目錄,e:\Program Files\Multigen-Paradigm。</p><p> MPI_LOCATE_VEGA_PRIME的值為安裝目錄,e:\Program Files\Multigen-Paradigm。</p><p> MPI_LOCATE_VEG
29、A_PRIME_LIB的值為lib目錄,e:\Program Files\Multigen-Paradigm\lib。</p><p> 第二步是配置Project,具體配置如下:</p><p> 1.在配置列表里,選擇所有配置。</p><p> 2.選擇C/C++中的常規(guī)標(biāo)簽,在附加包含目錄列表中添加。$(MPI_LOCATE_VEGA_PRIME)\i
30、nclude\vsg,$(MPI_LOCATE_VEGA_PRIME)\include\vegaprime。</p><p> 3.選擇C/C++的代碼生成,在運行時庫中選擇多線程DLL (/MD)。</p><p> 4.選擇連接器中的常規(guī),在附加庫目錄列表中添加$(MPI_LOCATE_VEGA_PRIME_LIB)。</p><p> 5.選擇調(diào)試,設(shè)頂
31、命令行參數(shù) ,G:\ALEX\Alex\08011271-corridor.acf。</p><p><b> 2.4 輔助工具</b></p><p> MultiGen Creator</p><p> MultiGen Creator系列軟件由美國Multigen-Paradigm公司開發(fā),在視景仿真、交互式游戲、科學(xué)可視化等實時仿
32、真領(lǐng)域有著世界領(lǐng)先的地位。Multigen Creator是一個軟件包,專門創(chuàng)建用于視景仿真的實時三維模型[5]。</p><p> 校園建筑物的模型,采用實驗室已有的材料,所以,只需要通過Creator完成對模型的簡單操作,比如移動,顯示坐標(biāo),放大縮小等等。</p><p><b> 3DS Max</b></p><p> 3D St
33、udio Max,常簡稱為3ds Max或MAX,是Autodesk公司開發(fā)的基于PC系統(tǒng)的三維動畫渲染和制作軟件。它廣泛應(yīng)用于廣告、影視、工業(yè)設(shè)計、建筑設(shè)計、多媒體制作、游戲、輔助教學(xué)以及工程可視化等領(lǐng)域。在國內(nèi)發(fā)展的相對比較成熟的建筑效果圖和建筑動畫制作中,3DS MAX的使用率更是占據(jù)了絕對的優(yōu)勢。</p><p> 系統(tǒng)中的運動模型是從網(wǎng)上收集的,格式有點出入,文件也比較大。但通過運用MAX,減少點面和
34、紋理,可以很好的轉(zhuǎn)換成.flt格式且文件比較小。</p><p><b> 3漫游系統(tǒng)的設(shè)計</b></p><p> 3.1場景元素單獨模型</p><p> 3.1.1校園建筑物模型</p><p> 校園建筑物的模型包括教學(xué)樓,空中花園和校園連廊,如下表3-1所示。</p><p>
35、 表3-1 建筑物模型數(shù)據(jù)</p><p> 下面的一號、三號教學(xué)樓、連廊和空中花園,分別如圖3-1,3-2,3-3,3-4所示。</p><p> 圖3-1 一號教學(xué)樓</p><p> 圖3-2 三號教學(xué)樓</p><p><b> 圖3-3 校園連廊</b></p><p><
36、;b> 圖3-4 空中花園</b></p><p><b> 3.1.2文化模型</b></p><p> 文化模型包括運動的物體和樹木,例如汽車,飛機,樹等等。</p><p> 其中汽車的模型從網(wǎng)絡(luò)上收集的,然后通過軟件3D-Max 轉(zhuǎn)換成 .flt ,而飛機的模型是系統(tǒng)自帶的。</p><p&
37、gt; 模型樣式如圖3-5和3-6所示。</p><p><b> 圖3-5 汽車模型</b></p><p><b> 圖3-6 飛機模型</b></p><p> 接著是,文化模型的樹木。樹術(shù)透明紋理,本身的厚度不可忽略,即從任何角度看,都應(yīng)該出現(xiàn)一個類似柱體的透明紋理。對于這類物體的處理主要有兩種解決方法。&
38、lt;/p><p> 第一種方法是公告牌(Billboard)技術(shù)。公告牌是固定于某一點,可以繞一軸或點旋轉(zhuǎn)的多邊形,它永遠(yuǎn)面向于觀測者。它的本質(zhì)是用二維圖像來代替三維的實體模型,從而節(jié)省大量的資源,提高速度。但缺點是,從高空看,也效果不好,編程相對麻煩[6]。如圖3-7所示。</p><p><b> 圖3-7 </b></p><p>
39、另一種技術(shù)是作兩個或多個互相垂直的交叉面技術(shù)。應(yīng)用這種技術(shù),所有交義而都要雙面繪制,并貼上相同的紋理。例如作一個二叉面,則就必須繪制4個面,這種技術(shù)遠(yuǎn)看效果好,但它近看效果不好,容易看出破綻。相對于前一種方法,它雖然省去了編程上的麻煩,但是也增加了不少圖形繪制的負(fù)擔(dān)[7]。如圖3-8所示。 </p><p><b> 圖3-8</b></p><p><b&
40、gt; 3.2 場景設(shè)計</b></p><p><b> 3.2.1場景搭建</b></p><p> 場景的搭建主要是包括建筑物模型和文化模型的安放位置。</p><p> 建筑物模型的詳細(xì)坐標(biāo)位置如下表3-2所示。</p><p> 表3-2 建筑物模型的坐標(biāo)</p><p
41、> 文化模型的詳細(xì)坐標(biāo)如下表3-3所示。</p><p> 表3-3文化模型的坐標(biāo)</p><p> 3.2.2觀察者設(shè)置</p><p> 一個觀察者就是您仿真的觀察點。觀察所有的物體都是從觀察點發(fā)出的。在Vega Prime中觀察者的起始位置的默認(rèn)值是地形的原點。原點的通常位置是在西南角或地形的中點,可以在MultiGen Creator或Mode
42、lBuilder 3D中的地形OpenFlight文件中找到原點位置[8]。</p><p><b> Observer</b></p><p> Observer控制Vega內(nèi)視覺表現(xiàn),是通過把許多模擬的元素聚合在一起來控制觀測場景的,事實上,這些元素的聚合物要比其他的Vega類的聚合物少的多。每個觀察者都有關(guān)聯(lián)的場景(scene)、通道(channels)、環(huán)
43、境(environment)以及其他的用來描述可見的物體。</p><p> Observer包括myObserver、AUDIOberser和myPlaneOberver。</p><p> myObserver的設(shè)置</p><p> 在Look At Target和Look From Target中選擇No Selection。</p>&
44、lt;p> 在Position和Orientation中的設(shè)置如下表3-4所示。</p><p> 表3-4位子和方向的數(shù)據(jù)</p><p> 在更新位置(Update Position)列表中選擇myMotion(MotionGame),并且選擇Enable的復(fù)選框。</p><p> AUDIObserver的設(shè)置</p><p
45、> 在Channels和Attachment中分別添加myAUDIeChannel和myEnv(Env),并在Scene和Look From Target列表中分別選擇myScene和myAUDITransform(Transform),其他的都為默認(rèn)。</p><p> myPlaneObserver的設(shè)置</p><p> 和AUDIObserver的設(shè)置相似,在Chann
46、els和Attachment中分別添加myPlaneChannel和myEnv(Env),并在Scene和Look From Target列表中分別選擇myScene和myPlaneTransform(Transform),其他的都為默認(rèn)。</p><p> 2.Transform</p><p> Transform是一個動態(tài)坐標(biāo)系統(tǒng)。您在場景中設(shè)置的位置是物體,特殊效果光線或其它t
47、ransform的子系統(tǒng)。也就是說,transform的值與父系統(tǒng)有關(guān)[9]。該系統(tǒng)中,新建了兩個Transform,分別命名為AUDITransform和myPlaneTransform。</p><p> AUDITransform的設(shè)置</p><p> 在AUDITransform的Parent列表中選擇AUDI(Object)。</p><p> 在
48、Position和Orientation的設(shè)置如下表3-5所示。</p><p> 表3-5 位置和方向的數(shù)據(jù)</p><p> myPlaneTransform的設(shè)置</p><p> 在myPlaneTransform的Parent列表中選擇mtPlane(Object)。</p><p> 在Position和Orientati
49、on的設(shè)置如下表3-6所示。</p><p> 表3-6 位置和方向的數(shù)據(jù)</p><p><b> 3.Window</b></p><p> 在myWindow的Channels那欄中添加myChannel、AUDIChannel和myPlaneChannel。</p><p><b> 4.Cha
50、nnel</b></p><p> Channel包含myChannel、AUDIChannel和myPlaneChannel。</p><p> Draw Area中的數(shù)據(jù)如下表3-7所示。</p><p> 表3-7 Draw Area數(shù)據(jù)</p><p> 在Used By中的選擇如下表3-8所示。</p>
51、;<p> 表3-8 Used By的選擇</p><p> 3.2.3運動方式的選擇</p><p><b> 1.運動模式</b></p><p> 運動控制就是外設(shè)對運動體的控制,主要是在漫游運動模式下對各種運動模式的控制,用戶可以通過鍵盤、鼠標(biāo)甚至是觸摸以及它們相互的組合方式,來實現(xiàn)對運動體運動速度、旋轉(zhuǎn)速度和方向
52、等運動屬性的控制,進(jìn)而模擬出逼真的運動仿真效果[10]。</p><p> 漫游功能是視景仿真最基本的實現(xiàn)功能。用戶可以切換運動體的運動模式,這包括步行模式、無人機艙模式、人工控制飛行模式、跳躍模式、滑行模式、自由落體模式、旋轉(zhuǎn)模式。根據(jù)各自不同的運動體,如人,汽車,飛機等等運動模式對應(yīng)。</p><p> Vega提供給我們的運動模式如下表3-9所示。</p><
53、p> 表3-9運動模式的方式</p><p> 該設(shè)計選擇的是MotionGame模式。按住鼠標(biāo)左鍵,來控制朝向,在通過鍵盤上的方向鍵,來控制向左向右或前進(jìn)后退,操作起來比較的方便。</p><p> 下面對常用的幾種運動模式操作的介紹:</p><p> 轉(zhuǎn)體模式(MotionSpin):主要用于觀測模型,當(dāng)移動鼠標(biāo)向左時,模型在它的原點沿順時針旋轉(zhuǎn)
54、;當(dāng)移動鼠標(biāo)向右時,模型在它的原點沿逆時針旋轉(zhuǎn);當(dāng)按鼠標(biāo)中鍵時,可使物體或視點朝操作者移動或背離[11]。</p><p> 駕駛模式(MotionDrive):是一個簡單的汽車駕駛運動系統(tǒng)。通過控制它的最大速度、加速因子、減速因子,實現(xiàn)視點或運動對象的運動。當(dāng)輸入設(shè)備為三鍵鼠標(biāo)時,向右移動鼠標(biāo),視點或運動對象向右轉(zhuǎn)向;向左移動鼠標(biāo),視點或運動對象向左轉(zhuǎn)向;當(dāng)按鼠標(biāo)右鍵,實現(xiàn)視點或運動對象的加速動作;當(dāng)按鼠標(biāo)左
55、鍵,實現(xiàn)視點或運動對象的減速動作;當(dāng)按鼠標(biāo)中鍵,實現(xiàn)視點或運動對象的剎車動作。</p><p> 飛碟無規(guī)則模式(MotionUFO):模擬無慣性的飛行運動,即無動力驅(qū)動的飛機運動,一般用于視點在場景中的漫游。三鍵鼠標(biāo)的左鍵在這里充當(dāng)增壓渦輪的作用;右鍵類似驅(qū)動類型中剎車的作用,也可在運動的反方向加速;通過向下移動鼠標(biāo),可增加或抬高運動對象或視點的高度;向左或向右移動鼠標(biāo),可實現(xiàn)向左或向右的轉(zhuǎn)向。</p&
56、gt;<p> 步行模式(MotionWalk):步行運動模型與Drive運動模型很類似,以步行速度模擬步行動作。鼠標(biāo)左鍵與油門踏板類似,以一個固定速度給用戶一個向前的運動。按下鼠標(biāo)左鍵并左右移動輸入設(shè)備,會使用戶沿左右方向移動。按下鼠標(biāo)右鍵會使用戶以一個固定速度向前后移動。上下移動鼠標(biāo)將允許用戶向上和向下觀看。步行運動模型也能爬上簡單的臺階和樓梯。</p><p> 2.Pathtool 自動
57、導(dǎo)航路徑</p><p> 1)導(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)前控制點與下一個控制點之間的連接方
58、式等等。然后用一個.nav的標(biāo)記文件來存放標(biāo)記信息,導(dǎo)航器通過解釋標(biāo)記文件中的信息數(shù)據(jù)來控制對象實現(xiàn)定義路徑的運動。導(dǎo)航器會還可以進(jìn)行路徑運動的循環(huán)。一旦復(fù)位,導(dǎo)航器自動地跳轉(zhuǎn)到起始點[12]。</p><p> Way Points和Navigators原始對話框如圖3-9和圖3-10所示。</p><p> 圖3-9 Way Points對話框 圖3-1
59、0 Navigators對話框</p><p> 2.Way Points (路徑控制點)</p><p> 在Lynx Pathing模塊中定義Path對象,并以文件的形式保存, 該文件就是控制Path對象的數(shù)據(jù)文件。在Selected Path下拉菜單中選中一個Path對象,通過PathTool可以地進(jìn)行增加和調(diào)節(jié)控制點。 </p><p> 路徑控制點
60、設(shè)置如圖3-11所示。</p><p> 圖3-11 路徑控制點設(shè)置</p><p> PathTool中各個點的參數(shù)如下表3-10所示。</p><p> 表3-10 點的參數(shù)</p><p> 3.Navigators (導(dǎo)航)</p><p> 將設(shè)定好的的控制點鏈接,形成一個環(huán)路的導(dǎo)航路徑。Navi
61、gators文件創(chuàng)建對話框如下圖3-12所示。</p><p> 圖3-12 Navigators文件創(chuàng)建對話框</p><p><b> 3.2.4環(huán)境設(shè)置</b></p><p> LP里面的環(huán)境效果包括陽光、月光、霧、風(fēng)等。還可以控制一天中時間的流逝速度效果。你可以在幾分鐘的時間內(nèi)將黎明變成白天、黃昏和夜晚。</p>
62、<p> VP中的環(huán)境是云、霧等大氣現(xiàn)象的綜合體。它包含了陽光和月光源。LP中陽光和月光會依據(jù)天時進(jìn)行自動調(diào)整。</p><p> LP提供以下幾種效果來幫你創(chuàng)建一個實時的環(huán)境:</p><p> 1)太陽-由一個亮盤來代表太陽在天空中的位置。</p><p> 2)月亮-由另一個亮盤來代表月亮在天空中的位置。</p><p&g
63、t; 3)云層-云層的一層。</p><p> 4)穹頂-刻劃出天際線的效果。穹頂有一個無邊的地平面,顏色可以自定義[13]。</p><p><b> 1.改變天時</b></p><p> 將Time Multiplier的值設(shè)為1200,這樣一整天的天時渲染在不到2分鐘之內(nèi)就可以看到天色慢慢變黑的過程;同時還能看到太陽和月亮的升降
64、效果。</p><p><b> 2.改變云層紋理</b></p><p> 在myEnv界面的Environmental Effects選項里選擇并打開myEnvCloudLayer ,在Texture一欄里添加clouds_storm.inta就可以看到風(fēng)暴來臨前夕的天空效果。</p><p><b> 添加多云層和閃電&l
65、t;/b></p><p> 通過創(chuàng)建一個Envcloudvolume類,實現(xiàn)效果為天空出現(xiàn)一團烏云并時常有閃電出現(xiàn)。具體設(shè)置如圖3-13和圖3-14所示。</p><p> 圖3-13 圖3-14 </p><p><b> 3.2.5特殊效果</b></p>
66、;<p> VP的特效模塊提供了一個實時的特效庫,可以通過LP來配置特效,也可以通過VP的API來配置特效。并且特效也可以進(jìn)行形狀、比例和顏色的變化。</p><p> VP提供的特效包括以下幾種:</p><p> 1.Blade(vpFxBlade):旋轉(zhuǎn)的螺旋槳,可以縮放和定位,適合用于直升機和飛機的螺旋槳效果。</p><p> 2.M
67、issile Trail(vpFxMissileTrail):用有煙的軌跡來代表飛機或?qū)椀娘w行效果,可以隨著時間而變淡。</p><p> 3.Particle System(vpFxParticleSystem):多邊形集聚體,用來模擬諸如焰火和煙霧等效果。</p><p> 4.Debris(vpFxDebris):飛揚的碎片效果,經(jīng)常用于爆炸。</p><p
68、> 5.Explosion(vpFxExplosion):地面或空中的爆炸效果。</p><p> 6.Fire(vpFxFire):火焰效果。</p><p> 7.Smoke(vpFxSmoke):翻騰的煙云效果[14]。</p><p> 該系統(tǒng)中,可以看到兩個可操控的特殊效果。一個是飛機尾部噴射出來的彩帶,另一個是飛機的螺旋槳,所以選擇的兩種特
69、效類型是FxBlade和FxMissileTrail。</p><p> 首先介紹螺旋槳特效的設(shè)置。兩個螺旋槳的形狀,速度等特性都是一樣的,所以列舉一個即可。具體設(shè)置如下:</p><p> 在Main的Overall Duration中,設(shè)值為1e+06。</p><p> 在Number of Blades中,設(shè)值為4。</p><p&
70、gt; 在Rotation speed中,設(shè)值為1。</p><p> 在Base Radius中,設(shè)值為0.25。</p><p> 在Tip Radius中,設(shè)值為1.5。</p><p><b> 其他保持默認(rèn)。</b></p><p> 兩個螺旋槳的位置分布在機翼的兩邊且對稱。坐標(biāo)位置的設(shè)置如下表3-1
71、1所示。</p><p> 表3-11 螺旋槳的參數(shù)</p><p> 接下來是飛機尾部彩帶特效的設(shè)置。三條彩帶的長度為200,顏色分別為藍(lán)色、紫色、紅色,通過對Triggering的設(shè)置可以控制彩帶依次出現(xiàn)(只要在Start Time中設(shè)置不同的時間)。以紅色彩帶為例,設(shè)置如下:</p><p> 同樣也是在Main中設(shè)置,在Triggering Metho
72、d的下拉表選擇Time模式,設(shè)時間為2secs。</p><p> 在Overall Duration中,設(shè)值為1e+06。</p><p> 在Overall Color中,選擇紅顏色。</p><p> 在Missile Trail Length中,設(shè)值為200。</p><p><b> 其他保持默認(rèn)。</b&g
73、t;</p><p> 在三條彩帶的Positioning中Scale的值都為2,具體位置坐標(biāo)如下表3-12所示。</p><p> 表3-12 彩帶位置的坐標(biāo)</p><p> 特殊效果如下圖3-15所示:</p><p> 圖3-15 飛機的特殊效果</p><p> 3.3 交互控制的程序?qū)崿F(xiàn)</
74、p><p> 3.3.1 Vega API的調(diào)用</p><p> Vega的API函數(shù)和庫</p><p> Vega庫中的函數(shù)psVg可用于管理圖形硬件并提供了一種在復(fù)雜環(huán)境中進(jìn)行交互模擬的方法。Vega實用庫psPsi中包含了Vega函數(shù)和聲音仿真(Audio Works)等其他仿真模塊。</p><p> Vega庫有多種格式的
75、版本,版本間的區(qū)別在于:</p><p> 用于調(diào)試程序或優(yōu)化程序:在庫名的末尾加“D”表示用于調(diào)試程序。</p><p> 動態(tài)鏈接庫(.DLL)和靜態(tài)庫(.LIB):在庫名的末尾加“S”表示為靜態(tài)庫。</p><p> 應(yīng)當(dāng)注意,使用/MD選項是要建立全部的庫,因此要使用Run Time Library(RTL),運行庫的多線程(Multithreaded
76、)DLL[15]。</p><p> Vega API的初始化:</p><p> vp::initialize執(zhí)行如下任務(wù):</p><p> a.檢查license是否正確</p><p> b.初始化靜態(tài)變量(static variables)和單例類(singleton classes)</p><p>
77、; 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 interface)
78、</p><p> h.初始化內(nèi)核(kernel classes)</p><p><b> 初始化實例:</b></p><p> //vpModule::initializeModule(modulename);</p><p> vpModule::initializeModule是初始化你的應(yīng)用中所添加的
79、模塊。初始化所添加模塊和用戶定制模塊需要使用以下句法:</p><p><b> //</b></p><p><b> //初始化所有模塊</b></p><p><b> //</b></p><p> vpModule::initializeModule( &qu
80、ot;vp" );</p><p> vpModule::initializeModule( "vpEnv" );</p><p> vpModule::initializeModule( "vpMotion" );</p><p> vpModule::initializeModule( "vpLA
81、DBM" );</p><p> vpModule::initializeModule( "vpFx" );</p><p> vpModule::initializeModule( "vpIR" );</p><p><b> 2. VPAPP類</b></p><p
82、> ?。?)vpApp類用來定義一個典型的VP應(yīng)用的框架。它在vpApp.h中被定義了。所有子方法(member methods)都被內(nèi)嵌了。使用者可以拷貝和修改vpApp類。vpApp的主體封裝了VP應(yīng)用中經(jīng)常用到的vpKernel的功能。vpApp類控制實時功能(包括定義ACF、配置仿真類、仿真循環(huán)、更新和退出)。</p><p> vpApp *app = new vpApp;// create a
83、 vpApp instance</p><p> 從vpApp類創(chuàng)建一個新類,vpApp類的所有成員都可以多次定制以滿足你自己的應(yīng)用的需求。用戶可以通過vpApp類來創(chuàng)建自己的類。</p><p> (2)vpApp的方法</p><p> 1)define()方法</p><p> 通過這方法可以替代ACF執(zhí)行功能。參數(shù)就是用字符串
84、來替代ACF。與以往的Vega不同的是,在VP中,你可以多次定制并且實時調(diào)用多個ACF。這個功能頂替了Vega的vgScan函數(shù)。</p><p><b> 例子:</b></p><p><b> //調(diào)入ACF文件</b></p><p> //假定argv[1]就是當(dāng)前的ACF文件</p><
85、;p> if (argv[1])</p><p> app->define(argv[1]);</p><p> define(const char*)</p><p> virtual int vpApp::define(const char *filename);//描述-裝載和解析ACF文件</p><p> 自變
86、量-filename是所需ACF文件的名稱。這個值可以用一行語句來表示,也可以通過復(fù)雜的語句來表示。</p><p> Config() 方法</p><p> 該方法從ACF中分解而來,同時將不同的類關(guān)聯(lián)起來。例如,它將系統(tǒng)中定義的pipeline添加給服務(wù)管理器,并且為每個類配置相關(guān)的聯(lián)系。Config()功能是相互的,通過unconfig()可以將應(yīng)用配置返回到config()前
87、的狀態(tài)。Config()方法經(jīng)常被用戶反復(fù)運用[16]。</p><p><b> 例子:</b></p><p><b> Config()</b></p><p> //configure my app</p><p> app->configure();</p>&
88、lt;p> Shutdown()方法</p><p> vp::shutdown(); //退出VP</p><p> vp::shutdown執(zhí)行如下任務(wù):</p><p> a.釋放被kernel classes分配的內(nèi)存</p><p> b.結(jié)束各模塊以釋放它們在應(yīng)用中所占用的內(nèi)存</p><p&g
89、t;<b> c.終止多線程</b></p><p> d.將licenses返回給license server</p><p><b> VP的最小應(yīng)用</b></p><p> //這個例子是VP的最基本應(yīng)用程序配置</p><p> #include <vpApp.h>&
90、lt;/p><p> int main(int argc,char *argv[1])</p><p> { </p><p> vp::initialize(argc,argv); //初始化VP </p><p> vpApp *app=ne
91、w vpApp; //創(chuàng)建一個vpApp類</p><p> app->define(argv[1]); //裝載ACF文件 </p><p> app->configure(); //配置應(yīng)用 </p>&
92、lt;p> app->run(); //仿真循環(huán) </p><p> app->unref(); //取消引用 </p><p> vp::shutdown(); //
93、退出VP</p><p><b> return 0;</b></p><p><b> }</b></p><p> 3.3.2特殊效果的控制</p><p><b> 1.飛機彩帶的控制</b></p><p> 飛機總共有三條彩帶,分別為
94、紅色、藍(lán)色和紫色。通過覆寫鍵盤輸入,按‘R’或‘r’鍵來控制紅色彩帶,‘V’或‘v’鍵來控制紫色彩帶,藍(lán)色彩帶用‘b’或‘B’鍵控制??刂撇蕩С绦蝾愃?,具體介紹紅色彩帶的控制,代碼如下:</p><p> virtual void onKeyInput( vrWindow::Key key, int mod )</p><p><b> {</b></p&g
95、t;<p> switch ( key ) </p><p> { </p><p><b> //彩帶的鍵盤控制</b></p><p> //r鍵和R鍵控制紅色彩帶的出現(xiàn)和消失</p><p> case vrWindow::KEY_r:</p><p
96、> case vrWindow::KEY_R: </p><p> m_pMissileTrail_R = vpFxMissileTrail::find( "myFxMissileTrail_R" );</p><p> //當(dāng)redTrail的值為真時,彩帶出現(xiàn);否則,彩帶消失</p><p> redTrail = (!re
97、dTrail); </p><p> m_pMissileTrail_R->setEnable( redTrail );</p><p><b> break;</b></p><p><b> ......</b></p><p><b>
98、 ......</b></p><p> //v鍵和V鍵控制紅色彩帶的出現(xiàn)和消失</p><p> case vrWindow::KEY_v:</p><p> case vrWindow::KEY_V: </p><p><b> ......</b></p><p>
99、<b> ......</b></p><p> //b鍵和B鍵控制紅色彩帶的出現(xiàn)和消失 </p><p> case vrWindow::KEY_b:</p><p> case vrWindow::KEY_B: </p><p><b> ......</b><
100、/p><p><b> ......</b></p><p> 通過鍵盤輸入(按R或r,B或b,V或v),效果如下圖3-16所示。</p><p> 圖3-16 其中一條彩帶消失</p><p> 而對彩帶長度的控制,則需要通過組合鍵。按組合鍵‘shift-’來縮短彩帶的長度,延長彩帶就按‘shift+’。具體代碼如
101、下:</p><p> //減號鍵縮短彩帶長度</p><p> case vrWindow::KEY_MINUS_SIGN: </p><p> m_pMissileTrail->setLength( m_pMissileTrail->getLength() - 5.0f );</p><p><b> b
102、reak; </b></p><p> //加號鍵延長彩帶長度 </p><p> case vrWindow::KEY_PLUS_SIGN: </p><p> m_pMissileTrail->setLength( m_pMissileTrail->getLength() + 5.0f );</p><
103、;p><b> break;</b></p><p> 通過鍵盤輸入(按shift—或shift+),效果如下圖3-17所示。</p><p> 圖3-17 彩帶縮短</p><p> 2.飛機螺旋槳的控制</p><p> 飛機的螺旋槳有兩個。對螺旋槳的控制主要有4項:一、螺旋槳加減速;二、螺旋槳葉子增
104、減量;三、螺旋槳的旋轉(zhuǎn)半徑增減;四、螺旋槳葉子的半徑增減。每一項都有正反兩個方面,代碼也類似,所以都以正面為例,具體代碼如下:</p><p> //F1鍵控制螺旋槳的加速</p><p> case vrWindow::KEY_F1: </p><p> m_prop1->setRotationSpeed( m_prop1->getRotati
105、onSpeed() + 0.01f );</p><p> m_prop2->setRotationSpeed( m_prop2->getRotationSpeed() + 0.01f );</p><p><b> break;</b></p><p> //F2鍵控制螺旋槳的減速</p><p>
106、 case vrWindow::KEY_F2: </p><p><b> ......</b></p><p><b> ......</b></p><p> //F3鍵控制增加螺旋槳葉子的數(shù)量 </p><p> case vrWindow::KEY_F3:
107、 </p><p> m_prop1->setNumBlades( m_prop1->getNumBlades() + 1 );</p><p> m_prop2->setNumBlades( m_prop2->getNumBlades() + 1 );</p><p><b> break;</b></p&
108、gt;<p> //F4鍵控制減少螺旋槳葉子的數(shù)量</p><p> case vrWindow::KEY_F4: </p><p><b> ......</b></p><p><b> ......</b></p><p> //F5鍵控制增加螺旋槳旋轉(zhuǎn)的半徑<
109、/p><p> case vrWindow::KEY_F5: </p><p> m_prop1->setBaseRadius( m_prop1->getBaseRadius() + 0.1f );</p><p> m_prop2->setBaseRadius( m_prop2->getBaseRadius() + 0.1f );<
110、;/p><p><b> break;</b></p><p> //F6鍵控制減少螺旋槳旋轉(zhuǎn)的半徑</p><p> case vrWindow::KEY_F6: </p><p><b> ......</b></p><p><b> ......&l
111、t;/b></p><p> //F7鍵控制增長螺旋槳葉子的半徑</p><p> case vrWindow::KEY_F7: </p><p> m_prop1->setTipRadius( m_prop1->getTipRadius() + 0.1f );</p><p> m_prop2->setTi
112、pRadius( m_prop2->getTipRadius() + 0.1f );</p><p><b> break;</b></p><p> //F8鍵控制縮短螺旋槳葉子的半徑</p><p> case vrWindow::KEY_F8: </p><p><b> ......&l
113、t;/b></p><p><b> ......</b></p><p> //F9控制飛機的出沒</p><p> case vrWindow::KEY_F9:</p><p><b> {</b></p><p> vpObject *pE2cObjec
114、t = vpObject::find( "e2c" );</p><p> if( pE2cObject != NULL && pE2cObject->getRootNode() != NULL )</p><p><b> {</b></p><p> if( pE2cObject->ge
115、tRootNode()->getRenderMask() )</p><p> pE2cObject->getRootNode()->setRenderMask(0x0,vsNode::BITOP_AND);</p><p><b> else</b></p><p> pE2cObject->getRootNod
116、e()->setRenderMask(0x1,vsNode::BITOP_OR);</p><p><b> }</b></p><p><b> }</b></p><p> 通過鍵盤輸入,飛機特殊效果的對比如下圖3-18和3-19所示。</p><p> 圖3-18 初始的螺旋槳&
117、lt;/p><p> 圖3-19 變化后的螺旋槳</p><p> 3.飛機運動軌跡的設(shè)置</p><p> virtual void run( void )</p><p><b> {</b></p><p> while ( s_vpKernel->beginFrame() !=
118、 0 )</p><p><b> { </b></p><p> float hsin, hcos, psin, pcos; </p><p> m_hpr[0] += H_RATE;</p><p> m_hpr[2] += 1.0f;</p><p> if (
119、m_hpr[0] > 360.0f )</p><p> m_hpr[0] -= 360.0f;</p><p> if ( m_hpr[2] > 360.0f )</p><p> m_hpr[2] -= 360.0f;</p><p> vuSinCos( m_hpr[0], &hsin, &hcos
120、);</p><p> vuSinCos( m_hpr[1], &psin, &pcos );</p><p> m_xyz[0] = ORIGINX + RAD_FLIGHT * hcos;</p><p> m_xyz[1] = ORIGINY + RAD_FLIGHT * hsin;</p><p> m_xyz
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 校園連廊場景的交互漫游設(shè)計【文獻(xiàn)綜述】
- 校園連廊場景的交互漫游設(shè)計【任務(wù)書】
- 校園教學(xué)北區(qū)場景的交互漫游設(shè)計【畢業(yè)論文】
- 校園圖書館場景的交互漫游設(shè)計【畢業(yè)論文】
- 校園教學(xué)北區(qū)場景的交互漫游設(shè)計【開題報告】
- 校園教學(xué)北區(qū)場景的交互漫游設(shè)計【文獻(xiàn)綜述】
- 校園圖書館場景的交互漫游設(shè)計【開題報告】
- 校園教學(xué)北區(qū)場景的交互漫游設(shè)計【任務(wù)書】
- 校園圖書館場景的交互漫游設(shè)計【文獻(xiàn)綜述】
- 校園圖書館場景的交互漫游設(shè)計【任務(wù)書】
- 3d動漫游戲設(shè)計-場景設(shè)計---畢業(yè)論文
- 虛擬校園漫游系統(tǒng)的設(shè)計與開發(fā)畢業(yè)論文
- 畢業(yè)論文-基于非線性編輯校園場景設(shè)計
- 基于web的校園虛擬漫游系統(tǒng)---畢業(yè)論文
- 三維校園的開發(fā)與設(shè)計即全景校園虛擬漫游技術(shù)的實現(xiàn)畢業(yè)論文設(shè)計
- 畢業(yè)論文-基于x3d的虛擬校園漫游系統(tǒng)設(shè)計與實現(xiàn)
- 基于web的三維虛擬漫游系統(tǒng)——樓體模塊,校園場景,會議室,多媒體教室---畢業(yè)論文
- 校園局域設(shè)計畢業(yè)論文
- 人機交互課程設(shè)計---vrml設(shè)計--虛擬校園漫游系統(tǒng)
- 虛擬校園場景建模和漫游系統(tǒng)實現(xiàn).pdf
評論
0/150
提交評論