校園連廊場(chǎng)景的交互漫游設(shè)計(jì)【畢業(yè)論文】_第1頁(yè)
已閱讀1頁(yè),還剩41頁(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、<p>  本科畢業(yè)設(shè)計(jì)(論文)</p><p><b>  ( 屆)</b></p><p>  論文題目 校園連廊場(chǎng)景的交互漫游設(shè)計(jì)</p><p>  所在學(xué)院 計(jì)算機(jī)與信息學(xué)院 </p><p>  專業(yè)班級(jí) 計(jì)算機(jī)科學(xué)與技術(shù) </p>&

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

3、聲明,所呈交的畢業(yè)設(shè)計(jì)作品和論文是本人經(jīng)過(guò)近四年的基礎(chǔ)課程與專業(yè)課程學(xué)習(xí)的基礎(chǔ)上,在指導(dǎo)老師的指導(dǎo)下,經(jīng)過(guò)幾個(gè)月集中的畢業(yè)設(shè)計(jì)學(xué)習(xí)、實(shí)踐和努力工作所取得的成果。據(jù)本人查證,除了文中特別加以標(biāo)注和致謝的地方外,設(shè)計(jì)作品和論文中不包含其他人已經(jīng)發(fā)表或撰寫過(guò)的研究成果。我承諾,設(shè)計(jì)作品和論文中的所有內(nèi)容均真實(shí)、可信。</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++開(kāi)發(fā)平臺(tái)23</p><p>  2.4 輔助工具23</p><p>  3漫游系統(tǒng)的設(shè)計(jì)24<

6、;/p><p>  3.1場(chǎng)景元素單獨(dú)模型24</p><p>  3.1.1校園建筑物模型24</p><p>  3.1.2文化模型26</p><p>  3.2 場(chǎng)景設(shè)計(jì)27</p><p>  3.2.1場(chǎng)景搭建27</p><p>  3.2.2觀察者設(shè)置28</p&g

7、t;<p>  3.2.3運(yùn)動(dòng)方式的選擇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開(kāi)發(fā)中問(wèn)題的探究46</p><p><b>  5總結(jié)49</b></p><p><b>  致謝50</b></p><p><b>  [參考文獻(xiàn)]51</b></p><p>  附錄1:測(cè)試記錄52<

9、/p><p>  附錄2:作品說(shuō)明書53</p><p><b>  摘 要</b></p><p>  虛擬現(xiàn)實(shí)技術(shù)以計(jì)算機(jī)技術(shù)為核心生成逼真的虛擬環(huán)境。用戶通過(guò)必要的設(shè)備與虛擬環(huán)境中的物體進(jìn)行交互,產(chǎn)生親臨真實(shí)環(huán)境的感受。</p><p>  本課題以浙江萬(wàn)里學(xué)院為背景,通過(guò)MultiGen Creator和3DS M

10、ax對(duì)校園模型進(jìn)行創(chuàng)建和修改,通過(guò)Lynx Prime對(duì)校園場(chǎng)景進(jìn)行搭建與配置,真實(shí)呈現(xiàn)出校園連廊場(chǎng)景。</p><p>  同時(shí)加入物體運(yùn)動(dòng)和粒子特效,通過(guò)VegaPrime API、C++開(kāi)發(fā)平臺(tái)對(duì)粒子特效進(jìn)行控制,實(shí)現(xiàn)校園連廊場(chǎng)景的交互漫游設(shè)計(jì)。</p><p>  關(guān)鍵詞:虛擬現(xiàn)實(shí),漫游,連廊,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í)技術(shù)是20世紀(jì)80年代新崛起的一種綜合集成技術(shù),由計(jì)算機(jī)硬件、軟件以及各種傳感器構(gòu)成的三維信息虛擬環(huán)境,可以逼真地模擬現(xiàn)實(shí)世界(甚至是不存在的)的事物和環(huán)境,可通過(guò)操控,與虛擬環(huán)境進(jìn)行交互。</p><p>  虛擬

16、現(xiàn)實(shí)在最近幾年內(nèi)發(fā)展迅速,已經(jīng)發(fā)展成為了非常重要的人機(jī)交互的界面,相比于傳統(tǒng)的人機(jī)界面還有流行的視窗操作,虛擬現(xiàn)實(shí)在技術(shù)上非常明顯的提高,可以說(shuō)VR 技術(shù)的出現(xiàn)從根本上打破了人類局限于地理空間信息認(rèn)知方面觀點(diǎn)。 </p><p>  隨著隨著計(jì)算機(jī)技術(shù)的高速發(fā)展,各種仿真軟件技術(shù)的發(fā)展和計(jì)算機(jī)圖形處理性能的提升,虛擬現(xiàn)實(shí)技術(shù)進(jìn)行復(fù)雜場(chǎng)景的仿真和場(chǎng)景的交互漫游已成為可能。國(guó)內(nèi)外越來(lái)越多的仿真用戶采用視景仿真技術(shù)來(lái)模

17、擬人類生活的環(huán)境,例如校園、軍事基地、住宅、商業(yè)廣場(chǎng)等等。所以,它在城市規(guī)劃、旅游業(yè)、娛樂(lè)、教育、工業(yè)等眾多領(lǐng)域都有廣泛的應(yīng)用。</p><p>  利用這一技術(shù)我們可以呈現(xiàn)較為真實(shí)的城市面貌,游覽虛擬校園環(huán)境,控制交通工具運(yùn)動(dòng)和碰撞,展示粒子的特殊效果,甚至還能為電影做特技等等,可見(jiàn)虛擬交互漫游的功能多么強(qiáng)大。</p><p>  MultiGen Creator系列軟件由美國(guó)Multi

18、gen-Paradigm公司開(kāi)發(fā),在視景仿真、交互式游戲、科學(xué)可視化等實(shí)時(shí)仿真領(lǐng)域有著世界領(lǐng)先的地位。Multigen Creator是一個(gè)軟件包,專門創(chuàng)建用于視景仿真的實(shí)時(shí)三維模型。Vega是MultiGen-Paradigm公司最主要的工業(yè)軟件環(huán)境,用于實(shí)時(shí)視覺(jué)模擬、虛擬現(xiàn)實(shí)和普通視覺(jué)應(yīng)用。Vega將先進(jìn)的模擬功能和易用工具相結(jié)合,對(duì)于復(fù)雜的應(yīng)用,能夠提供便捷的創(chuàng)建、編輯和驅(qū)動(dòng)工具,顯著地提高工作效率。兩者相結(jié)合就可以把靜止模型變成

19、動(dòng)態(tài)的。用戶可以通過(guò)程序添加控制,實(shí)現(xiàn)人機(jī)交互,讓用戶有身臨其境的感覺(jué)[1]。 </p><p><b>  2主要技術(shù)</b></p><p>  2.1 Vega Prime API</p><p>  Vega Prime是美國(guó)MultiGen Paradigm公司應(yīng)用于虛擬現(xiàn)實(shí)和實(shí)時(shí)視景仿真等領(lǐng)域的世界領(lǐng)先的軟件開(kāi)發(fā)環(huán)境。Vega P

20、rime將簡(jiǎn)單易用的可視化工具與高級(jí)仿真功能巧妙地結(jié)合起來(lái),從而使用戶可以快捷地創(chuàng)建、編輯、運(yùn)行復(fù)雜的仿真應(yīng)用。</p><p>  Vega Prime 提供真正跨平臺(tái)、可擴(kuò)展的開(kāi)發(fā)環(huán)境,來(lái)高效創(chuàng)建和配置視景仿真、城市仿真、基于仿真的訓(xùn)練、通用可視化應(yīng)用。它既具有強(qiáng)大的功能來(lái)滿足當(dāng)今最為復(fù)雜的應(yīng)用要求,又具備高度的易用性來(lái)提高效率。</p><p>  Vega Prime 基于VSG(

21、Vega Scene Graph——MPI 公司先進(jìn)的跨平臺(tái)場(chǎng)景圖形API,底層(OpenGL),同時(shí)包括Lynx Prime GUI (用戶圖形界面)工具,讓用戶既可以用圖形化的工具進(jìn)行快速配置,又可以用底層場(chǎng)景圖形API 來(lái)進(jìn)行應(yīng)用特定功能的創(chuàng)建。它將先進(jìn)的功能和良好的易用性結(jié)合在一起,幫助用戶快速、準(zhǔn)確地開(kāi)發(fā)實(shí)時(shí)三維應(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 是一個(gè)可擴(kuò)展的、跨平臺(tái)的GUI 配置工具,它用標(biāo)準(zhǔn)的基于XML的數(shù)據(jù)交換格式以提供最大的靈活性,極大地增強(qiáng)了VegaPrime 應(yīng)用的快速創(chuàng)建、修改和配置。</p><p>  Lynx Prime是用來(lái)設(shè)定和預(yù)覽Vega應(yīng)用

23、程序的圖形式用戶界面。這些Vega應(yīng)用程序可以是用戶在Vega開(kāi)發(fā)環(huán)境下建立的程序,也可以是使用整個(gè)Vega軟件包執(zhí)行的一個(gè)基本Vega應(yīng)用程序。</p><p>  Lynx Prime圖形環(huán)境是可點(diǎn)擊式的,用戶只需用鼠標(biāo)的點(diǎn)擊即可驅(qū)動(dòng)圖形中的對(duì)象物以及動(dòng)畫中的實(shí)時(shí)控制。它可以在不涉及源代碼的前提下便捷地改變應(yīng)用程序的性能,如顯示通道、多CPU資源分配、視點(diǎn)、雙察看、特殊效果、時(shí)間尺度、系統(tǒng)配置、模型和數(shù)據(jù)庫(kù)等

24、。此外,Lynx Prime的開(kāi)放性使用戶可以根據(jù)自己的特殊需求賦予其新的功能。</p><p>  Lynx Prime的預(yù)覽功能可使用實(shí)時(shí)地看到修改的效果。事實(shí)上,這個(gè)強(qiáng)大而全面的仿真工具可以幫助用戶輕而易舉地完成工作任務(wù)。</p><p>  Vega使用Lynx Prime界面定義和預(yù)覽Vega的應(yīng)用程序。在Vega中包含了創(chuàng)建一個(gè)應(yīng)用程序所必須的全部API,但是簡(jiǎn)單的應(yīng)用程序僅靠

25、Lynx Prime就可以實(shí)現(xiàn),Lynx Prime允許用戶在不用寫源代碼的情況下即可配置一個(gè)應(yīng)用程序。在許多場(chǎng)合,對(duì)于一個(gè)仿真應(yīng)用程序可以使用Lynx Prime和Vega的API函數(shù)[3]。</p><p>  LP用戶界面包括四個(gè)部分:實(shí)例樹(shù)形顯示區(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++開(kāi)發(fā)平臺(tái)</p><p>  對(duì)于在Windows平臺(tái)上開(kāi)發(fā)Vega應(yīng)用程序,考慮到Vega函數(shù)是用C++語(yǔ)言編寫的,故采用Microsoft Visual Studio .NET 2003來(lái)作為開(kāi)發(fā)工具,特別是Visual C++中的MFC類庫(kù)是一個(gè)相當(dāng)成熟的類庫(kù),基于該類

27、庫(kù)開(kāi)發(fā)的應(yīng)用程序不僅結(jié)構(gòu)合理緊湊,而且可以大大縮短開(kāi)發(fā)周期[4]。</p><p>  若要在Visual C++環(huán)境下運(yùn)行Vega應(yīng)用程序,就要對(duì)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++的代碼生成,在運(yùn)行時(shí)庫(kù)中選擇多線程DLL (/MD)。</p><p>  4.選擇連接器中的常規(guī),在附加庫(kù)目錄列表中添加$(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系列軟件由美國(guó)Multigen-Paradigm公司開(kāi)發(fā),在視景仿真、交互式游戲、科學(xué)可視化等實(shí)時(shí)仿

32、真領(lǐng)域有著世界領(lǐng)先的地位。Multigen Creator是一個(gè)軟件包,專門創(chuàng)建用于視景仿真的實(shí)時(shí)三維模型[5]。</p><p>  校園建筑物的模型,采用實(shí)驗(yàn)室已有的材料,所以,只需要通過(guò)Creator完成對(duì)模型的簡(jiǎn)單操作,比如移動(dòng),顯示坐標(biāo),放大縮小等等。</p><p><b>  3DS Max</b></p><p>  3D St

33、udio Max,常簡(jiǎn)稱為3ds Max或MAX,是Autodesk公司開(kāi)發(fā)的基于PC系統(tǒng)的三維動(dòng)畫渲染和制作軟件。它廣泛應(yīng)用于廣告、影視、工業(yè)設(shè)計(jì)、建筑設(shè)計(jì)、多媒體制作、游戲、輔助教學(xué)以及工程可視化等領(lǐng)域。在國(guó)內(nèi)發(fā)展的相對(duì)比較成熟的建筑效果圖和建筑動(dòng)畫制作中,3DS MAX的使用率更是占據(jù)了絕對(duì)的優(yōu)勢(shì)。</p><p>  系統(tǒng)中的運(yùn)動(dòng)模型是從網(wǎng)上收集的,格式有點(diǎn)出入,文件也比較大。但通過(guò)運(yùn)用MAX,減少點(diǎn)面和

34、紋理,可以很好的轉(zhuǎn)換成.flt格式且文件比較小。</p><p><b>  3漫游系統(tǒng)的設(shè)計(jì)</b></p><p>  3.1場(chǎng)景元素單獨(dú)模型</p><p>  3.1.1校園建筑物模型</p><p>  校園建筑物的模型包括教學(xué)樓,空中花園和校園連廊,如下表3-1所示。</p><p>

35、  表3-1 建筑物模型數(shù)據(jù)</p><p>  下面的一號(hào)、三號(hào)教學(xué)樓、連廊和空中花園,分別如圖3-1,3-2,3-3,3-4所示。</p><p>  圖3-1 一號(hào)教學(xué)樓</p><p>  圖3-2 三號(hào)教學(xué)樓</p><p><b>  圖3-3 校園連廊</b></p><p><

36、;b>  圖3-4 空中花園</b></p><p><b>  3.1.2文化模型</b></p><p>  文化模型包括運(yùn)動(dòng)的物體和樹(shù)木,例如汽車,飛機(jī),樹(shù)等等。</p><p>  其中汽車的模型從網(wǎng)絡(luò)上收集的,然后通過(guò)軟件3D-Max 轉(zhuǎn)換成 .flt ,而飛機(jī)的模型是系統(tǒng)自帶的。</p><p&

37、gt;  模型樣式如圖3-5和3-6所示。</p><p><b>  圖3-5 汽車模型</b></p><p><b>  圖3-6 飛機(jī)模型</b></p><p>  接著是,文化模型的樹(shù)木。樹(shù)術(shù)透明紋理,本身的厚度不可忽略,即從任何角度看,都應(yīng)該出現(xiàn)一個(gè)類似柱體的透明紋理。對(duì)于這類物體的處理主要有兩種解決方法。&

38、lt;/p><p>  第一種方法是公告牌(Billboard)技術(shù)。公告牌是固定于某一點(diǎn),可以繞一軸或點(diǎn)旋轉(zhuǎn)的多邊形,它永遠(yuǎn)面向于觀測(cè)者。它的本質(zhì)是用二維圖像來(lái)代替三維的實(shí)體模型,從而節(jié)省大量的資源,提高速度。但缺點(diǎn)是,從高空看,也效果不好,編程相對(duì)麻煩[6]。如圖3-7所示。</p><p><b>  圖3-7 </b></p><p>  

39、另一種技術(shù)是作兩個(gè)或多個(gè)互相垂直的交叉面技術(shù)。應(yīng)用這種技術(shù),所有交義而都要雙面繪制,并貼上相同的紋理。例如作一個(gè)二叉面,則就必須繪制4個(gè)面,這種技術(shù)遠(yuǎn)看效果好,但它近看效果不好,容易看出破綻。相對(duì)于前一種方法,它雖然省去了編程上的麻煩,但是也增加了不少圖形繪制的負(fù)擔(dān)[7]。如圖3-8所示。 </p><p><b>  圖3-8</b></p><p><b&

40、gt;  3.2 場(chǎng)景設(shè)計(jì)</b></p><p><b>  3.2.1場(chǎng)景搭建</b></p><p>  場(chǎng)景的搭建主要是包括建筑物模型和文化模型的安放位置。</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>  一個(gè)觀察者就是您仿真的觀察點(diǎn)。觀察所有的物體都是從觀察點(diǎn)發(fā)出的。在Vega Prime中觀察者的起始位置的默認(rèn)值是地形的原點(diǎn)。原點(diǎn)的通常位置是在西南角或地形的中點(diǎn),可以在MultiGen Creator或Mode

42、lBuilder 3D中的地形OpenFlight文件中找到原點(diǎn)位置[8]。</p><p><b>  Observer</b></p><p>  Observer控制Vega內(nèi)視覺(jué)表現(xiàn),是通過(guò)把許多模擬的元素聚合在一起來(lái)控制觀測(cè)場(chǎng)景的,事實(shí)上,這些元素的聚合物要比其他的Vega類的聚合物少的多。每個(gè)觀察者都有關(guān)聯(lián)的場(chǎng)景(scene)、通道(channels)、環(huán)

43、境(environment)以及其他的用來(lái)描述可見(jiàn)的物體。</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是一個(gè)動(dòng)態(tài)坐標(biāo)系統(tǒng)。您在場(chǎng)景中設(shè)置的位置是物體,特殊效果光線或其它t

47、ransform的子系統(tǒng)。也就是說(shuō),transform的值與父系統(tǒng)有關(guān)[9]。該系統(tǒng)中,新建了兩個(gè)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運(yùn)動(dòng)方式的選擇</p><p><b>  1.運(yùn)動(dòng)模式</b></p><p>  運(yùn)動(dòng)控制就是外設(shè)對(duì)運(yùn)動(dòng)體的控制,主要是在漫游運(yùn)動(dòng)模式下對(duì)各種運(yùn)動(dòng)模式的控制,用戶可以通過(guò)鍵盤、鼠標(biāo)甚至是觸摸以及它們相互的組合方式,來(lái)實(shí)現(xiàn)對(duì)運(yùn)動(dòng)體運(yùn)動(dòng)速度、旋轉(zhuǎn)速度和方向

52、等運(yùn)動(dòng)屬性的控制,進(jìn)而模擬出逼真的運(yùn)動(dòng)仿真效果[10]。</p><p>  漫游功能是視景仿真最基本的實(shí)現(xiàn)功能。用戶可以切換運(yùn)動(dòng)體的運(yùn)動(dòng)模式,這包括步行模式、無(wú)人機(jī)艙模式、人工控制飛行模式、跳躍模式、滑行模式、自由落體模式、旋轉(zhuǎn)模式。根據(jù)各自不同的運(yùn)動(dòng)體,如人,汽車,飛機(jī)等等運(yùn)動(dòng)模式對(duì)應(yīng)。</p><p>  Vega提供給我們的運(yùn)動(dòng)模式如下表3-9所示。</p><

53、p>  表3-9運(yùn)動(dòng)模式的方式</p><p>  該設(shè)計(jì)選擇的是MotionGame模式。按住鼠標(biāo)左鍵,來(lái)控制朝向,在通過(guò)鍵盤上的方向鍵,來(lái)控制向左向右或前進(jìn)后退,操作起來(lái)比較的方便。</p><p>  下面對(duì)常用的幾種運(yùn)動(dòng)模式操作的介紹:</p><p>  轉(zhuǎn)體模式(MotionSpin):主要用于觀測(cè)模型,當(dāng)移動(dòng)鼠標(biāo)向左時(shí),模型在它的原點(diǎn)沿順時(shí)針旋轉(zhuǎn)

54、;當(dāng)移動(dòng)鼠標(biāo)向右時(shí),模型在它的原點(diǎn)沿逆時(shí)針旋轉(zhuǎn);當(dāng)按鼠標(biāo)中鍵時(shí),可使物體或視點(diǎn)朝操作者移動(dòng)或背離[11]。</p><p>  駕駛模式(MotionDrive):是一個(gè)簡(jiǎn)單的汽車駕駛運(yùn)動(dòng)系統(tǒng)。通過(guò)控制它的最大速度、加速因子、減速因子,實(shí)現(xiàn)視點(diǎn)或運(yùn)動(dòng)對(duì)象的運(yùn)動(dòng)。當(dāng)輸入設(shè)備為三鍵鼠標(biāo)時(shí),向右移動(dòng)鼠標(biāo),視點(diǎn)或運(yùn)動(dòng)對(duì)象向右轉(zhuǎn)向;向左移動(dòng)鼠標(biāo),視點(diǎn)或運(yùn)動(dòng)對(duì)象向左轉(zhuǎn)向;當(dāng)按鼠標(biāo)右鍵,實(shí)現(xiàn)視點(diǎn)或運(yùn)動(dòng)對(duì)象的加速動(dòng)作;當(dāng)按鼠標(biāo)左

55、鍵,實(shí)現(xiàn)視點(diǎn)或運(yùn)動(dòng)對(duì)象的減速動(dòng)作;當(dāng)按鼠標(biāo)中鍵,實(shí)現(xiàn)視點(diǎn)或運(yùn)動(dòng)對(duì)象的剎車動(dòng)作。</p><p>  飛碟無(wú)規(guī)則模式(MotionUFO):模擬無(wú)慣性的飛行運(yùn)動(dòng),即無(wú)動(dòng)力驅(qū)動(dòng)的飛機(jī)運(yùn)動(dòng),一般用于視點(diǎn)在場(chǎng)景中的漫游。三鍵鼠標(biāo)的左鍵在這里充當(dāng)增壓渦輪的作用;右鍵類似驅(qū)動(dòng)類型中剎車的作用,也可在運(yùn)動(dòng)的反方向加速;通過(guò)向下移動(dòng)鼠標(biāo),可增加或抬高運(yùn)動(dòng)對(duì)象或視點(diǎn)的高度;向左或向右移動(dòng)鼠標(biāo),可實(shí)現(xiàn)向左或向右的轉(zhuǎn)向。</p&

56、gt;<p>  步行模式(MotionWalk):步行運(yùn)動(dòng)模型與Drive運(yùn)動(dòng)模型很類似,以步行速度模擬步行動(dòng)作。鼠標(biāo)左鍵與油門踏板類似,以一個(gè)固定速度給用戶一個(gè)向前的運(yùn)動(dòng)。按下鼠標(biāo)左鍵并左右移動(dòng)輸入設(shè)備,會(huì)使用戶沿左右方向移動(dòng)。按下鼠標(biāo)右鍵會(huì)使用戶以一個(gè)固定速度向前后移動(dòng)。上下移動(dòng)鼠標(biāo)將允許用戶向上和向下觀看。步行運(yùn)動(dòng)模型也能爬上簡(jiǎn)單的臺(tái)階和樓梯。</p><p>  2.Pathtool 自動(dòng)

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

58、式等等。然后用一個(gè).nav的標(biāo)記文件來(lái)存放標(biāo)記信息,導(dǎo)航器通過(guò)解釋標(biāo)記文件中的信息數(shù)據(jù)來(lái)控制對(duì)象實(shí)現(xiàn)定義路徑的運(yùn)動(dòng)。導(dǎo)航器會(huì)還可以進(jìn)行路徑運(yùn)動(dòng)的循環(huán)。一旦復(fù)位,導(dǎo)航器自動(dòng)地跳轉(zhuǎn)到起始點(diǎn)[12]。</p><p>  Way Points和Navigators原始對(duì)話框如圖3-9和圖3-10所示。</p><p>  圖3-9 Way Points對(duì)話框 圖3-1

59、0 Navigators對(duì)話框</p><p>  2.Way Points (路徑控制點(diǎn))</p><p>  在Lynx Pathing模塊中定義Path對(duì)象,并以文件的形式保存, 該文件就是控制Path對(duì)象的數(shù)據(jù)文件。在Selected Path下拉菜單中選中一個(gè)Path對(duì)象,通過(guò)PathTool可以地進(jìn)行增加和調(diào)節(jié)控制點(diǎn)。 </p><p>  路徑控制點(diǎn)

60、設(shè)置如圖3-11所示。</p><p>  圖3-11 路徑控制點(diǎn)設(shè)置</p><p>  PathTool中各個(gè)點(diǎn)的參數(shù)如下表3-10所示。</p><p>  表3-10 點(diǎn)的參數(shù)</p><p>  3.Navigators (導(dǎo)航)</p><p>  將設(shè)定好的的控制點(diǎn)鏈接,形成一個(gè)環(huán)路的導(dǎo)航路徑。Navi

61、gators文件創(chuàng)建對(duì)話框如下圖3-12所示。</p><p>  圖3-12 Navigators文件創(chuàng)建對(duì)話框</p><p><b>  3.2.4環(huán)境設(shè)置</b></p><p>  LP里面的環(huán)境效果包括陽(yáng)光、月光、霧、風(fēng)等。還可以控制一天中時(shí)間的流逝速度效果。你可以在幾分鐘的時(shí)間內(nèi)將黎明變成白天、黃昏和夜晚。</p>

62、<p>  VP中的環(huán)境是云、霧等大氣現(xiàn)象的綜合體。它包含了陽(yáng)光和月光源。LP中陽(yáng)光和月光會(huì)依據(jù)天時(shí)進(jìn)行自動(dòng)調(diào)整。</p><p>  LP提供以下幾種效果來(lái)幫你創(chuàng)建一個(gè)實(shí)時(shí)的環(huán)境:</p><p>  1)太陽(yáng)-由一個(gè)亮盤來(lái)代表太陽(yáng)在天空中的位置。</p><p>  2)月亮-由另一個(gè)亮盤來(lái)代表月亮在天空中的位置。</p><p&g

63、t;  3)云層-云層的一層。</p><p>  4)穹頂-刻劃出天際線的效果。穹頂有一個(gè)無(wú)邊的地平面,顏色可以自定義[13]。</p><p><b>  1.改變天時(shí)</b></p><p>  將Time Multiplier的值設(shè)為1200,這樣一整天的天時(shí)渲染在不到2分鐘之內(nèi)就可以看到天色慢慢變黑的過(guò)程;同時(shí)還能看到太陽(yáng)和月亮的升降

64、效果。</p><p><b>  2.改變?cè)茖蛹y理</b></p><p>  在myEnv界面的Environmental Effects選項(xiàng)里選擇并打開(kāi)myEnvCloudLayer ,在Texture一欄里添加clouds_storm.inta就可以看到風(fēng)暴來(lái)臨前夕的天空效果。</p><p><b>  添加多云層和閃電&l

65、t;/b></p><p>  通過(guò)創(chuàng)建一個(gè)Envcloudvolume類,實(shí)現(xiàn)效果為天空出現(xiàn)一團(tuán)烏云并時(shí)常有閃電出現(xiàn)。具體設(shè)置如圖3-13和圖3-14所示。</p><p>  圖3-13 圖3-14 </p><p><b>  3.2.5特殊效果</b></p>

66、;<p>  VP的特效模塊提供了一個(gè)實(shí)時(shí)的特效庫(kù),可以通過(guò)LP來(lái)配置特效,也可以通過(guò)VP的API來(lái)配置特效。并且特效也可以進(jìn)行形狀、比例和顏色的變化。</p><p>  VP提供的特效包括以下幾種:</p><p>  1.Blade(vpFxBlade):旋轉(zhuǎn)的螺旋槳,可以縮放和定位,適合用于直升機(jī)和飛機(jī)的螺旋槳效果。</p><p>  2.M

67、issile Trail(vpFxMissileTrail):用有煙的軌跡來(lái)代表飛機(jī)或?qū)椀娘w行效果,可以隨著時(shí)間而變淡。</p><p>  3.Particle System(vpFxParticleSystem):多邊形集聚體,用來(lái)模擬諸如焰火和煙霧等效果。</p><p>  4.Debris(vpFxDebris):飛揚(yáng)的碎片效果,經(jīng)常用于爆炸。</p><p

68、>  5.Explosion(vpFxExplosion):地面或空中的爆炸效果。</p><p>  6.Fire(vpFxFire):火焰效果。</p><p>  7.Smoke(vpFxSmoke):翻騰的煙云效果[14]。</p><p>  該系統(tǒng)中,可以看到兩個(gè)可操控的特殊效果。一個(gè)是飛機(jī)尾部噴射出來(lái)的彩帶,另一個(gè)是飛機(jī)的螺旋槳,所以選擇的兩種特

69、效類型是FxBlade和FxMissileTrail。</p><p>  首先介紹螺旋槳特效的設(shè)置。兩個(gè)螺旋槳的形狀,速度等特性都是一樣的,所以列舉一個(gè)即可。具體設(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>  兩個(gè)螺旋槳的位置分布在機(jī)翼的兩邊且對(duì)稱。坐標(biāo)位置的設(shè)置如下表3-1

71、1所示。</p><p>  表3-11 螺旋槳的參數(shù)</p><p>  接下來(lái)是飛機(jī)尾部彩帶特效的設(shè)置。三條彩帶的長(zhǎng)度為200,顏色分別為藍(lán)色、紫色、紅色,通過(guò)對(duì)Triggering的設(shè)置可以控制彩帶依次出現(xiàn)(只要在Start Time中設(shè)置不同的時(shí)間)。以紅色彩帶為例,設(shè)置如下:</p><p>  同樣也是在Main中設(shè)置,在Triggering Metho

72、d的下拉表選擇Time模式,設(shè)時(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 飛機(jī)的特殊效果</p><p>  3.3 交互控制的程序?qū)崿F(xiàn)</

74、p><p>  3.3.1 Vega API的調(diào)用</p><p>  Vega的API函數(shù)和庫(kù)</p><p>  Vega庫(kù)中的函數(shù)psVg可用于管理圖形硬件并提供了一種在復(fù)雜環(huán)境中進(jìn)行交互模擬的方法。Vega實(shí)用庫(kù)psPsi中包含了Vega函數(shù)和聲音仿真(Audio Works)等其他仿真模塊。</p><p>  Vega庫(kù)有多種格式的

75、版本,版本間的區(qū)別在于:</p><p>  用于調(diào)試程序或優(yōu)化程序:在庫(kù)名的末尾加“D”表示用于調(diào)試程序。</p><p>  動(dòng)態(tài)鏈接庫(kù)(.DLL)和靜態(tài)庫(kù)(.LIB):在庫(kù)名的末尾加“S”表示為靜態(tài)庫(kù)。</p><p>  應(yīng)當(dāng)注意,使用/MD選項(xiàng)是要建立全部的庫(kù),因此要使用Run Time Library(RTL),運(yùn)行庫(kù)的多線程(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.初始化渲染庫(kù)(rendering library)</p><p>  e.初始化場(chǎng)景(scene graph)</p><p>  f.初始化ACF剝析程序(ACF parser)</p><p>  g.初始化模塊界面(module interface)

78、</p><p>  h.初始化內(nèi)核(kernel classes)</p><p><b>  初始化實(shí)例:</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類用來(lái)定義一個(gè)典型的VP應(yīng)用的框架。它在vpApp.h中被定義了。所有子方法(member methods)都被內(nèi)嵌了。使用者可以拷貝和修改vpApp類。vpApp的主體封裝了VP應(yīng)用中經(jīng)常用到的vpKernel的功能。vpApp類控制實(shí)時(shí)功能(包括定義ACF、配置仿真類、仿真循環(huán)、更新和退出)。</p><p>  vpApp *app = new vpApp;// create a

83、 vpApp instance</p><p>  從vpApp類創(chuàng)建一個(gè)新類,vpApp類的所有成員都可以多次定制以滿足你自己的應(yīng)用的需求。用戶可以通過(guò)vpApp類來(lái)創(chuàng)建自己的類。</p><p> ?。?)vpApp的方法</p><p>  1)define()方法</p><p>  通過(guò)這方法可以替代ACF執(zhí)行功能。參數(shù)就是用字符串

84、來(lái)替代ACF。與以往的Vega不同的是,在VP中,你可以多次定制并且實(shí)時(shí)調(diào)用多個(gè)ACF。這個(gè)功能頂替了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文件的名稱。這個(gè)值可以用一行語(yǔ)句來(lái)表示,也可以通過(guò)復(fù)雜的語(yǔ)句來(lái)表示。</p><p>  Config() 方法</p><p>  該方法從ACF中分解而來(lái),同時(shí)將不同的類關(guān)聯(lián)起來(lái)。例如,它將系統(tǒng)中定義的pipeline添加給服務(wù)管理器,并且為每個(gè)類配置相關(guān)的聯(lián)系。Config()功能是相互的,通過(guò)unconfig()可以將應(yīng)用配置返回到config()前

87、的狀態(tài)。Config()方法經(jīng)常被用戶反復(fù)運(yùn)用[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é)束各模塊以釋放它們?cè)趹?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>  //這個(gè)例子是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)建一個(gè)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.飛機(jī)彩帶的控制</b></p><p>  飛機(jī)總共有三條彩帶,分別為

94、紅色、藍(lán)色和紫色。通過(guò)覆寫鍵盤輸入,按‘R’或‘r’鍵來(lái)控制紅色彩帶,‘V’或‘v’鍵來(lái)控制紫色彩帶,藍(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的值為真時(shí),彩帶出現(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>  通過(guò)鍵盤輸入(按R或r,B或b,V或v),效果如下圖3-16所示。</p><p>  圖3-16 其中一條彩帶消失</p><p>  而對(duì)彩帶長(zhǎng)度的控制,則需要通過(guò)組合鍵。按組合鍵‘shift-’來(lái)縮短彩帶的長(zhǎng)度,延長(zhǎng)彩帶就按‘shift+’。具體代碼如

101、下:</p><p>  //減號(hào)鍵縮短彩帶長(zhǎng)度</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>  //加號(hào)鍵延長(zhǎng)彩帶長(zhǎng)度 </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>  通過(guò)鍵盤輸入(按shift—或shift+),效果如下圖3-17所示。</p><p>  圖3-17 彩帶縮短</p><p>  2.飛機(jī)螺旋槳的控制</p><p>  飛機(jī)的螺旋槳有兩個(gè)。對(duì)螺旋槳的控制主要有4項(xiàng):一、螺旋槳加減速;二、螺旋槳葉子增

104、減量;三、螺旋槳的旋轉(zhuǎn)半徑增減;四、螺旋槳葉子的半徑增減。每一項(xiàng)都有正反兩個(gè)方面,代碼也類似,所以都以正面為例,具體代碼如下:</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鍵控制增長(zhǎng)螺旋槳葉子的半徑</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控制飛機(jī)的出沒(méi)</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>  通過(guò)鍵盤輸入,飛機(jī)特殊效果的對(duì)比如下圖3-18和3-19所示。</p><p>  圖3-18 初始的螺旋槳&

117、lt;/p><p>  圖3-19 變化后的螺旋槳</p><p>  3.飛機(jī)運(yùn)動(dòng)軌跡的設(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. 本站所有資源如無(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ù)僅提供信息存儲(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)論