999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2015-01-18 07:12:20涂瑤瑤徐承志
關(guān)鍵詞:功能模塊程序動(dòng)作

涂瑤瑤,徐承志,梅 超

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

Virtools是一套具備豐富的互動(dòng)行為模塊的實(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互動(dòng)多媒體產(chǎn)品,例如虛擬裝配、仿真訓(xùn)練、網(wǎng)上游戲等諸多3D軟件。正是由于該軟件的簡(jiǎn)易性,對(duì)開發(fā)者的編程素養(yǎng)要求不高,可能導(dǎo)致開發(fā)者陷入代碼贅余的問題中。這些贅余的代碼,既增加了開發(fā)人員的負(fù)擔(dān),又不便于系統(tǒng)后期維護(hù)。而對(duì)這些贅余代碼進(jìn)行封裝和管理能大大提高團(tuán)隊(duì)開發(fā)效率。

本文作者參與國(guó)家級(jí)大學(xué)生創(chuàng)新創(chuàng)業(yè)項(xiàng)目——“基于虛擬校園的軟件生態(tài)系統(tǒng)研究”,項(xiàng)目開發(fā)過程中出現(xiàn)大量重復(fù)操作,例如上百次對(duì)相機(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í)行特定動(dòng)作的可視化功能模塊[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ā)才會(huì)停止運(yùn)作(圖2a)。

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

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

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

Virtools可以利用拖放BB的方式,使用Link-Delay[5]線將BB連接起來,賦予在適當(dāng)?shù)腛bject(對(duì)象)或者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對(duì)外接口形式是一樣的,輸入?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è)字段,每行存儲(chǔ)的數(shù)據(jù)就是一個(gè)記錄,Array還可以與數(shù)據(jù)庫里面的表進(jìn)行數(shù)據(jù)交換,在訪問一些簡(jiǎn)單的輕量數(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存取動(dòng)畫中不同的行為參數(shù),通過參數(shù)解析和動(dòng)作驅(qū)動(dòng)模塊遍歷Array中的行為參數(shù),就可能產(chǎn)生多組操作相同但效果不同的動(dòng)畫。BG+Array組合的功能等效圖見圖8。

圖8 BG+Array功能等效圖

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

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

2.1.2 構(gòu)建BG中的接口 BG中的接口,就是上一步中驅(qū)動(dòng)模板的行為參數(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里面存儲(chǔ)的記錄,并將記錄中的參數(shù)解析出來依次傳遞給動(dòng)作驅(qū)動(dòng)模板。

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

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

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

2.2.1 構(gòu)建動(dòng)作模板,并封裝成BG 攝像機(jī)操作的三個(gè)主要?jiǎng)幼髂0宸謩e為:旋轉(zhuǎn)相機(jī)、移動(dòng)相機(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)行移動(dòng)。

圖10 移動(dòng)相機(jī)

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

圖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))來控制是否啟動(dòng)這幾個(gè)小的功能模塊。

圖12中第一個(gè)Binary Switch控制Camera Rotate(相機(jī)旋轉(zhuǎn)),如果Binary Switch接收到的參數(shù)為True,則程序會(huì)從True出口(圖12中Binary Switch連接Camera Rotate的出口)出發(fā),并運(yùn)行Camera Rotate這個(gè)BG,否則程序會(huì)從False出口(圖12中Binary Switch連接第二個(gè)Binary Switch的出口)出發(fā),并直接運(yùn)行第二個(gè)Binary Switch。同理第二個(gè)Binary Switch控制Camera Move(相機(jī)移動(dòng)),第三個(gè)Binary Switch控制Camera FOV(相機(jī)拉伸),這些Binary Switch只有在接收到輸入?yún)?shù)為True時(shí)才會(huì)執(zhí)行其對(duì)應(yīng)的功能模塊,否則程序會(huì)跳轉(zhuǎn)到下一個(gè)功能模塊去執(zhí)行。通常使用這個(gè)BG時(shí),可能只需要使用這個(gè)BG中的部分功能模塊,如果不用開關(guān)進(jìn)行控制,那么程序就會(huì)運(yùn)行這個(gè)BG中的所有功能模塊,勢(shì)必造成許多資源浪費(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里面存儲(chǔ)的記錄,運(yùn)行BG里面的功能模塊,程序就會(huì)按照BG里面的功能模塊來執(zhí)行并顯示相應(yīng)的動(dòng)作效果了。

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

BG+Array組合不僅適用于對(duì)相機(jī)的操作,在機(jī)械拆裝上也同樣適用。機(jī)械拆裝的操作和相機(jī)類似,有移動(dòng)零件、旋轉(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里面,這樣只需要對(duì)Array里面的數(shù)據(jù)進(jìn)行修改,就可以通過BG+Array這種組合實(shí)現(xiàn)行為邏輯與動(dòng)作參數(shù)的解耦,便于日后的調(diào)試與維護(hù)。

3)代碼共享 代碼封裝不僅僅是讓自己編程簡(jiǎn)單,最主要的是要實(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ū)動(dòng)BG+Array組合,從數(shù)據(jù)庫中讀取數(shù)據(jù)并操作對(duì)象進(jìn)行運(yùn)動(dòng)。

[1] 陳玉川,王麗娟,胡青泥,等.基于Virtools機(jī)械加工實(shí)驗(yàn)系統(tǒng)的研究[C].第三屆東北、華北8省區(qū)市工程圖學(xué)學(xué)術(shù)研討會(huì)論文集.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)仿真平臺(tái)設(shè)計(jì)[J].系統(tǒng)仿真學(xué)報(bào),2009,21(21):6 954-6 958,6 963.

[5] 王 欣,賀建飚.精確同步Markov測(cè)試幀的研究與設(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.

猜你喜歡
功能模塊程序動(dòng)作
試論我國(guó)未決羈押程序的立法完善
動(dòng)作描寫要具體
“程序猿”的生活什么樣
畫動(dòng)作
英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
動(dòng)作描寫不可少
基于ASP.NET標(biāo)準(zhǔn)的采購管理系統(tǒng)研究
輸電線路附著物測(cè)算系統(tǒng)測(cè)算功能模塊的研究
M市石油裝備公服平臺(tái)網(wǎng)站主要功能模塊設(shè)計(jì)與實(shí)現(xiàn)
創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
主站蜘蛛池模板: 狠狠v日韩v欧美v| 一级成人a做片免费| 在线观看国产一区二区三区99| 久久国产精品嫖妓| 波多野结衣无码AV在线| 中文国产成人精品久久| 亚洲精品自产拍在线观看APP| 精品久久久久久久久久久| 亚洲成年人片| 波多野结衣一区二区三区AV| 九色视频一区| 伊人色综合久久天天| 午夜精品久久久久久久无码软件 | 99精品热视频这里只有精品7| 永久免费精品视频| 亚洲最大情网站在线观看| 亚洲天堂久久新| 在线观看无码a∨| 欧美成人精品一级在线观看| 亚洲无码电影| 综合色区亚洲熟妇在线| 青青草原国产| 欧美成人在线免费| 久久一本精品久久久ー99| 国产真实二区一区在线亚洲| 国产精品自在在线午夜区app| 在线播放国产99re| 人妖无码第一页| 成人va亚洲va欧美天堂| 国产香蕉在线视频| 国产成人综合亚洲欧洲色就色| 国产福利一区视频| 男女性午夜福利网站| 亚洲人成人伊人成综合网无码| 午夜影院a级片| 伊人丁香五月天久久综合| 国产成年女人特黄特色毛片免| 亚洲第一成年免费网站| 亚洲天堂成人在线观看| 欧美日韩一区二区在线播放| 国产在线一区视频| 婷婷午夜影院| 三级欧美在线| 91成人精品视频| 色老头综合网| 久久精品91麻豆| 亚洲精选无码久久久| 欧美a在线看| 777午夜精品电影免费看| 国产精品专区第1页| 天天躁狠狠躁| 国产91在线免费视频| 波多野结衣的av一区二区三区| 欧美日韩导航| 欧美午夜理伦三级在线观看| 国产黄在线免费观看| 试看120秒男女啪啪免费| 日韩在线观看网站| 国产成人久视频免费| 十八禁美女裸体网站| 欧美伦理一区| 色AV色 综合网站| 国产成人精品18| 幺女国产一级毛片| 国产精品综合色区在线观看| 免费无遮挡AV| 国产精品视频3p| 免费一级毛片完整版在线看| 精品一区二区三区波多野结衣| 91人妻在线视频| www亚洲精品| 免费观看亚洲人成网站| 国产欧美精品一区二区| 成人福利视频网| 国内毛片视频| 国产午夜无码片在线观看网站| 综合亚洲网| 亚洲毛片一级带毛片基地| 澳门av无码| 国产欧美日韩综合一区在线播放| 亚洲AV无码一区二区三区牲色| 91精品啪在线观看国产91|