邱龍輝, 楚電明, 葉 琳
(青島科技大學(xué)機(jī)電工程學(xué)院,山東 青島 266061)
21世紀(jì)初,全新的輔助教學(xué)工具——基于VRML的虛擬模型庫(kù)在工程圖學(xué)輔助教學(xué)中得到了應(yīng)用[1-5]。虛擬模型庫(kù)因其三維模型造型逼真、控制靈活而在教學(xué)中起到了一定的作用。但是,已開(kāi)發(fā)的虛擬模型庫(kù)都是基于PC平臺(tái)開(kāi)發(fā)的,而由于PC平臺(tái)的在便攜性方面的限制,使得虛擬模型庫(kù)的應(yīng)用也受到了極大的限制。手持移動(dòng)設(shè)備的出現(xiàn),為解除這種束縛提供了條件,該類設(shè)備最重要的屬性即是其便攜性,而且隨著硬件水平的不斷提高,運(yùn)行平臺(tái)的實(shí)用性也日益增強(qiáng),現(xiàn)在越來(lái)越多的各種有便攜需求的移動(dòng)應(yīng)用在移動(dòng)設(shè)備平臺(tái)上得以實(shí)施?,F(xiàn)在隨著基于嵌入式系統(tǒng)的手持移動(dòng)設(shè)備——智能手機(jī)的普及,為虛擬模型庫(kù)的靈活使用提供了可能。為此,在做了許多的研究和探索工作的基礎(chǔ)上,設(shè)計(jì)了基于智能手機(jī) Windows Mobile——VRML平臺(tái)的工程圖學(xué)移動(dòng)虛擬模型庫(kù)系統(tǒng),移動(dòng)虛擬模型的特點(diǎn)在于沒(méi)有了使用平臺(tái)的限制,提高了虛擬模型庫(kù)的實(shí)用性,虛擬模型隨身移動(dòng),方便學(xué)習(xí)瀏覽使用,成功的拓展了虛擬模型庫(kù)的使用空間和時(shí)間,為進(jìn)一步優(yōu)化輔助教學(xué)環(huán)境提供了有效途徑。
移動(dòng)虛擬模型庫(kù)系統(tǒng)的設(shè)計(jì)目標(biāo)為:設(shè)計(jì)實(shí)現(xiàn)一個(gè)便攜的、可移動(dòng)使用的、可以利用已有VRML虛擬模型的三維模型瀏覽管理系統(tǒng),為學(xué)生學(xué)習(xí)制圖課程提供更方便的輔助學(xué)習(xí)工具。
移動(dòng)虛擬模型庫(kù)系統(tǒng)的組成如圖1所示。系統(tǒng)包含兩部分:VRML模型3D瀏覽器和模型文件管理器。在移動(dòng)設(shè)備的應(yīng)用軟件中目前沒(méi)有可用的VRML模型的3D瀏覽器,系統(tǒng)需要完成一個(gè)VRML瀏覽器的設(shè)計(jì),來(lái)實(shí)現(xiàn)模型VRML文件的讀入、解析和顯示輸出;模型文件管理器完成模型文件庫(kù)中文件的添加與刪除、列表的生成、文件的選擇等功能。
移動(dòng)虛擬模型庫(kù)的開(kāi)發(fā)要首先選定開(kāi)發(fā)運(yùn)行平臺(tái)。目前,移動(dòng)設(shè)備的系統(tǒng)平臺(tái)主要包括Windows Mobile、Android、iOS等,其中iOS僅用于蘋(píng)果的iPhone;Android系統(tǒng)是Google基于Linux開(kāi)發(fā)的開(kāi)源系統(tǒng),2010年以來(lái)推廣速度較快;Windows Mobile是微軟公司為手持設(shè)備推出的“移動(dòng)版Windows”,與PC版Windows有較好的文檔共享性。移動(dòng)虛擬模型庫(kù)系統(tǒng)的開(kāi)發(fā)運(yùn)行平臺(tái)決定先從Windows Mobile系統(tǒng)入手,后續(xù)再開(kāi)發(fā)其它系統(tǒng)的應(yīng)用。移動(dòng)虛擬模型庫(kù)系統(tǒng)及開(kāi)發(fā)運(yùn)行平臺(tái)模塊間的相互關(guān)系如圖2所示。在Windows Mobile系統(tǒng)中開(kāi)發(fā)VRML瀏覽器,需要用到Direct3D Mobile,Direct3D Mobile是微軟設(shè)計(jì)的3D圖形API,專門(mén)用于安裝了Windows Mobile系統(tǒng)的移動(dòng)和嵌入式設(shè)備。
圖1 移動(dòng)虛擬模型庫(kù)系統(tǒng)
圖2 模型庫(kù)系統(tǒng)及開(kāi)發(fā)運(yùn)行平臺(tái)模塊間的相互關(guān)系
Direct3D Mobile提供了Mesh類[6],綜合管理了圖元對(duì)象數(shù)據(jù)和繪圖方法,當(dāng)一個(gè)場(chǎng)景中的網(wǎng)格非常多、模型較復(fù)雜時(shí),將這些圖元用網(wǎng)格對(duì)象來(lái)表示,在 Device 設(shè)備中根據(jù)需要來(lái)繪制網(wǎng)格對(duì)象,將有效提高程序運(yùn)行效率。因此,系統(tǒng)決定采用Direct3D Mobile的Mesh類實(shí)現(xiàn)立體繪制。
Mesh是Direct3D Mobile提供的操作網(wǎng)格對(duì)象的類,使用索引方式繪制圖元。在 Direct3D Mobile中Mesh類主要提供了兩種基本方法在場(chǎng)景中創(chuàng)建網(wǎng)格:使用Mesh構(gòu)造函數(shù)創(chuàng)建和使用形狀創(chuàng)建。其中形狀創(chuàng)建功能只能建立長(zhǎng)方體、圓柱體等基本體。Mesh 構(gòu)造函數(shù)是通過(guò)定義Mesh對(duì)象的頂點(diǎn)緩沖 VertexBuffer 對(duì)象和索引緩沖對(duì)象 IndexBuffer、設(shè)置 Mesh的屬性AttributeRange來(lái)構(gòu)造圖元對(duì)象。然后通過(guò)一定的方法建立圖元頂點(diǎn)數(shù)據(jù)和索引數(shù)據(jù),并使用VertexBuffer和IndexBuffer的SetData()方法將頂點(diǎn)數(shù)據(jù)置于VertexBuffer和IndexBuffer對(duì)象中。最后通過(guò)Mesh對(duì)象的DrawSubset()方法來(lái)繪制圖元。
Mesh類的數(shù)據(jù)需求主要是用于建立VexterBuffer和 IndexBuffer對(duì)象。其一是用于Mesh的構(gòu)造函數(shù)定義VexterBuffer和IndexBuffer類的實(shí)例。分析Mesh構(gòu)造函數(shù)的參數(shù),在定義兩個(gè)緩沖實(shí)例時(shí)需要與模型數(shù)據(jù)有關(guān)的如下參數(shù):模型的平面數(shù)量(numFaces)、模型的頂點(diǎn)數(shù)量(numVertices)。
其二是用于設(shè)置VexterBuffer和IndexBuffer對(duì)象的數(shù)據(jù),該數(shù)據(jù)與VexterBuffer的頂點(diǎn)格式有關(guān),不同的頂點(diǎn)格式需要的坐標(biāo)數(shù)據(jù)不同。由于系統(tǒng)要實(shí)現(xiàn)模型的燈光效果,所以模型必須包含法線數(shù)據(jù)。因此 VexterBuffer的頂點(diǎn)格式(vertexFormat)必須定義為。PositionNormal需要如下數(shù)據(jù):頂點(diǎn)的坐標(biāo)數(shù)據(jù)(x,y,z),頂點(diǎn)的法線數(shù)據(jù)(Nx,Ny,Nz)。由此可知完成Mesh類的實(shí)例,還需要頂點(diǎn)的坐標(biāo)數(shù)據(jù),頂點(diǎn)的法線數(shù)據(jù)和面片的索引數(shù)據(jù)。
系統(tǒng)的3D瀏覽器需要從VRML文件中讀取有用的數(shù)據(jù),盡可能放棄目前對(duì)系統(tǒng)運(yùn)行速度有影響的數(shù)據(jù)。下面對(duì) VRML文件數(shù)據(jù)格式作簡(jiǎn)要分析。
圖3 VRML文件解析邏輯
工程圖學(xué)虛擬模型文件中的模型數(shù)據(jù)都是使用 VRML97標(biāo)準(zhǔn)中的 IndexFaceSet節(jié)點(diǎn)描述的[7]。在IndexedFaceSet節(jié)點(diǎn)中包含4個(gè)重要的域:coord、normal、coordIndex、normalIndex。其中 coord域值為一個(gè)Coordinate節(jié)點(diǎn),Coordinate節(jié)點(diǎn)中使用包含MFVec3f域值的point域描述坐標(biāo)點(diǎn)列表,形如“x y z,”,z后的逗號(hào)為不同三維矢量的分隔符,最后一個(gè)域值后的“]”為point域的結(jié)束符。normal域值是一個(gè)Normal節(jié)點(diǎn),其包含的vector域的域值形式與point相同,用于表示一個(gè)面片的法線列表。coordIndex域用于描述面片頂點(diǎn)的坐標(biāo)點(diǎn)索引,使用MFInt32類型的域值,形如“P1, P2, P3, -1”,其中“-1”表示當(dāng)前面片頂點(diǎn)索引的結(jié)尾。normalIndex域用于描述面片頂點(diǎn)的法線索引,使用MFInt32類型的域值,形如“N1, N2, N3, -1”,其中“-1”表示當(dāng)前面片法線索引的結(jié)尾。各個(gè)域中,域值的數(shù)量由模型的形狀決定,一般情況下,coordIndex和normalIndex中域值的數(shù)量相同,各為p個(gè)。
根據(jù)第2節(jié)中的分析,完成Mesh定義需要的數(shù)據(jù)包括:模型的平面數(shù)量(numFaces)、模型的頂點(diǎn)數(shù)量(numVertices)、頂點(diǎn)的坐標(biāo)數(shù)據(jù)(x,y,z)、頂點(diǎn)的法線數(shù)據(jù)(Nx, Ny, Nz)、面片的索引數(shù)據(jù)。
由第 3節(jié)中分析,VRML中的數(shù)據(jù)格式與Mesh需要的格式不同,因此VRML中IndexFaceSet節(jié)點(diǎn)不能夠直接讀入并存儲(chǔ)進(jìn) VexterBuffer,應(yīng)根據(jù)需要經(jīng)過(guò)文件解析。通過(guò)文件解析,系統(tǒng)的VRML模型3D瀏覽器將主要讀取第3節(jié)中所述的IndexFaceSet節(jié)點(diǎn)中的4個(gè)域的值數(shù)據(jù)。
VRML文件解析邏輯如圖3所示。使用Mesh類構(gòu)造函數(shù)建立網(wǎng)格需要用到模型的平面數(shù)量和頂點(diǎn)數(shù)量,而 VRML文件中沒(méi)有此類數(shù)據(jù),因此文件解析首先要完成 VRML中IndexedFaceSet類中coord域、coordIndex域中該值的統(tǒng)計(jì)。另外,還應(yīng)完成normal域中法線數(shù)量的統(tǒng)計(jì),方便后續(xù)法線數(shù)據(jù)的解析。
使用構(gòu)造函數(shù)完成Mesh類的實(shí)例定義后,需設(shè)置Mesh類的頂點(diǎn)緩沖(VertexBuffer)數(shù)據(jù),此處應(yīng)建立PositionNormal格式的坐標(biāo)數(shù)組,即數(shù)組中需要頂點(diǎn)的坐標(biāo)數(shù)據(jù)(x,y,z)和對(duì)應(yīng)的法線數(shù)據(jù)(Nx,Ny,Nz),而在VRML中頂點(diǎn)的坐標(biāo)數(shù)據(jù)和法線數(shù)據(jù)是通過(guò)坐標(biāo)索引和法線索引實(shí)現(xiàn)一一對(duì)應(yīng)的,因此文件解析隨后要完成 coord域、coordIndex域、normal域、normalIndex域中值數(shù)據(jù)的讀取,然后利用索引對(duì)應(yīng)關(guān)系,將相關(guān)的坐標(biāo)和法線數(shù)據(jù)存入PositionNormal數(shù)組,并生成對(duì)應(yīng)的索引數(shù)組。
圖4 仿真器運(yùn)行
圖4是系統(tǒng)在設(shè)備仿真器中的運(yùn)行效果,仿真器系統(tǒng)為Windows Mobile 5.0。圖5是系統(tǒng)在實(shí)際設(shè)備中的運(yùn)行效果,設(shè)備為O2 Flame智能手機(jī),CPU主頻520MHz,運(yùn)行內(nèi)存128MB,屏幕分辨率480×640,操作系統(tǒng)為Windows Mobile 5.0。
圖5 智能手機(jī)運(yùn)行
本文設(shè)計(jì)的“工程圖學(xué)移動(dòng)虛擬模型庫(kù)”,基于智能手機(jī)Windows Mobile操作系統(tǒng),實(shí)現(xiàn)了移動(dòng)虛擬模型庫(kù)系統(tǒng)的設(shè)計(jì),虛擬模型隨身移動(dòng),方便學(xué)習(xí)瀏覽使用,成功的拓展了虛擬模型庫(kù)的使用空間和時(shí)間,為進(jìn)一步優(yōu)化輔助教學(xué)環(huán)境提供了有效途徑,也為其它虛擬模型的移動(dòng)應(yīng)用提供了基礎(chǔ)。
[1]葉 琳. 機(jī)械制圖虛擬現(xiàn)實(shí)網(wǎng)絡(luò)模型室的建立[J].工程圖學(xué)學(xué)報(bào), 2002, 23(3): 202-206.
[2]王和順, 汪 勇, 徐 宏. 基于 VRML的網(wǎng)絡(luò)虛擬模型庫(kù)創(chuàng)建的研究[J]. 機(jī)械與電子, 2003, (6):67-68.
[3]陳雪菱, 李 麗, 王興建. VRML在工程圖學(xué)虛擬模型庫(kù)中的應(yīng)用研究[J]. 成都理工大學(xué)學(xué)報(bào)(自然科學(xué)版), 2005, 32(4): 407-409.
[4]馮桂珍, 池建斌, 王大鳴, 等. 基于 Web的機(jī)械制圖虛擬模型庫(kù)的構(gòu)建[J]. 工程圖學(xué)學(xué)報(bào), 2008, 29(6):149-153.
[5]張愛(ài)蓮, 趙建軍. 基于VRML的工程圖學(xué)教學(xué)虛擬模型室的研究及實(shí)現(xiàn)[J]. 裝備制造技術(shù), 2008, (12):9-11.
[6]Microsoft. Microsoft.WindowsMobile.DirectX.Direct3D命名空間[EB/OL], http://msdn.microsoft.com.
[7]ISO/IEC 14772-1:1997,The Virtual Reality Modeling Language (VRML)—— Part 1: Functional specification and UTF-8 encoding [S].