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

基于BG+Array的相機操作實現方法

2015-01-18 07:12:20涂瑤瑤徐承志
湖北工業大學學報 2015年5期
關鍵詞:功能模塊程序動作

涂瑤瑤,徐承志,梅 超

(湖北工業大學計算機學院,湖北 武漢430068)

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

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

1 Virtools中的邏輯結構

1.1 Virtools BB

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

圖1 BB的輸入輸出

根據運行方式的不同,BB有三種類型:

1)On/Off 一旦On被觸發,BB就持續執行,直到Off被觸發才會停止運作(圖2a)。

圖2 BB的運行方式

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

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

Virtools可以利用拖放BB的方式,使用Link-Delay[5]線將BB連接起來,賦予在適當的Object(對象)或者Character(虛擬角色)上,以類似流程圖的方式,決定BB行為交互模塊的前后處理順序,從而實現可視化的交互腳本設計。腳本圖類似于傳統的代碼程序,特別是程序的三個基本結構可以完全用腳本圖來實現。

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

圖3 順序結構

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

圖4 選擇結構

如圖5所示,程序先執行”Counter”BB,Counter BB有三個輸入參數,第一個是程序循環的次數,第二個是變量的初始值,第三個是變量的遞增(減)值,若循環次數不滿足設定值,則執行Rotate BB,循環次數加1,變量加上遞增(減)值,否則執行Translate BB。

圖5 循環結構

1.2 Virtools BG(Behavior Graph)

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

圖6 BG的嵌套使用

1.3 Virtools Array

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

圖7 Array的構造

2 代碼封裝技術的實現

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

圖8 BG+Array功能等效圖

2.1 實現步驟

2.1.1 設計動作模板,并封裝成BG 對一組動畫進行動作分類,同類的動作就是程序重復執行的功能模塊,即動作模板,這些動作模板通過接收不同的行為參數,產生不同的效果,將這些動作模板封裝成BG。

2.1.2 構建BG中的接口 BG中的接口,就是上一步中驅動模板的行為參數,將這些行為參數的標記拖放到BG的邊界,構成BG的輸入參數接口。

2.1.3 建立參數陣列 創建一個Array,并在Array中創建與BG輸入參數類型一致的字段,再根據具體的要求,在參數陣列中保存相應的參數值。

2.1.4 遍歷Array 建立循環結構,遍歷Array里面存儲的記錄,并將記錄中的參數解析出來依次傳遞給動作驅動模板。

至此,通過BG+Array的組合實現相同代碼調用不同參數來完成一連串的不同動作的功能就實現了。

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

2.2 鏡頭變換的設計及功能實現

2.2.1 構建動作模板,并封裝成BG 攝像機操作的三個主要動作模板分別為:旋轉相機、移動相機以及拉伸相機。

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

圖9 旋轉相機

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

圖10 移動相機

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

圖11 拉伸相機

2.2.2 構建BG接口 提取行為參數后的BG如圖12所示。

圖12 提取行為參數后的BG

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

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

2.2.3 建立參數陣列 創建好后的Array屬性如表1所示。

表1 Array

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

圖13 程序整體流程圖

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

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

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

3 使用BG+Array的優點

總體來說,BG+Array的優點有如下三點:

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

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

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

4 結論

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

[1] 陳玉川,王麗娟,胡青泥,等.基于Virtools機械加工實驗系統的研究[C].第三屆東北、華北8省區市工程圖學學術研討會論文集.2010:156-159.

[2] 劉明昆.三維游戲設計[M].成都:四川出版集團,四川電子音像出版中心,2005.

[3] 楊 琳,朱元昌,邸彥強,等.基于Virtools的光電經緯儀成像系統仿真[J].彈箭與制導學報,2012(05):193-195,198.

[4] 梁冠輝,朱元昌,邸彥強,等.基于 HLA/Virtools的高炮火控系統仿真平臺設計[J].系統仿真學報,2009,21(21):6 954-6 958,6 963.

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

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

[7] 伍 剛.貝塞爾函數的計算機仿真研究[J].攀枝花學院學報,2013,30(06):105-107.

猜你喜歡
功能模塊程序動作
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
動作描寫要具體
“程序猿”的生活什么樣
畫動作
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
動作描寫不可少
基于ASP.NET標準的采購管理系統研究
軟件導刊(2016年9期)2016-11-07 21:35:42
輸電線路附著物測算系統測算功能模塊的研究
M市石油裝備公服平臺網站主要功能模塊設計與實現
石油知識(2016年2期)2016-02-28 16:20:16
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
主站蜘蛛池模板: 色婷婷色丁香| 国产精品综合色区在线观看| 欧美a级完整在线观看| 久久国产精品影院| 精品国产免费观看| 在线中文字幕网| AV不卡在线永久免费观看| 1769国产精品免费视频| 91亚洲视频下载| 无码'专区第一页| 丁香五月婷婷激情基地| 亚洲人成网7777777国产| 伊人激情久久综合中文字幕| 99精品热视频这里只有精品7| 国产麻豆精品在线观看| 欧美专区在线观看| 97国产精品视频人人做人人爱| 波多野结衣一区二区三区88| 日韩视频免费| 国产视频只有无码精品| 日韩高清成人| 欧美α片免费观看| 黑人巨大精品欧美一区二区区| 欧美精品在线视频观看| 无码粉嫩虎白一线天在线观看| 97视频在线精品国自产拍| 亚洲无码免费黄色网址| 亚洲一级毛片在线观播放| 欧美日本中文| 成人精品免费视频| 欧美日本中文| 亚洲人成网址| 欧美精品在线观看视频| 国产资源免费观看| 成人福利在线视频免费观看| 国产高潮视频在线观看| 免费AV在线播放观看18禁强制| 精品丝袜美腿国产一区| 亚洲全网成人资源在线观看| 91欧美在线| 免费一级成人毛片| 激情五月婷婷综合网| 无码网站免费观看| 伊人久久久久久久| 91国内在线视频| 国产69精品久久久久妇女| 日韩精品一区二区三区大桥未久| 亚洲免费黄色网| 波多野结衣爽到高潮漏水大喷| 无码免费的亚洲视频| 大香伊人久久| 国产真实二区一区在线亚洲| 国产精品视频久| 国产熟女一级毛片| 欧美另类一区| 亚洲人人视频| 国产乱子伦视频在线播放| 五月激激激综合网色播免费| 亚洲精品国产综合99久久夜夜嗨| 久久久久夜色精品波多野结衣| 日本亚洲欧美在线| 国产在线精品美女观看| 国产h视频在线观看视频| 五月婷婷精品| 国产精品2| 国产成人亚洲精品无码电影| 亚洲无码在线午夜电影| 亚洲美女视频一区| 国产自产视频一区二区三区| 亚洲AⅤ无码日韩AV无码网站| 青青国产在线| 欧美在线天堂| 色偷偷男人的天堂亚洲av| 午夜a视频| 国产免费看久久久| 狼友视频国产精品首页| 久久国产免费观看| 精品一区二区无码av| 亚洲精品天堂在线观看| 精品一区二区三区无码视频无码| 国产成人综合久久| 国产成年无码AⅤ片在线|