亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于BG+Array的相機(jī)操作實(shí)現(xiàn)方法

        2015-01-18 07:12:20涂瑤瑤徐承志
        關(guān)鍵詞:功能模塊代碼程序

        涂瑤瑤,徐承志,梅 超

        (湖北工業(yè)大學(xué)計(jì)算機(jī)學(xué)院,湖北 武漢430068)

        Virtools是一套具備豐富的互動行為模塊的實(shí)時(shí)3D環(huán)境虛擬實(shí)境編輯軟件,其提供了500多個(gè)Building Blocks(BB)行為交互模塊可供使用,特點(diǎn)是方便操作,應(yīng)用領(lǐng)域廣泛[1]??梢宰寷]有任何編程基礎(chǔ)的開發(fā)者在一個(gè)可視化圖形開發(fā)界面中拖放BB,使得各種格式的資源整合在一起,如3D模型、2D圖形、音頻或者視頻等[2],從而制作出各種用途的3D互動多媒體產(chǎn)品,例如虛擬裝配、仿真訓(xùn)練、網(wǎng)上游戲等諸多3D軟件。正是由于該軟件的簡易性,對開發(fā)者的編程素養(yǎng)要求不高,可能導(dǎo)致開發(fā)者陷入代碼贅余的問題中。這些贅余的代碼,既增加了開發(fā)人員的負(fù)擔(dān),又不便于系統(tǒng)后期維護(hù)。而對這些贅余代碼進(jìn)行封裝和管理能大大提高團(tuán)隊(duì)開發(fā)效率。

        本文作者參與國家級大學(xué)生創(chuàng)新創(chuàng)業(yè)項(xiàng)目——“基于虛擬校園的軟件生態(tài)系統(tǒng)研究”,項(xiàng)目開發(fā)過程中出現(xiàn)大量重復(fù)操作,例如上百次對相機(jī)進(jìn)行操作[3],其中包括相機(jī)的旋轉(zhuǎn)、平移、拉伸等。根據(jù)項(xiàng)目開發(fā)經(jīng)驗(yàn),筆者利用BG+Array解決了項(xiàng)目中virtools腳本重復(fù)代碼過多,不易維護(hù)的問題。

        1 Virtools中的邏輯結(jié)構(gòu)

        1.1 Virtools BB

        Behavior Building Blocks(BB)是用來執(zhí)行特定動作的可視化功能模塊[4],BB的輸入分為流程輸入bIn(Behavior Input)和參數(shù)輸入pIn(Parameter Input),輸出分為流程輸出bOut(Behavior Output)和參數(shù)輸出pOut(Parameter Output)(圖1)。

        圖1 BB的輸入輸出

        根據(jù)運(yùn)行方式的不同,BB有三種類型:

        1)On/Off 一旦On被觸發(fā),BB就持續(xù)執(zhí)行,直到Off被觸發(fā)才會停止運(yùn)作(圖2a)。

        圖2 BB的運(yùn)行方式

        2)In/Out 一旦In被觸發(fā)就執(zhí)行BB的功能,完成后會觸發(fā)Out并停止運(yùn)作(圖2b)。

        3)Loop In/Loop Out 一旦In被觸發(fā)BB就開始運(yùn)作,隨即在Loop Out和Loop In間執(zhí)行外部回圈,直到完成BB設(shè)定的某個(gè)條件才會觸發(fā)Out并停止運(yùn)作。而對BB的停止條件設(shè)定可在BB參數(shù)的設(shè)置中完成,如圖2中的(c)。

        Virtools可以利用拖放BB的方式,使用Link-Delay[5]線將BB連接起來,賦予在適當(dāng)?shù)腛bject(對象)或者Character(虛擬角色)上,以類似流程圖的方式,決定BB行為交互模塊的前后處理順序,從而實(shí)現(xiàn)可視化的交互腳本設(shè)計(jì)。腳本圖類似于傳統(tǒng)的代碼程序,特別是程序的三個(gè)基本結(jié)構(gòu)可以完全用腳本圖來實(shí)現(xiàn)。

        如圖3所示,程序先執(zhí)行”Rotate”BB,后執(zhí)行”Translate”BB。

        圖3 順序結(jié)構(gòu)

        如圖4所示,程序先執(zhí)行”Test”BB,Test BB判斷為真則執(zhí)行Rotate BB,為假則執(zhí)行Translate BB。

        圖4 選擇結(jié)構(gòu)

        如圖5所示,程序先執(zhí)行”Counter”BB,Counter BB有三個(gè)輸入?yún)?shù),第一個(gè)是程序循環(huán)的次數(shù),第二個(gè)是變量的初始值,第三個(gè)是變量的遞增(減)值,若循環(huán)次數(shù)不滿足設(shè)定值,則執(zhí)行Rotate BB,循環(huán)次數(shù)加1,變量加上遞增(減)值,否則執(zhí)行Translate BB。

        圖5 循環(huán)結(jié)構(gòu)

        1.2 Virtools BG(Behavior Graph)

        將多種BB組合封裝起來,就可以形成一個(gè)具有某項(xiàng)功能的行為模組,即BG(Behavior Graph)。BG是Virtools里面的一大特色,利用BG可以將一個(gè)或多個(gè)BB(也可以是BG)進(jìn)行二次封裝,或多次封裝。如果將BB比作傳統(tǒng)程序里面的函數(shù),那么BG就相當(dāng)于是傳統(tǒng)程序里面函數(shù)的嵌套調(diào)用。BG與BB對外接口形式是一樣的,輸入?yún)?shù)分為bIn,pIn,輸出參數(shù)分為bOut,pOut。BB和BG可以相互嵌套使用(圖6)。

        圖6 BG的嵌套使用

        1.3 Virtools Array

        Array即陣列,可用于建立數(shù)據(jù)、事件變量的集中存放管理等等,由Column(列)與Row(行)組成[6],Array里面每列就是一個(gè)字段,每行存儲的數(shù)據(jù)就是一個(gè)記錄,Array還可以與數(shù)據(jù)庫里面的表進(jìn)行數(shù)據(jù)交換,在訪問一些簡單的輕量數(shù)據(jù)時(shí),使用Array十分方便,Array的結(jié)構(gòu)見圖7。

        圖7 Array的構(gòu)造

        2 代碼封裝技術(shù)的實(shí)現(xiàn)

        鑒于BG和Array在Virtools中有上述這些性質(zhì),可以使用BG+Array這種組合在Virtools的程序開發(fā)中實(shí)現(xiàn)功能重復(fù)的代碼整合。即使用BG將行為邏輯進(jìn)行二次封裝,使用Array存取動畫中不同的行為參數(shù),通過參數(shù)解析和動作驅(qū)動模塊遍歷Array中的行為參數(shù),就可能產(chǎn)生多組操作相同但效果不同的動畫。BG+Array組合的功能等效圖見圖8。

        圖8 BG+Array功能等效圖

        2.1 實(shí)現(xiàn)步驟

        2.1.1 設(shè)計(jì)動作模板,并封裝成BG 對一組動畫進(jìn)行動作分類,同類的動作就是程序重復(fù)執(zhí)行的功能模塊,即動作模板,這些動作模板通過接收不同的行為參數(shù),產(chǎn)生不同的效果,將這些動作模板封裝成BG。

        2.1.2 構(gòu)建BG中的接口 BG中的接口,就是上一步中驅(qū)動模板的行為參數(shù),將這些行為參數(shù)的標(biāo)記拖放到BG的邊界,構(gòu)成BG的輸入?yún)?shù)接口。

        2.1.3 建立參數(shù)陣列 創(chuàng)建一個(gè)Array,并在Array中創(chuàng)建與BG輸入?yún)?shù)類型一致的字段,再根據(jù)具體的要求,在參數(shù)陣列中保存相應(yīng)的參數(shù)值。

        2.1.4 遍歷Array 建立循環(huán)結(jié)構(gòu),遍歷Array里面存儲的記錄,并將記錄中的參數(shù)解析出來依次傳遞給動作驅(qū)動模板。

        至此,通過BG+Array的組合實(shí)現(xiàn)相同代碼調(diào)用不同參數(shù)來完成一連串的不同動作的功能就實(shí)現(xiàn)了。

        下面通過一個(gè)例子來說明如何在Virtools里面具體運(yùn)用BG+Array的組合。在“虛擬校園”項(xiàng)目里面經(jīng)常要針對某棟建筑進(jìn)行頻繁的鏡頭變換操作,這些鏡頭變換大致可以歸納為移動相機(jī)、旋轉(zhuǎn)相機(jī)、拉伸相機(jī)操作,以上三種操作即為相機(jī)操作的三大類,可以按照上面提到的步驟構(gòu)造出一個(gè)BG+Array的組合。

        2.2 鏡頭變換的設(shè)計(jì)及功能實(shí)現(xiàn)

        2.2.1 構(gòu)建動作模板,并封裝成BG 攝像機(jī)操作的三個(gè)主要動作模板分別為:旋轉(zhuǎn)相機(jī)、移動相機(jī)以及拉伸相機(jī)。

        構(gòu)造的BG如圖9至圖11所示,其中”Bezier Progression”BB的作用是在一定的時(shí)間內(nèi)讓一個(gè)變量按照指定的貝塞爾函數(shù)[7]進(jìn)行變化,圖9中Multiplication BB接收 Bezier Progression BB傳進(jìn)的值,并乘以指定的一個(gè)角度,將得到的值賦給Rotate Around BB,Rotate Around BB按照這個(gè)值進(jìn)行相機(jī)旋轉(zhuǎn),所以這一組BB的作用就是在一定的時(shí)間內(nèi)(由Bezier Progression BB決定)將相機(jī)旋轉(zhuǎn)一定的角度(由Multiplication BB決定)。

        圖9 旋轉(zhuǎn)相機(jī)

        圖10 中 Multiplication BB 接 收 Bezier Pro-gression BB傳進(jìn)的值,并乘以一個(gè)指定的向量,將得到的值賦給 Translate BB,Translate BB按照這個(gè)值來操作相機(jī)進(jìn)行移動。

        圖10 移動相機(jī)

        圖11 中 Multiplication BB 接 收 Bezier Progression BB傳進(jìn)的值,并乘以一個(gè)指定的向量,將得到的值賦給Set FOV BB,Set FOV BB按照這個(gè)值對相機(jī)進(jìn)行拉伸動作。

        圖11 拉伸相機(jī)

        2.2.2 構(gòu)建BG接口 提取行為參數(shù)后的BG如圖12所示。

        圖12 提取行為參數(shù)后的BG

        將BG中的行為參數(shù)提取出來,并拖放到BG的邊界,由于BG可以相互嵌套使用,所以內(nèi)層BG也可以像BB一樣,將內(nèi)層BG的運(yùn)行參數(shù)的標(biāo)記拖放到外層BG的邊界,作為外層BG的輸入?yún)?shù)。當(dāng)一個(gè)BG中包含幾個(gè)小的BG時(shí),即一個(gè)大的功能模塊中包含幾個(gè)小的功能模塊,可以考慮使用”Binary Switch”BB(二進(jìn)制開關(guān))來控制是否啟動這幾個(gè)小的功能模塊。

        圖12中第一個(gè)Binary Switch控制Camera Rotate(相機(jī)旋轉(zhuǎn)),如果Binary Switch接收到的參數(shù)為True,則程序會從True出口(圖12中Binary Switch連接Camera Rotate的出口)出發(fā),并運(yùn)行Camera Rotate這個(gè)BG,否則程序會從False出口(圖12中Binary Switch連接第二個(gè)Binary Switch的出口)出發(fā),并直接運(yùn)行第二個(gè)Binary Switch。同理第二個(gè)Binary Switch控制Camera Move(相機(jī)移動),第三個(gè)Binary Switch控制Camera FOV(相機(jī)拉伸),這些Binary Switch只有在接收到輸入?yún)?shù)為True時(shí)才會執(zhí)行其對應(yīng)的功能模塊,否則程序會跳轉(zhuǎn)到下一個(gè)功能模塊去執(zhí)行。通常使用這個(gè)BG時(shí),可能只需要使用這個(gè)BG中的部分功能模塊,如果不用開關(guān)進(jìn)行控制,那么程序就會運(yùn)行這個(gè)BG中的所有功能模塊,勢必造成許多資源浪費(fèi),所以,巧用開關(guān)也是節(jié)約系統(tǒng)資源的一個(gè)小技巧。

        2.2.3 建立參數(shù)陣列 創(chuàng)建好后的Array屬性如表1所示。

        表1 Array

        2.2.4 遍歷Array 程序整體流程如圖13所示。

        圖13 程序整體流程圖

        圖13 中的Camera Operation是圖12中將行為參數(shù)提取出來后的BG,使用”Iterator”BB來遍歷Array,并將取出的記錄賦給BG,BG通過接收Array里面存儲的記錄,運(yùn)行BG里面的功能模塊,程序就會按照BG里面的功能模塊來執(zhí)行并顯示相應(yīng)的動作效果了。

        至此,使用BG+Array的組合,便將攝像機(jī)的操作整合起來了,以后凡涉及到對攝像機(jī)的操作,只需要修改Array里面的行為參數(shù)便可以直接使用此BG+Array的組合了。

        BG+Array組合不僅適用于對相機(jī)的操作,在機(jī)械拆裝上也同樣適用。機(jī)械拆裝的操作和相機(jī)類似,有移動零件、旋轉(zhuǎn)零件以及縮放零件等,通過BG+Array組合,將這些操作進(jìn)行模塊化的整合,便于系統(tǒng)的開發(fā)和后期維護(hù)。

        3 使用BG+Array的優(yōu)點(diǎn)

        總體來說,BG+Array的優(yōu)點(diǎn)有如下三點(diǎn):

        1)代碼量少 這里說的代碼量少并不意味著減少了代碼的數(shù)量,而是說將代碼整合起來,便于閱讀與理解,將原來復(fù)雜龐大的代碼用BG整合起來,使得每個(gè)功能都很清楚,也方便維護(hù)。

        2)便于程序調(diào)試與維護(hù) 每個(gè)BG都實(shí)現(xiàn)了特定的功能,而將它需要的參數(shù)提取出來,并存在Array里面,這樣只需要對Array里面的數(shù)據(jù)進(jìn)行修改,就可以通過BG+Array這種組合實(shí)現(xiàn)行為邏輯與動作參數(shù)的解耦,便于日后的調(diào)試與維護(hù)。

        3)代碼共享 代碼封裝不僅僅是讓自己編程簡單,最主要的是要實(shí)現(xiàn)代碼的共享,這種將業(yè)務(wù)邏輯高度抽象的方法是代碼封裝的先決條件。同時(shí),使用BG這種模式,將一些常用的BB組合起來,封裝為常用的功能模塊,更利于給其他人共享使用。

        4 結(jié)論

        介紹了BG+Array這種組合在Virtools里面的運(yùn)用,合理利用這種組合,可以減少程序中很多冗余的代碼,大大提高系統(tǒng)開發(fā)的效率,同時(shí)也可以提高代碼的復(fù)用率,為開發(fā)高質(zhì)量的系統(tǒng)帶來很多便利。本文只是介紹了Virtools中代碼封裝的一部分技巧,同時(shí)BG+Array這種組合還有很大的改進(jìn)空間,例如可以將這種組合與數(shù)據(jù)庫操作結(jié)合起來,通過數(shù)據(jù)庫驅(qū)動BG+Array組合,從數(shù)據(jù)庫中讀取數(shù)據(jù)并操作對象進(jìn)行運(yùn)動。

        [1] 陳玉川,王麗娟,胡青泥,等.基于Virtools機(jī)械加工實(shí)驗(yàn)系統(tǒng)的研究[C].第三屆東北、華北8省區(qū)市工程圖學(xué)學(xué)術(shù)研討會論文集.2010:156-159.

        [2] 劉明昆.三維游戲設(shè)計(jì)[M].成都:四川出版集團(tuán),四川電子音像出版中心,2005.

        [3] 楊 琳,朱元昌,邸彥強(qiáng),等.基于Virtools的光電經(jīng)緯儀成像系統(tǒng)仿真[J].彈箭與制導(dǎo)學(xué)報(bào),2012(05):193-195,198.

        [4] 梁冠輝,朱元昌,邸彥強(qiáng),等.基于 HLA/Virtools的高炮火控系統(tǒng)仿真平臺設(shè)計(jì)[J].系統(tǒng)仿真學(xué)報(bào),2009,21(21):6 954-6 958,6 963.

        [5] 王 欣,賀建飚.精確同步Markov測試幀的研究與設(shè)計(jì)[J].信息化縱橫,2009(06):33-35.

        [6] 劉明昆.三維游戲設(shè)計(jì)師寶典——Virtools游戲開發(fā)工具篇[M].四川:四川電子音像出版中心,2005.

        [7] 伍 剛.貝塞爾函數(shù)的計(jì)算機(jī)仿真研究[J].攀枝花學(xué)院學(xué)報(bào),2013,30(06):105-107.

        猜你喜歡
        功能模塊代碼程序
        試論我國未決羈押程序的立法完善
        創(chuàng)世代碼
        動漫星空(2018年11期)2018-10-26 02:24:02
        創(chuàng)世代碼
        動漫星空(2018年2期)2018-10-26 02:11:00
        創(chuàng)世代碼
        動漫星空(2018年9期)2018-10-26 01:16:48
        創(chuàng)世代碼
        動漫星空(2018年5期)2018-10-26 01:15:02
        “程序猿”的生活什么樣
        英國與歐盟正式啟動“離婚”程序程序
        基于ASP.NET標(biāo)準(zhǔn)的采購管理系統(tǒng)研究
        輸電線路附著物測算系統(tǒng)測算功能模塊的研究
        M市石油裝備公服平臺網(wǎng)站主要功能模塊設(shè)計(jì)與實(shí)現(xiàn)
        石油知識(2016年2期)2016-02-28 16:20:16
        永久免费观看的毛片手机视频| 亚洲一区 日韩精品 中文字幕| 亚洲熟妇久久国产精品| 久久和欧洲码一码二码三码| 236宅宅理论片免费| 国产在线丝袜精品一区免费| 亚洲一本到无码av中文字幕| 欧美在线三级艳情网站| 久久国产品野战| 日韩一区二区三区中文字幕| 国产三级国产精品三级在专区| 久久人妻中文字幕精品一区二区| 亚洲综合色区一区二区三区| 国产超碰人人做人人爽av大片 | 久久久久女人精品毛片| 亚洲毛片αv无线播放一区| 免费国产h视频在线观看86| 五月天亚洲av优女天堂| 你懂的视频网站亚洲视频 | 99久久免费只有精品国产| 精品久久久久久久中文字幕| 久久婷婷国产综合精品| 久久亚洲综合亚洲综合| 国产麻豆久久av入口| 色婷婷综合久久久中文字幕| 亚洲精品午睡沙发系列| 日本中文字幕在线播放第1页| 免费国产调教视频在线观看| 成年男女免费视频网站点播| 亚洲最近中文字幕在线| 乱子伦在线观看| 波多野吉衣av无码| 99精品久久久中文字幕| 男女男生精精品视频网站| 中文字幕女同人妖熟女| 国产av一区二区三区传媒| 中文字幕不卡在线播放| 精品蜜桃一区二区三区| 国产免费人成视频在线| 亚洲av无码乱码在线观看性色| 中文字幕日本特黄aa毛片|