朱英浩
(國防信息學(xué)院四系,湖北 武漢430010)
當(dāng)前,基于Flash格式(SWF)全景影像的網(wǎng)上三維展示技術(shù)已經(jīng)被廣泛用于展館、史館、校園和旅游景點的宣傳介紹,其優(yōu)點是所展示的三維場景表面逼真,文件大小與對象復(fù)雜程度基本無關(guān),制作過程相對簡單,但缺點是必須以已經(jīng)存在的實際場景為依據(jù),展示時只能繞若干個中心點旋轉(zhuǎn)或縮放,不能沿中心點形成的路線漫游,無論修改場景中的哪個要素都需要由開發(fā)者重新制作,不便于建設(shè)單位靈活修改和自由擴(kuò)充.如果用相機(jī)拍攝實際場景作為模型及其紋理主要素材來源,用Photoshop等工具處理紋理主要素材,用AutoCAD或3DStudio MAX等工具通過平面設(shè)計與三維建模,將生成的三維模型導(dǎo)出為虛擬現(xiàn)實建模語言(virtual reality modeling language,VRML)或可擴(kuò)展3D(eXtensible 3D,X3D)格式,再發(fā)布到網(wǎng)頁上,就可以克服上述缺點.這種方法除了也需要以已經(jīng)存在的實際場景為依據(jù)外,最主要缺點是平面設(shè)計與三維建模均由專業(yè)級制作工具軟件完成,制作過程相對復(fù)雜,對于紋理制作需要大量人工干預(yù),比如需要手工排版與修飾的文字變?yōu)榧y理圖片后就不再有文字屬性,涉及要素修改也需要由開發(fā)者重新制作.積極吸取了國內(nèi)外史館網(wǎng)站和虛擬場景建設(shè)成果優(yōu)點,將標(biāo)準(zhǔn)化和擴(kuò)展性相結(jié)合,以Visual C++for Windows為編程工具,把史館所涉及到的各個要素進(jìn)行了分層分解和統(tǒng)一編碼管理,構(gòu)建了“網(wǎng)上三維虛擬史館模擬系統(tǒng)”,已經(jīng)實現(xiàn)了在只有平面設(shè)計圖和版面圖片以及對應(yīng)主題的影像等部分特定要素而沒有實際存在的史館條件下,用戶經(jīng)過少量操作,系統(tǒng)就可以自動生成包含網(wǎng)頁框架、VRML/X3D格式三維場景、導(dǎo)航和控制按鈕以及JavaScript程序的網(wǎng)上三維虛擬史館,建設(shè)單位可以靈活修改和自我擴(kuò)充各個要素,不僅可以部分彌補(bǔ)沒有實體史館的缺失,而且可以為實體史館的建設(shè)提供參考.
要實現(xiàn)系統(tǒng)方便的網(wǎng)上三維虛擬史館生成、修改與擴(kuò)充功能及其在遠(yuǎn)程的瀏覽與交互控制,涉及的主要功能有文件目錄編碼管理、平面設(shè)計、版面設(shè)計、元素生成、場景生成和網(wǎng)頁生成等,對每一功能模塊都進(jìn)行了精心設(shè)計與實現(xiàn),并與其他功能模塊協(xié)調(diào)關(guān)聯(lián).
1.1 文件目錄編碼管理 通過分析平面設(shè)計圖的史館對外展示部分,主要內(nèi)容可以劃分為展板、展桌、標(biāo)牌、展牌、燈箱、燈光、墻面、壁柱、吊頂、天花板、地毯、地面、墻基、影像、塑像、音樂、花壇和參觀路線共計18類要素,構(gòu)成三維史館就以這18類要素為基本依據(jù).由于地面是場景其它所有要素的基礎(chǔ),故在地面文件內(nèi)首先對展廳進(jìn)行編號作為一級編碼(2位,如00),按展廳劃分主題名稱、播放音樂和場景視點.展板是展廳內(nèi)最主要的對象,每個展廳都有展板,展板涉及到版面標(biāo)題、附加標(biāo)題、展板說明、數(shù)量不等的圖片及其字?jǐn)?shù)不等的圖片說明.因此,在一級編碼基礎(chǔ)上對展板進(jìn)行二級編碼(2位,如00_00),展板涉及的底板圖片、版面標(biāo)題、附加標(biāo)題、展板說明就以此為依據(jù)進(jìn)行文件目錄編碼管理,再在二級編碼基礎(chǔ)上對展板圖片進(jìn)行三級編碼(3位,如00_01_000),每張圖片所對應(yīng)的紋理圖片、放大圖片和圖片說明及提示信息就以此為依據(jù)進(jìn)行文件目錄編碼管理.文件目錄編碼管理功能模塊用對話框?qū)ζ矫嬖O(shè)計所有要素圖層文件名稱及路徑進(jìn)行設(shè)置和自動產(chǎn)生.
1.2 元素生成功能 由于原始圖片通常分辨率較高,不同分辨率和寬高比例的原始圖片僅適用于輸出采樣,難以直接用于排版,解決方法是對每張原始圖片都生成256×256同名小圖片,建立圖目表,用邏輯值標(biāo)識小圖片是否已經(jīng)生成,避免修改和擴(kuò)充時重復(fù)生成.屬于不同類型要素的版面名稱、版面說明、照片說明和標(biāo)牌及展牌所對應(yīng)的文字都需要考慮排版換行和保持字體比率,生成對應(yīng)的不同方向、大小、顏色、字體紋理圖片,比如標(biāo)牌主要是豎排的漢字名稱,但下方可能還有橫排的年月數(shù)字,需要合成為同一塊標(biāo)牌.解決方法是建立標(biāo)牌目錄表,賦予文字內(nèi)容和不同類型要素以及幾何尺寸等屬性,通過Visual C++調(diào)用三維圖形庫OpenGL技術(shù)編程實現(xiàn)不同類型文字生成專用程序,分別用“門牌生成”、“標(biāo)牌生成”、“展牌生成”、“標(biāo)題生成”和“年月生成”把對應(yīng)文字先屏幕立體感顯示,再按照需要自動旋轉(zhuǎn)、縮放、剪切和排列保存為圖片文件作為紋理來源,并構(gòu)建對應(yīng)的矢量提示文字.
1.3 平面設(shè)計功能 平面設(shè)計功能模塊以平面設(shè)計圖為依據(jù)對18類要素圖層自動生成一個項目工作空間(*.wor)文件,對每個圖層分別產(chǎn)生MapInfo交換格式(*.mif/*.mid)的圖形信息和屬性信息數(shù)據(jù)結(jié)構(gòu)及其輸入/輸出批處理功能,用戶可以很方便地用MapInfo完成每個圖層的修改與輸入/輸出.
1.4 版面設(shè)計功能 展板本身都具有位置、朝向、基高、寬度、高度以及厚度等幾何屬性,內(nèi)部又涉及到復(fù)雜的排版,工作量較大,版面設(shè)計功能模塊可以對應(yīng)每塊展板自動生成一個工作空間(*.wor),包含了由展板寬度和元素圖片大小自動確定的版面標(biāo)題層和附加標(biāo)題層,由展板高寬比、版面圖片平均高寬比與說明文字?jǐn)?shù)量初步自動分布好的展板說明層、版面圖片層和圖片說明層,用戶可以很方便地對每塊展板進(jìn)行文字修改和少量版面調(diào)整.
1.5 場景生成功能 場景生成功能模塊可以在指定路徑目錄生成主場景文件(Museum*.wrl)和18類VRML/X3D三維對象文件(*.wrl)及其對應(yīng)紋理圖片、放大圖片和圖片說明(如圖1所示).主場景包含了多個視點語句、交互控制語句、彈出放大圖片語句和調(diào)用其他文件的“Inline”語句,考慮到用戶需要網(wǎng)絡(luò)條件,對可帶音樂的地面、標(biāo)牌與燈箱的紋理圖片和展板彈出放大圖片分瀏覽版、標(biāo)準(zhǔn)版和高清版3個版本.每個圖層修改后對應(yīng)三維對象文件獨立更新,無需修改其他三維對象文件和主場景文件,大大方便了用戶自我修改和靈活擴(kuò)充.
1.6 網(wǎng)頁生成功能 網(wǎng)頁生成功能模塊使得用戶無需編程就可以根據(jù)指定的路徑目錄自動生成包含三維場景、導(dǎo)航條、導(dǎo)航圖和控制條的框架網(wǎng)頁(*.html)及其包含的JavaScript程序,與三維主場景內(nèi)部對象自動按圖層編碼確定所有模型名稱的放大鏈接對應(yīng)關(guān)系和瀏覽路線的視點控制關(guān)系,通過網(wǎng)頁操作可以實現(xiàn)對場景中展板圖片、說明或展牌的彈出放大圖片和視點控制.其中導(dǎo)航條和導(dǎo)航圖的每塊區(qū)域均代表一個展廳,分別按歷史階段和幾何位置排列,用于實現(xiàn)鼠標(biāo)對展廳視點的切換.導(dǎo)航控制條圖標(biāo)分別用于實現(xiàn)停止、漫游、行進(jìn)、左轉(zhuǎn)、右轉(zhuǎn)、放大、縮小、仰視和俯視等操作.
圖1 系統(tǒng)部分界面
三維主場景是網(wǎng)頁的嵌入對象,在三維主場景文件和網(wǎng)頁文件中均嵌入了JavaScript程序,開發(fā)編程時調(diào)試好源碼后分別放在各自生成模塊內(nèi),訪問網(wǎng)頁使事件傳入到三維主場景內(nèi),點擊三維場景對象又將其屬性傳到網(wǎng)頁.設(shè)高清版場景中某個展板圖片編號為xx_xx_xxx,序號為xxxxx,三維坐標(biāo)為[x1 y1z1,x2y2z1,x2y2z2,x1y1z2],放大圖片像素寬高分別為Imwidth與Imheigh,主要步驟如下:
1)在網(wǎng)頁內(nèi)標(biāo)識為Scene的嵌入VRML對象,把showDiv()作為其鼠標(biāo)進(jìn)入事件函數(shù):
〈object onmouseover="showDiv()"classid="CLSID:86A88967-7A20-11d2-8EDA-00600818EDB1"align="absmiddle"id="Scene"〉〈param name="Scene"value="MuseumHDMI.wrl"〉〈/object〉.
2)在網(wǎng)頁的JavaScript程序內(nèi)定義相應(yīng)的變量M_e和函數(shù)showDiv():
其中Groupofscript[]是與元素圖片同時生成的“*.js”文件內(nèi)提示文字字符串?dāng)?shù)組,可以避免VRML
對象的漢字亂碼問題,函數(shù)pup()、dowhat()和dismiss()分別用于彈出圖片和文字提示及其消失:
3)在三維主場景文件內(nèi)分別定義帶觸摸傳感器的圖片框架RectPT_xx_xx_xxx、JavaScript函數(shù)JS()以及路由語句:
這樣根據(jù)展板或展牌圖片編號從指定的文件目錄而不是從VRML對象中讀取觸摸展牌圖片對應(yīng)的彈出放大圖片,可以大大減少三維主場景的數(shù)據(jù)量,實現(xiàn)所有展板圖片的彈出放大.
建設(shè)單位只要具備相關(guān)數(shù)字資料,用本文中開發(fā)的系統(tǒng)按流程運行后,很快就可以建立瀏覽版、標(biāo)準(zhǔn)版和高清版的網(wǎng)上三維史館(如圖2所示),具有60年光榮歷史的某單位由此所構(gòu)建的網(wǎng)上三維史館目前已經(jīng)試運行,初步表明建設(shè)單位可以靈活修改,訪問用戶可以滿足應(yīng)用服務(wù).
圖2 網(wǎng)上三維史館部分場景
[1]張杰編.VRML2.0交互式三維圖形編程[M].汕頭:汕頭大學(xué)出版社,1991.
[2]汪志達(dá),葉偉.VRML虛擬現(xiàn)實網(wǎng)頁設(shè)計[M].北京:清華大學(xué)出版社,2006.
[3][加]Jonathan Snook.JavaScript捷徑教程[M].北京:人民郵電出版社,2009.