文獻標識碼: A
文章編號: 0258-7998(2012)01-0014-03
隨著人們生活節(jié)奏的加快,,很多人難以做到經常進行體育鍛煉。近幾年對該問題提出了多種解決方案,,其中運用體域網(Body Area Network)技術實現(xiàn)的健身方案逐漸受到市場的青睞,。
體域網通過連接多個傳感器節(jié)點,實現(xiàn)人體周邊,、體表以及體內范圍的通信,,支持醫(yī)療保健、個人娛樂等功能,。它把人體變成通信網絡的一部分,,從而真正實現(xiàn)了網絡的泛在化,具有廣泛的應用前景和巨大的市場潛力,。
該系統(tǒng)使用ZigBee技術組成體域網,,并將采集到的人體運動信息以無線的方式發(fā)送到Windows Phone 7系統(tǒng)上。運用XNA技術和.NET 框架,,在系統(tǒng)上模擬實現(xiàn)110 m跨欄競賽流程的3D游戲,。用戶可通過屏幕看到模擬的運動畫面,增加鍛煉的趣味性,,提高人們對運動的熱情,。系統(tǒng)具有體積小巧、方便易用的特點,,適合在相對較小的空間使用,。
1 系統(tǒng)總體架構設計
體感健身系統(tǒng)首先通過高靈敏的角度傳感器和心率傳感器實時采集運動者腿部擺動角度以及心率變化信息,然后利用ZigBee模塊組成體域網,,再傳輸到平臺中,。系統(tǒng)對收到的信息進行處理,實時模擬出一個3D跨欄的游戲。系統(tǒng)結構圖如圖1所示,。
Windows Phone 7是微軟公司于2010年10月發(fā)布的全新智能手機操作系統(tǒng),。它并不是之前Windows Mobile操作系統(tǒng)的升級或是繼承,而是一個全新的操作系統(tǒng),,它基于Windows Embedded Compact 7新內核編寫系統(tǒng),,完全脫離了Mobile 6的技術架構。簡潔華麗的metro界面,,宣告了它不同以往的風格,;采用全新的Push Notification技術方便了手機終端與服務器的數據同步[1]。
為方便開發(fā),,Windows Phone 7提供了模擬器(Emulator),Emulator可以運行在Windows 7操作系統(tǒng)下,,并且在調試和運行程序時,,不需要將游戲部署到真正的設備中[2]。
2 系統(tǒng)硬件設計
2.1 ZigBee數據采集模塊
ZigBee數據采集模塊是硬件平臺的關鍵部分,,該部分首先利用ZigBee技術組成體域網,,然后采集用戶橈動脈處的脈搏信號和腿部的擺動角度信號,處理后再以無線的方式將數據傳輸到系統(tǒng)接收模塊上,。為了擴大系統(tǒng)的應用范圍,,將來也可考慮用藍牙設備作為無線傳輸工具。體感傳感器模塊硬件框圖如圖2所示,。
2.2 數據接收模塊
系統(tǒng)接收端使用CC2531內置的USB將從ZigBee模塊接收到的數據傳到手機終端上,。
3 系統(tǒng)軟件設計
3.1 開發(fā)環(huán)境
系統(tǒng)軟件部分使用Visual Studio 2010開發(fā),與舊的Visual Studio 版本相比,,最新版本的Visual Studio 在性能上有很大提升,,方便程序員高效地編寫高質量的代碼。而且微軟公司提供的Windows Phone 7開發(fā)包都是基于Visual Studio 2010的,,因此本設計選擇Visual Studio 2010作為軟件開發(fā)平臺,。
Windows Phone 7提供了兩種不同的開發(fā)平臺:Silverlight for Windows Phone和XNA 4.0 Game Studio。Silverlight是為開發(fā)Windows Phone7準備的,。XNA 4.0 Game Studio是為開發(fā)游戲準備的,。
XNA是微軟公司推出的通用軟件開發(fā)平臺,建立在C#的基礎上方便游戲開發(fā)的一組工具集,,目的是讓游戲開發(fā)過程更加輕松簡單并富有樂趣,。XNA 4.0比起之前的嵌入式版本XNA 3.1而言進步非常明顯,能夠支持3D游戲,,而且還封裝了Open GLES 2.0的接口[3],。
為了支持XNA的開發(fā),開發(fā)環(huán)境還需要安裝.NET Framework 4或.NET Framework 4的 Runtime動態(tài)連接庫,,否則XNA工程將無法正常編譯,。開發(fā)環(huán)境層次圖如圖3所示,。
3.2 系統(tǒng)軟件實現(xiàn)
3D游戲主要設計實現(xiàn)模擬110 m跨欄競賽的流程。圖4展示了游戲全部模塊的關系結構,。對于軟件開發(fā)人員而言,,主要實現(xiàn)的是導入模型、渲染場景,、輸入處理,、音效處理及運行時機制等功能。下面結合本系統(tǒng)的特點分別對上述幾個模塊給出處理方法,。
3.2.1 模型導入
模型的導入需要XNA的內容管道(pipeline)來支持,。XNA自帶了兩類3D模型的導入處理器,可以分別處理
.FBX文件和.x文件,。其中,,.x文件在DirectX 3D編程中應用得比較廣泛。系統(tǒng)軟件使用MAYA制作三維動畫文件,,通過插件導出為DirectX(.X)文件,,經過pipeline導入器處理后,所有不同類型的內容文件都被轉換成XNA框架的內部格式,。在游戲生成階段,,編譯器直接將這些文件封裝到游戲的內容管理模塊(Content Manager)中。
Content Manager是由XNA框架Runtime引擎驅動的,,具有良好的封裝,,在形式上對程序員是透明的。使用模型文件的時候,,調用Content Manager的Load<T>方法即可實現(xiàn)對模型的導入,。具體實現(xiàn)代碼為:
public Model dc_model = null;
再在LoadContent()函數中對模型變量賦值,用Load方法導入模型,。具體實現(xiàn)代碼如下:
dc_model
=Game.Content.Load<Model>(@"Models\"+"fuwa");
fb_model_batch
= new ModelBatch(Game.GraphicsDevice);
其中,,模型文件的存儲位置以相對路徑的形式導入,有效避免了系統(tǒng)安裝在別的目錄后找不到模型文件的錯誤,。模型導入效果如圖5所示,。
3.2.2 場景渲染
場景渲染是將已導入到緩沖區(qū)的模型及紋理繪制在顯示屏上。雖然涉及到大量的繪制操作,,但利用XNA提供的繪制精靈(SpriteBetch),,可以輕松地完成這一工作。在計算機圖形學術語中,,精靈被定義為一張集成在大場景中的二維或者三維圖像,。屏幕顯示管理模塊就是通過繪制場景中的多種精靈來完成的。XNA框架提供的精靈也可以用來進行二維圖像繪制,本系統(tǒng)中所有屏幕顯示文本都是由精靈繪制的,。
除此之外,,開發(fā)者還需要關心世界變換矩陣、攝像機變換矩陣和投影變換矩陣的設置,。世界變換矩陣是指將模型坐標系變換為三維世界坐標系的矩陣[4],。具體實現(xiàn)代碼為:
final_world_transforms = Matrix.Identity
*Matrix.CreateFromYawPitchRoll(dc_rotation.Y, dc_rotation.X, dc_rotation.Z)
* origional_world_transforms
* Matrix.CreateTranslation(dc_position);
攝像機矩陣是以攝像機所在坐標為原點,以攝像機要觀察的方向為基準,,創(chuàng)建一個新的攝像機坐標系,,將世界坐標系變換為攝像機坐標系[4]。XNA提供了一個CreateLookAt的方法,,它返回一個矩陣,。這個矩陣存儲了從三維圖形轉換為平面圖形需要做的方向和位置變換。具體實現(xiàn)代碼為:
//Make the camera follow the object
cmr_position = object_to_follow + cmr_drag;
cmr_target = object_to_follow;
//Create the view matrix
cmr_view
=Matrix.CreateLookAt(cmr_position,
cmr_target, Vector3.Forward);
投影變換矩陣,,是指將三維坐標系變?yōu)槎S坐標系的變換矩陣,。其功能是將三維物體進行轉換,以便在二維屏幕上輸出,。這里用到的投影變換是投射投影法。用此投影法可以表現(xiàn)物體距離的遠近,。具體實現(xiàn)代碼如下:
//Create the projection matrix
cmr_projection
=Matrix.CreatePerspectiveFieldOfView
(MathHelper.ToRadians(cmr_camera_fov),
graphics_device_in_cmr.Viewport.AspectRatio, 1, 10000);
AspectRatio為程序窗口的長寬比,,1為最近可視距離, 10 000為最遠可視距離。
3.2.3 音效處理
聲音管理器(AudioManager)繼承自GameComponent,,負責管理游戲需要使用的聲音,。XNA框架提供了能夠處理聲音的SoundEffectInstance類型,類型中除了包含聲音播放的相關方法,,還封裝了聲音效果渲染方法[5],。聲音管理模塊還設計了一個字典(泛型Dictionary)用于存放所有的音效。泛型在排序和搜索方面比普通數據類型要好得多,。加載聲音,、播放聲音、停止聲音和暫停聲音都是調用SoundEffectInstance類型中封裝的對應方法,,將聲音名稱傳入之后,,在聲音字典里查找,如果存在,,則進行相應操作,。
3.2.4 輸入處理
本系統(tǒng)是為Windows Phone 7設備開發(fā)的體感游戲,用戶在游戲過程中,,需要進行跑和跳的動作來完成游戲,。系統(tǒng)所讀取到的輸入信號就是傳感器在垂直空間的位置變化。輸入處理的流程是,首先使用C#接口函數讀取USB輸入的數據,,然后初始化一個三維向量(Vector3)的臨時變量statevalue,,再初始化一個布爾變量isjump表示是否有跳躍動作,之后對變化后的statevalue進行向量的單位化操作,,最后根據兩個變量的值確定模型的動作,。
游戲使用事件輪詢驅動,不論當前是否有輸入操作,,都對輸入模塊進行訪問,。這與傳統(tǒng)的應用程序開發(fā)的事件注冊驅動是不同的。采用事件注冊驅動的程序,,用戶輸入后系統(tǒng)對其進行捕捉,,喚醒事件處理程序,即在輸入信號產生之前程序不會做任何事,。相比之下,,XNA框架游戲程序由事件輪詢驅動,游戲程序會主動詢問系統(tǒng)是否有用戶輸入發(fā)生,,不論有沒有用戶輸入,,程序都會一直運行。
3.2.5 游戲運行時機制
本質上,,游戲運行是由循環(huán)的一系列操作組成,,這些操作被反復使用直到游戲結束。但游戲循環(huán)只包含繪制和更新兩個方法,,所有影響游戲的邏輯都將在這些方法中完成,。繪制時需要與系統(tǒng)進行大量的數據交互,尤其繪制圖像時更將耗費大量系統(tǒng)空間,。為減少繪制方法的負擔,,提高系統(tǒng)性能,游戲將運行需要的所有操作(碰撞檢測,、更新分數,、游戲結束檢測等等)都放到更新方法中實現(xiàn)。
在實現(xiàn)繪制方法的過程中,,用到了XNA的深度緩沖(depth buffer)和模板緩沖(stencil buffer)等特性,。深度緩沖和模板緩沖是XNA框架中圖形設備的屬性??紤]到游戲運行時圖形設備需要繪制的場景較大,,內容較多,并且還包括完成渲染模型的動畫效果等工作,,因此,,開啟緩沖功能有助于提高圖形設備性能,。繪制方法流程圖如圖6所示。
本文詳細介紹了體感健身系統(tǒng)開發(fā)的過程和方法,,對XNA開發(fā)3D游戲過程中重要的函數給出了使用說明,。系統(tǒng)可以幫助那些運動場地受限制或者行動不便的
人提高運動樂趣,具有比較廣泛的應用范圍,。
參考文獻
[1] 韓續(xù).Windows Phone 7平臺下電子健康軟件的設計與實現(xiàn)[M].北京:清華大學出版社,,2008.
[2] PETZOLD C.Programming Windows Phone 7[M].Redmond:Microsoft Press,2010.
[3] SHERROD A. DirectX游戲開發(fā)終極指南[M].北京:北京交通大學,,2011.
[4] 張景仁,,蔡發(fā)奎.基于XNA的機場火災消防模擬設計[J].武警學院學報,2007(12):31-34.
[5] Araon Reed. Learning XNA 4.0.O′reilly media[Z].2010.