資源描述:
《(精品)virtools的漫游地圖算法實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、基于Virtools的漫游地圖算法實(shí)現(xiàn)針對(duì)在VirtoolsDev3.5平臺(tái)下實(shí)現(xiàn)漫游地圖的各種功能存在實(shí)現(xiàn)算法不完善等問題,給出漫游者前進(jìn)方向?qū)崟r(shí)顯示、漫游者位置實(shí)時(shí)顯示、漫游地圖的縮放和跳轉(zhuǎn)等功能的實(shí)現(xiàn)方法,并制作出3個(gè)自成體系的通用模塊。??在用Virtools制作類似漫游的應(yīng)用中,可以使用這3個(gè)通用模塊快速實(shí)現(xiàn)漫游地圖的4種功能,提高了開發(fā)效率。在漫游者位置實(shí)時(shí)顯示功能算法中使用雙重定位策略和地圖縮放策略,保證了整個(gè)定位顯示畫面的準(zhǔn)確性和流暢性。??漫游地圖在大場(chǎng)景漫游應(yīng)用中是不可或缺的組成部分[1-4],能顯示漫游者的位置和方向,能實(shí)現(xiàn)漫
2、游者在場(chǎng)景中的跳轉(zhuǎn)等功能。在VirtoolsDev3.5平臺(tái)下還沒有既成的BB(BehaviorBuildingBlock)可以快速實(shí)現(xiàn)漫游地圖的一些基本功能。在開發(fā)時(shí)只能先設(shè)計(jì)出漫游地圖的一些基本功能的實(shí)現(xiàn)算法,再利用VirtoolsDev3.5平臺(tái)已經(jīng)提供的BB編程實(shí)現(xiàn)。目前Virtools平臺(tái)下的漫游地圖算法還存在諸多不足,也沒有提供可以快速實(shí)現(xiàn)這些功能的通用的BG(BehaviorBuildingGraph)模塊。文中在VirtoolsDev3.5平臺(tái)下,分析漫游者前進(jìn)方向?qū)崟r(shí)顯示、漫游者位置實(shí)時(shí)顯示、漫游地圖的縮放和跳轉(zhuǎn)等功能的實(shí)現(xiàn)方法,
3、并制作出3個(gè)自成體系的通用模塊。1 前進(jìn)方向?qū)崟r(shí)顯示模塊??該模塊用一個(gè)2DFrame來指示漫游者的前進(jìn)方向,稱為目標(biāo)2DFrame。它的貼圖由一系列指示方向的小圖片組成,形成一個(gè)按規(guī)則均勻分布可表示角度的子圖片序列。該模塊的目的是實(shí)現(xiàn)對(duì)漫游者前進(jìn)方向三維向量的實(shí)時(shí)檢測(cè),并獲取它在俯視圖中的二維方向向量,實(shí)時(shí)確定用于指示方向的子圖片的序號(hào),將該子圖片顯示在目標(biāo)2DFrame上。??1.1 算法設(shè)計(jì)??用S和S′分別表示漫游者的自身坐標(biāo)系和Virtools中的世界坐標(biāo)系。如果坐標(biāo)系S中的標(biāo)準(zhǔn)向量i,j和k在坐標(biāo)系中S′分別表示為U′=〈u′xu′yu
4、′z〉T,V′=〈v′xv′yv′z〉T和W′=〈w′xw′yw′z〉T,并且坐標(biāo)系S中的原點(diǎn)O=〈000〉在坐標(biāo)系中的表示為O′=〈xyz〉,那么坐標(biāo)系S到坐標(biāo)系S′的變換矩陣M在齊次坐標(biāo)系下為M=u′xv′xw′xx;u′yv′yw′yy;u′zv′zw′zz;0001。??在Virtools中,一般選擇漫游者自身坐標(biāo)系的z軸正方向?yàn)槠淝斑M(jìn)方向,根據(jù)向量W′的幾何意義可知,漫游者的前進(jìn)方向在世界坐標(biāo)系中的表示即為W′,前進(jìn)方向在俯視圖中的投影向量為:w′俯視圖=〈w′xw′z〉。因?yàn)闊o法直接求取向量w′俯視圖到貼圖中的子圖片的序號(hào)的映射,所以采
5、用先將向量w′俯視圖映射到0°~360°角度值,再將0°~360°角度值轉(zhuǎn)換為子圖片序號(hào)的映射的方法。??令θ=arctanw′zw′x,則y角度=57.3θ,一象限;57.3(π+θ),二,三象限;57.3(2π+θ),四象限。??這樣y角度的值域?yàn)?°~360°,它可以精確地表示漫游者的前進(jìn)方向;但是由于指示前進(jìn)方向的子圖片是離散的,并且是不精確的,所以要根據(jù)該漫游應(yīng)用對(duì)方向指示的精確度要求確定子圖片序列,以及確定從y角度到子圖片序號(hào)的映射。子圖片數(shù)量越多,映射越密集,方向指示畫面也越精確、流暢。??1.2 編程實(shí)現(xiàn)??先添加OpBB,指定操作
6、類型為Getworldmatrix,設(shè)置參數(shù)輸入類型為3DEntity,參數(shù)輸出類型為Matrix,設(shè)定參數(shù)輸入端3DEntity為漫游者;再添加參數(shù)操作GetZ,設(shè)置參數(shù)輸入類型為Matrix,輸出類型為Vector,并將GetZ的參數(shù)輸入端連接到OpBB的參數(shù)輸出端,這樣輸出端就得到了變換矩陣M中的向量W′;然后添加參數(shù)操作GetX和GetZ,獲取向量W′中的分量w′x和w′z,最后可以求取57.3θ的值、y角度的值和確定目標(biāo)2DFrame貼圖中的子圖片序號(hào)。??1.3 通用BG模塊??為了實(shí)現(xiàn)BB程序流程的分發(fā)和重用,可以把實(shí)現(xiàn)特定功能的BB
7、集合組合成BG模塊,然后將它導(dǎo)出形成Virtools腳本文件,方便其他用戶導(dǎo)入并使用。在Virtools的Schematic操作頁內(nèi)的BB腳本編輯欄里單擊右鍵,在彈出的快捷菜單欄中選擇DrawGraph,即可將具有特定功能的BB集合組合成一個(gè)BG,然后將那些需要靈活設(shè)置的參數(shù)拖到BG的外邊,形成一個(gè)可以靈活設(shè)置參數(shù)并實(shí)現(xiàn)特定功能的BG模塊。在BG上方單擊右鍵,選擇saveas…,就可以將該BG模塊導(dǎo)出。如果想隱藏其內(nèi)部的BB程序流程,則選中saveas…對(duì)話框左下方的選項(xiàng)Hidescriptrepresentationinschematicview
8、保存即可。2 位置實(shí)時(shí)顯示模塊??該模塊使用3個(gè)2DFrame:(1)地圖顯示框2DFrame,用來限定地圖信息顯示畫面的