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

Virtools與VisualC++信息交互技術研究

2017-08-12 12:22:06
計算機應用與軟件 2017年8期
關鍵詞:機制利用信息

周 杰

(海軍潛艇學院 山東 青島 266042)

?

Virtools與VisualC++信息交互技術研究

周 杰

(海軍潛艇學院 山東 青島 266042)

為彌補虛擬開發平臺Virtools通信模式的缺陷,豐富Virtools與其他軟件平臺的通信手段,拓展應用范圍,針對Virtools與VC的通信機制,提出通過開發UDP通信模塊、串口通信模塊以及利用Virtools消息機制和Virtools陣列輸出機制完成兩種軟件平臺之間數據交互的方法。充分發揮VC開發平臺良好的兼容性,為Virtools與其他不同軟件平臺間進行信息交互提供可行途徑。

Virtools VC 通信

0 引 言

虛擬現實技術(VR),通過綜合利用圖片、視頻、三維動畫和聲音等多媒體素材,營造出具有沉浸性、交互性、構想性的軟件操作環境[1]。虛擬現實技術通過構建三維模型,營造多種視角,提供具有沉浸性和交互性的操作環境,操作者可以親身漫游虛擬世界,多角度觀察操作方法,身臨其境參與交互,給操作者強烈的臨場感和逼真感。這種深層的自然的人機交互,使操作人員改變以往被動的知識接受模式,變為主動探究,積極尋求新知識,形成潛在技能,可以為實際操作技能的最終形成奠定基礎。將虛擬現實技術融合到模擬訓練系統中,如運輸工具駕駛、武器裝備操作等訓練平臺,可以有效解決傳統模擬操作中臨場感弱、操作訓練不充分、難以形成有效技能的問題。通過逼真的操作平臺、工具模型和高度還原的操作過程,調動操作者的主動性,提升知識技能構建的效率。在保證設備和人員安全的前提下,實踐所學知識,加速知識到技能的轉換過程。

虛擬現實技術已經廣泛應用于設計測試、模擬訓練、游戲娛樂和教學科研等多個領域。隨著VR頭戴設備、應力反饋設備等各種終端設備的大量使用,VR技術的應用廣度和深度逐年提升,涌現出許多成熟的開發平臺,如Quest3D、Virtools和Unity3D等。其中Virtools是法國達索公司開發的三維虛擬軟件開發平臺,將自身功能模塊與其他三維軟件開發的模型或場景相結合,通過編程規劃其邏輯行為和物理屬性,開發貼近現實的虛擬交互環境[2]。Virtools功能、模塊完善,適用于游戲和動畫的開發制作,也是出現最早、使用最為廣泛的虛擬現實游戲開發工具。Virtools突出的便捷性和開放性,使其成為許多虛擬現實開發技術初學者的首選。利用行為模塊實現圖形化的開發介面,通過視覺化窗口實現圖形化編程,這些特點都使Virtools的學習門檻降低,易于理解,便于掌握。但對于需要使用多種軟件平臺聯合開發的復雜系統,使用Virtools與其他軟件平臺進行通信時卻存在一定的技術缺陷,信息交互技術的短板限制了Virtools的應用,特別對于使用最為廣泛的Visual C++開發平臺,僅利用Virtools自帶的行為模塊很難實現二者之間的信息交互。針對這一技術缺陷,本文提出了行之有效的技術方案,解決Virtools虛擬軟件和Visual C++軟件開發平臺之間信息交互困難的難題。

1 Virtools通信機制局限性分析

Vtrtools通過模塊開發機制實現行為開發與互動操作,各類功能模塊稱作BuildingBlock,將不同功能的BuildingBlock遵循預設的邏輯關系組合起來實現預定的功能[3]。

網絡服務器模塊包含大量Building Block(BB模塊)實現Virtools的網絡通信功能。這些Building Block遵循TCP/IP協議,按照典型的CS結構,完成網絡通信。但必須在VirtoolsDev軟件平臺下調用這些功能模塊才能構建通信網絡。即所有網絡通信節點都要用Virtools來開發,才能使用網絡通信BuildingBlock構建通信體系[4]。在復雜系統的開發過程中,Virtools經常需要響應其他軟件開發平臺的信息,例如VC編寫的程序向Virtools發送消息,Virtools接受消息并控制模型產生相應動作。Virtools自帶的模塊庫中沒有此類功能模塊,當需要Virtools軟件平臺和其他軟件平臺之間進行通信,交換數據,這時Virtools通信的局限性就凸顯出來,內置網絡模塊無法與其他軟件平臺進行信息通信。這種缺陷限制了Virools平臺與其他不同軟件平臺之間的信息交互,不利于大型三維虛擬軟件的開發。

Visual C++(VC)軟件開發平臺基礎語言較為普及,代碼執行效率高,使用微軟編譯器,得到Windows系列操作系統的良好支持,開發的程序健壯、穩定。一般大型程序的核心組件都使用VC開發,以滿足核心程序運行高效穩定的要求。VC具有完善的幫助文檔,大量的優質教材和海量的網絡資源,為開發者帶來了極大的便利條件。而且VC開發平臺具有多種控件及函數接口,可以利用多種方法實現與不同軟件之間的信息通信。研究Virtools與VC之間的信息交互技術,以VC平臺為樞紐,充分利用VC平臺豐富的編程資源、良好的兼容性和擴展性,實現Virtools與其他軟件的信息交互,彌補其信息交互技術的短板,擴展Virtools的通信手段,拓展應用范圍。

2 用戶數據報協議通信模塊的開發

用戶數據報協議(UDP協議),與TCP協議相比沒有擁塞控制機制,便于維持最低數據率,消除數據傳輸時延[5],在實時控制程序中應該利用UDP協議速度優勢建立通信機制,用戶數據報協議通過套接字(Socket)傳輸數據,將該協議嵌入到Building Block中,再利用VC的套接字技術可實現VC與Virtools平臺的通信。Building Block開發需要利用Microsoft Visual Studio.Net環境,開發流程如圖1所示。

圖1 Building Block開發流程

(1) 使用函數CKGetPluginInfo()和CKGetPluginlnfoCount()將DLL聲明為Building Block Plugin,定義Plugin為Behavior Plugin類型,定義并聲明Building Block Plugin個數為一,使用這個Plugin執行Building Block,Building Block Plug要執行的Building Block用函數RegisterBehaviorDcclaration()注冊。

(2) 利用CreateCKObjectDeclaration()聲明函數創建CKObjectDeelaration類型的指針,指向創建的Building Block信息函數,描述Building Block的基本信息,如版本號,作者,功能。

(3) 用創建函數CreateCKBehaviorPrototype()創建網絡通信相關的模塊輸入端口,定義端口號、網絡地址等。從指定輸入端口上獲取并保存網絡信息和網絡數據結果。

(4) 將使用套接字相關的頭文件和庫文件添加到Building Block中,首先激活模塊的輸入端口,再將網絡應用程序移植到BuildingBlock的執行函數中。讀取輸入參數可利用函數GetlnputParameterValue()數據結果可通過SetOutputParameterValue()保存到參數輸出端口。

(5) 使用系統默認同調函數完成對Building Block的創建,生成DLL文件。

(6) 編譯成功后,從生成的文件目錄下將DLL文件拷貝到Virtools軟件安裝目錄下的BuildingBlock文件夾中,重新啟動Virtools調用執行。

用戶數據報協議通信模塊發出的信息在VC中可利用套接字(Socket)進行處理,完成信息交換。

首先調用WSAStartup()初始化Windows Sockets DLL 。WinSock的動態連接庫初始化成功后,在服務器端使用函數socket( int af, int type, int protocol )建立監聽Socket,type參數設定為SOCK_DGRAM,以使用UDP(數據報)通信協議。接下來調用bind()函數為Socket指定地址和端口(Port)。服務器端完成Socket對象綁定之后,使用listen()函數建立監聽隊列,進入監聽狀態準備接收客戶端連接請求,并設定最大連接數。當需要真正完成通信連接時,客戶端需調用connect()發出請求,系統使用WSAAsyncSelect()函數發出通知,服務器端調用accept()響應請求,完成通信連接。建立連接后,客戶端的Virtools程序就可以借由用戶數據報BB模塊發出自定義消息,而VC開發的服務器端通過分析消息,調用相關函數進行處理。結束通信連接由服務器或客戶端的任一端調用closesocket()套接字,并調用 WSACleanup()通知套接字動態鏈接庫釋放占用的資源。

3 串口通信模塊的開發

串口通信是利用數據信號線連接外設和計算機,完成按位數據傳輸的一種通信方法[6]。串口通信雙方連接采用端對端的方式,連接方式單一,硬件要求低,不容易出現相互干擾,查錯糾錯難度低,容易實現。但其存在接口插拔風險,要避免兩端通電狀態下的拔插,安全性低于網口。串口通信傳輸速度較慢,對于操作對象較多,交互數據量較大的虛擬操作軟件,傳輸數據量很難達到實時通信的要求,串口通信僅能應對虛擬環境較為簡單,操作對象單一的虛擬操作軟件。而且應用程序對串口具有獨占性,一旦某個程序占據串口,其他的程序則無法使用該串口。單一程序由于串行通信的特點也無法使用多線程進行串口通信否則會發生多個命令之間的干擾導致通信失敗。

開發串口通信模塊需要利用Virtools SDK開發構架,通過調用Win 32 API完成,靠指針依次調用執行注冊函數、聲明函數、創建函數、執行函數和回調函數,完成對模塊的開發(具體開發步驟可參考用戶數據報協議通信模塊開發)。在回調函數中調用Win32 API文件操作函數實現串口打開/關閉。CreateFile()函數實現串口打開,WriteFile()函數實現數據發送,ReadFile()函數則用來實現接受數據[6]。程序運行過程中,首先利用執行函數完成Building Block激活,接著參數初始化,然后與通信端利用握手機制建立連接,從計算機串口讀取并處理數據,數據結果可供其他模塊調用。串口通信模塊的循環調用可通過Virtools幀循環方式實現。

VC可利用多種方式接受Virtools通過串口發出的數據,如串行通信控件MSComm或利用串口通信類。串行通信控件主要應用于基于對話框開發的程序,通過事件驅動處理串行端口信息交互,發生數據交換或通信錯誤時,OnComm事件觸發,捕捉CommEvent屬性值,應用程序根據屬性值做出相應的信息處理。

其次可開發自定義的串口通信類,在單線程或多線程中實現串口通信。利用CreateFile()函數指定通信串口及相關屬性。通過調用GetCommState()函數讀取當前串口設置,通過SetCommState()函數寫入修改后的屬性。調用SetCommTimeouts()函數通過COMMTIMEOUTS結構設置異步讀寫的超時控制。串口讀寫操作主要運用ReadFile()與WriteFile()API函數。

4 利用Virtools消息機制通信

消息是對象之間在一次交互中所傳送的信息。為保持封裝對象成為各司其職,互不干擾的高內聚獨立單位,消息通信成為對象之間唯一合法的動態聯系途徑,使不同功能單元的行為互相配合,構成一個動態、有序的系統[7]。當系統發生某個事件時,操作系統將與這個事件關聯的消息放置到消息隊列,應用程序從消息隊列中接收消息并傳遞給適當的窗口,窗口響應并處理消息。所有的開發環境都有消息機制,因此借由消息機制,可以實現不同平臺之間的應用程序調用請求。消息機制可用于緩解甚至消除系統瓶頸,消息處理可并行展開,緩解點對點同步連接造成系統瓶頸,甚至可以消除瓶頸。通過多個消息接收者并發處理不同消息,還可以提高系統的整體可伸縮性和吞吐量。消息機制的這些特點都使它非常適用于完成虛擬平臺和VC軟件平臺之間的實時大數據量信息交互。

利用消息機制進行通信,首先需要Virtools留出通信接口,以方便VC讀取相關信息。Virtools消息通信模塊的開發基本步驟與串口通信模塊、UDP通信模塊類似,完成指定消息的發送需在執行函數中調用函數:

CKMessageManage:SendMessageSingle(CKMessageType MsgType,CKBeobjectdest,CKBeObjecl*sender=NUll)

VC可利用鉤子機制獲取Virtools發送的特定消息。應用程序使用鉤子機制能夠完成特定事件的截獲和處理。應用程序可以在鉤子(Hook)這個消息處理平臺上面設置子程序,以監測其他進程所創建的特定窗口的指定消息。指定消息存儲在鉤子鏈表中,即與信息相關聯的指針列表,該鏈表中的指針為各個類型的消息指定處理子程。這些處理子程叫做鉤子子程,鉤子子程可由應用程序自定義,它是應用程序的回調函數,可通過API函數SetWindowsHookEx()將其安裝到鉤子鏈表中。

VC利用鉤子機制截獲并處理Virtools發出的消息后,可以通過發送指定的虛擬鍵盤消息將消息處理結果反饋Virtools完成通信。Virtools自帶行為交互模塊Keyboard Controller、Keyboard Mapper支持將按鍵操作映射為系統消息或自定義消息。響應鍵盤消息可保證信息傳遞的多樣性。VC可以實現在不激活應用程序的情況下向其窗口發送模擬按鍵消息。首先使用FindWindow() 及 FindWindowEx()函數取得接收按鍵消息的窗口句柄,然后用PostMessage()向該窗口發送按鍵消息。運用這種方法可以依據VC發送的信息對虛擬物體或角色進行靈活多變的控制,流程圖如圖2所示,利用消息機制實現VC與Virtools的通信。

圖2 消息機制通信流程

5 利用Virtools陣列輸出機制通信

Virtools中的陣列用于建立數據、時間變量控制等,它由Column(列)和Row(行)組成[9]。Virtools的陣列可以存儲三維對象和攝像機的三維位置、矢量位移、旋轉方式、旋轉角度和動作時機等動作因素。Virtools提供了大量陣列操作BB,可以直接讀取三維物體的相關參數存儲到陣列或者根據陣列內存儲的參數驅動三維物體動作。在Virtools程序運行時,通過Test和2D Picking行為交互模塊判斷此時被用戶操作的虛擬物體,并將虛擬物體的參數變化通過SetCell行為交互模塊對陣列的每一個元素及相應參數進行設置。然后利用Array Save行為交互模塊將數組數據儲存成指定路徑下的文件檔案[9]。一旦VC軟件讀取這些文件檔案就可以提取Virtools虛擬軟件操作的結果,并根據結果做出反饋,完成信息交互。

完成存儲后利用Windows API實現對指定目錄中文件的監控,一旦發現文件改變,則立即進行處理,獲取數據。可使用的API函數有:FindFirstChangeNotification()和ReadDirectory ChangesW()。兩個函數都能夠監測文件最終寫入時間和文件大小的改變,從而實時監測陣列輸出指定文件,快速提取Virtools通過陣列機制輸出的信息。

當監控條件滿足時,FindFirstChangeNotification()函數返回的監控句柄結束在WaitForMultipleObjects() 上的等待狀態,變為激發狀態,這時應用程序得知目錄發生了變化并立即進行數據處理,數據處理結束后調用BOOL FindNextChangeNotification()來將該監控句柄置為去激活狀態,并繼續等待下一次被激活。完成文件監控時調用FindCloseChangeNotification()關閉監控句柄。

ReadDirectoryChangesW()函數使用CreateFile()獲取要監控目錄的句柄;然后循環調用ReadDirectoryChangesW()判斷文件是否改變,并分配內存用來存放目錄變化通知并傳給該函數。當監控條件滿足文件發生改變,函數把目錄變化通知存放在指定的內存區域內,并進行相關處理。

在VC程序中利用上述函數實時監控數組文件檔案存儲的指定路徑,一旦發現文件發生更改,使用CreateFile()函數取得對應文件的句柄,利用句柄使用ReadFile()函數讀取文件內容到指定字符串,并進行相應處理,處理完成后結果可使用WriteFile()函數再次寫入數組文件。Virtools可以在完成陣列輸出后,在規定響應時間內利用Array Load模塊讀取數組文件,利用數組元素完成虛擬物體的控制。利用Virtools數組輸出保存/讀取機制和VC文件監控函數完成信息交互,流程如圖3所示。

圖3 陣列輸出機制通信流程

6 結 語

本文對Virtools與VC的信息交互技術進行了深入分析,通過自定義模塊開發技術,將UDP協議、串口通信技術、消息通信機制嵌入到了Virtools的Building Block模塊中,豐富BB模塊的功能,彌補Virtools本身通信模塊的功能缺陷。在僅需利用Virtools已有模塊的情況下,提出利用Virtools陣列進行信息交互,使得Virtools與VC之間的通信手段更加多樣化。VC由于其突出的兼容性使其可以成為Virtools信息交互的中介,在技術上克服了Virtools與其他軟件平臺間通信的瓶頸問題,為Virtools與其他不同軟件平臺間進行信息交互搭建了一座橋梁,拓展了其應用范圍。

[1] 姜學智,李忠華.國內外虛擬現實技術的研究現狀[J].遼寧工程技術大學學報,2004(4):238-241.

[2] 牛彥,張爍男.基于Virtools技術的產品虛擬交互式操作指導系統構建[J].沈陽建筑大學學報,2012(5):569-572.

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

[4] 于修洪,項輝宇,牛凱.虛擬現實技術在機械產品裝配中的應用[J].現代制造工程,2011(5):39-42.

[5] 汪云飛,晁愛農,黃飛.基于Virtools的UDP協議嵌入模塊技術研究[J].計算機工程與設計,2010,31(8):1852-1855.

[6] 滕英巖,張福艷.基于Virtools和串口通信的界面交互性的設計與實現[J].微計算機信息,2010,26(17):88-90.

[7] 劉航,王春水,王積忠.基于視景仿真技術的某型裝備虛擬操作訓練系統[J].指揮控制與仿真,2007,29(2):79-82.

[8] 張豫南,郭文濤,田鵬,等.VC對Virtools二次開發實現網絡監控的研究[J].電腦編程技巧與維護,2010(20):118-120.

[9] 于丹東,徐英新,胥林.三維游戲設計師寶典一Virtools行為模塊詞典大全[M].電腦報電子音像出版社,2009.

RESEARCHONINFORMATIONCOMMUNICATIONBETWEENVIRTOOLSANDVISUALC++

Zhou Jie
(NavalSubmarineAcademy,Qingdao266042,Shandong,China)

To make up for the communication defect of Virtools (i.e. one of the virtual development platform mode) and rich the means of communication between Virtools and other software platform and expand the scope of application. This paper aim at the communication mechanism for Virtools and VC and propose methods of developing UDP communication module, serial communication module, using the Virtools message mechanism and Virtools array output mechanism to complete the data exchange between the two kinds of software platform. The methods can give full play to good compatibility of the VC development platform and provide a feasible way for data exchange between Virtools and other different software.

Virtools VC Communication

2017-02-20。周杰,講師,主研領域:發射裝置。

TP3

A

10.3969/j.issn.1000-386x.2017.08.059

猜你喜歡
機制利用信息
利用min{a,b}的積分表示解決一類絕對值不等式
中等數學(2022年2期)2022-06-05 07:10:50
利用一半進行移多補少
自制力是一種很好的篩選機制
文苑(2018年21期)2018-11-09 01:23:06
利用數的分解來思考
Roommate is necessary when far away from home
訂閱信息
中華手工(2017年2期)2017-06-06 23:00:31
破除舊機制要分步推進
中國衛生(2015年9期)2015-11-10 03:11:12
展會信息
中外會展(2014年4期)2014-11-27 07:46:46
注重機制的相互配合
中國衛生(2014年3期)2014-11-12 13:18:12
打基礎 抓機制 顯成效
中國火炬(2014年4期)2014-07-24 14:22:19
主站蜘蛛池模板: 欧美激情第一欧美在线| 国产9191精品免费观看| 日韩小视频在线播放| 欧洲高清无码在线| 精品国产电影久久九九| 2020最新国产精品视频| 亚洲国产在一区二区三区| 最近最新中文字幕在线第一页| 久久男人视频| 一级毛片在线直接观看| а∨天堂一区中文字幕| 国产打屁股免费区网站| 四虎影视无码永久免费观看| 一边摸一边做爽的视频17国产| 国产精品内射视频| 中文一级毛片| 亚洲无码视频一区二区三区| 97视频免费在线观看| 国产白丝av| 成人在线不卡视频| 福利一区三区| 99在线国产| 91麻豆国产视频| 国产国模一区二区三区四区| 欧美国产精品不卡在线观看| 亚洲日韩精品综合在线一区二区| 亚洲成人在线网| 久久这里只精品国产99热8| 亚洲五月激情网| 亚洲第一视频网| 成人在线天堂| 亚洲狼网站狼狼鲁亚洲下载| 国产亚洲精品自在久久不卡| 国产欧美中文字幕| 国产真实二区一区在线亚洲| 久久精品66| 真实国产精品vr专区| AV天堂资源福利在线观看| 91精品伊人久久大香线蕉| 色婷婷丁香| 精品无码一区二区三区电影| 欧美天天干| 欧美在线视频不卡第一页| 久久不卡国产精品无码| 日韩小视频在线播放| 欧美日韩91| 国产小视频a在线观看| 亚洲清纯自偷自拍另类专区| 国产小视频在线高清播放| 激情综合图区| 91在线日韩在线播放| 亚洲国产第一区二区香蕉| 在线播放91| 精品国产福利在线| 亚洲精品波多野结衣| 一区二区理伦视频| 青青青草国产| 国产亚洲欧美在线中文bt天堂| 久久精品中文无码资源站| 欧洲熟妇精品视频| 精品国产www| 欧美亚洲香蕉| 极品国产在线| 日韩午夜福利在线观看| 97国内精品久久久久不卡| 一个色综合久久| 国产精品女主播| 亚洲浓毛av| 国产亚洲美日韩AV中文字幕无码成人 | 综合色亚洲| 国产亚洲精品在天天在线麻豆| 四虎精品免费久久| A级全黄试看30分钟小视频| 亚洲天堂精品视频| 亚洲综合中文字幕国产精品欧美| 久热re国产手机在线观看| 国产91小视频| 亚洲欧美自拍中文| 久久久久国产精品免费免费不卡| 亚洲综合久久一本伊一区| 亚洲女同一区二区| 欧美天天干|