楊 帆,蘭 嵐
(遼寧工程技術大學 測繪與地理科學學院,遼寧 阜新 123000)
20世紀80年代,Jaron Lanier提出“虛擬現(xiàn)實”(Virtual Reality,VR)的觀點,目的在于建立一種新的用戶界面,使用戶可以置身于計算機所表示的三維空間資料庫環(huán)境中,創(chuàng)造出一種“親臨其境”的感覺。虛擬現(xiàn)實以其多感知性、浸沒感、交互性以及構想性等特征在房產(chǎn)開發(fā)、城市規(guī)劃、工業(yè)仿真、醫(yī)學等諸多方面均得到廣泛的應用,已成為21世紀重要的發(fā)展學科及重要技術之一。
X3D是由Web3D聯(lián)盟于1998年年底提出的,是一種專為萬維網(wǎng)而設計的三維圖像標記語言,是下一代具擴展性三維圖形規(guī)范,并且延伸了VRML97功能。X3D是互聯(lián)網(wǎng)3D圖形國際通用軟件標準,定義了如何在多媒體中整合基于網(wǎng)絡傳播的交互三維內容。為滿足工業(yè)、農業(yè)、娛樂、虛擬社區(qū)等方面的內容提供了3D圖形、2D圖形、動畫設計、用戶交互、導航功能和腳本等新的特性。
目前,X3D在三維建模[1]、仿真[2]、虛擬場景漫游系統(tǒng)[3](虛擬校園[4]、虛擬圖書館等[5])、交互技術[6]等方面研究較多,也相對成熟。本文主要介紹一種以X3D三維圖像標記語言和3DSMax建模工具為基礎的,用來進行場景虛擬實現(xiàn)的設計方法。
X3D是XML和VRML97的結合,將XML的標記式語法定義為三維圖形的標記語言,規(guī)范使用可擴展標記語言XML表達對VRML幾何造型和實體行為的描述能力,其系統(tǒng)由內核、VRML97特性集、應用程序接口和擴展集4部分組成。
X3D坐標系統(tǒng)采用三維立體的笛卡爾坐標系,坐標設置方式如圖1所示。在笛卡爾坐標系中,用米作為場景坐標系統(tǒng)的測量單位,其他坐標系統(tǒng)根據(jù)基準的場景坐標系統(tǒng)的變換確定坐標方位。X3D三維立體空間物體造型的定位,依靠X3D立體空間坐標系實現(xiàn)。其中x,y,z軸為每個空間物體造型定義了一個坐標系。從瀏覽者的角度來說,在三維立體空間中,x軸的正方向指向右邊,y軸的正方向指向正上方,z軸的正方向指向前方??臻g物體的造型在該坐標系中的位置由相對該坐標原點的三維坐標來確定。
圖1 坐標設置方式
利用三維立體空間的笛卡爾坐標系統(tǒng),模型的變換使用組件(Grouping component)中的Transform節(jié)點和Billboard節(jié)點類進行坐標定位;取景器變換,使用導航組件Navigation component中的Viewpoint節(jié)點改變觀察視點角度和距離。
X3D開發(fā)環(huán)境包括記事本編輯器和X3D-Edit專用編輯器,是用來編寫X3D源程序代碼的有效開發(fā)工具,本文使用筆記本編輯器編寫。
虛擬場景的設計主要包括建模、場景優(yōu)化設計和用戶交互3個部分,具體流程如圖2所示。
圖2 虛擬場景流程
本文中三維場景建模主要采用3DSMax軟件制作。
2.2.1 地面的建立
將CAD中的地面圖導入3DSMax中,利用創(chuàng)建面板下的圖形中的線形工具對地面圖進行描線并擠出。
2.2.2 房屋模型的構建
本文中建筑模型的構建主要是反復采用線、矩形、樣條線和擠出等命令,首先對建筑物實體進行輪廓的構建,用線條和矩形等命令構造,然后編輯樣條線賦予墻體一定的寬度,再通過擠壓命令賦予建筑物高度。墻體完成后可根據(jù)建筑物的樣式確定窗戶、門等的位置并進行布爾運算。根據(jù)建筑物的外觀進行貼圖,并渲染。最后將建筑物進行貼圖后房屋模型圖如圖3所示,建筑物的部分代碼如下:
圖3 貼圖后建筑物模型
DEF Plane01Transform{
translation-0.7301 8 0.708
children[
Shape{
appearance Appearance{
material Material{
diffuseColor 0.5882 0.5882 0.5882
ambientIntensity 1.0
specularColor 0 0 0
shininess 0.145
transparency 0}
}}
geometry DEF Plane01-FACES Indexed-
FaceSet{
ccw TRUE solid TRUE
coord DEF Plane01-COORD Coordinate
{point[
-7.5 0 5,7.5 0 5,-7.5 0-5,7.5 0-5]
}
texCoord DEF Plane01-TEXCOORD
TextureCoordinate{point[
00,1 0,00,1 0,00,1 0,0 1,1 1]
}
}
}
]}
2.2.3 植被層模型的構建
2.2.3.1 樹木層模型的構建
本文中樹的建模采用十字造型法,前視圖和左視圖上分別創(chuàng)建一個長方形,并使2個長方形夾角成90°放置,然后進行貼圖,樹的圖片格式可以是3DSMax中所包含的任何一種類型,如:jpg、png、tif等,其中選擇png格式為最佳,這樣可以省去制作alpha通道這一步驟,便于使圖像透明化,這種方式制作起來相對比較容易。
2.2.3.2 草底層模型的構建
草底層模型的構建主要在3DSMax中建立平面模型,來代替復雜的形體,然后在模型表面貼入紋理,通過紋理表現(xiàn)綠地層,這種方法叫做采用網(wǎng)狀建模法,這樣可以在虛擬空間中比較真實地反映綠地層。
2.2.4 交通層模型的構建
交通層的構建和草底層大體相似,道路層主要是由路面、馬路原石組成,形式較為單一,在3DSMax中路面的制作參照綠地層,即在模型表面貼入紋理,通過紋理表現(xiàn)路面,馬路原石的制作可以通過輪廓和擠壓功能給馬路沿線賦予高度和寬度來實現(xiàn),這樣做可以使馬路原石之間連接的更緊密,減少誤差。
2.2.5 人物模型的構建
人物模型的構建采用的是廣告牌技術(Bill-Board),Billboard節(jié)點是一個群節(jié)點,可以在全域坐標系之下創(chuàng)建一個新的坐標系。選定一個旋轉軸后,無論瀏覽者如何行走或旋轉這個節(jié)點下的子節(jié)點所構成的虛擬對象的正面會永遠面對瀏覽者。它是一種用于節(jié)省時間、模型數(shù)量小的技術,在實際應用中,路邊的人物模型一般采用這種技術構建。
模型建立后,按需要將同一圖層的模型合并并導出.wrl格式。為了減少數(shù)據(jù)量,在建模時應盡量讓面的數(shù)接近最少;在編輯模型時,應刪除重疊面、看不見的面和相交面。導出的.wrl文件可以使用VrmlPad將導出的文件進行另存以壓縮數(shù)據(jù)存儲量。這些方法可以減少數(shù)據(jù)存儲量,便于加快顯示速度。
X3D支持.wrl文件,場景的優(yōu)化設計主要是將建模后的房屋、植被、道路等模型導出為*.wrl格式的文件,之后使用inline節(jié)點將模型連接到一個文檔中,并設置背景、燈光、視點,使之更為真實。
2.3.1 天空、地面和燈光的設置
X3D的虛擬空間背景分為天空背景和地面背景兩部分,兩部分間以地平線分割;而地平線則位于空間垂直方向上有原始坐標系XOZ平面向無窮遠處延伸后與空間背景的相接處;XOZ平面以上的部分定義為天空背景,XOZ平面以下的部分定義為地面背景。
設置天空地面主要用background節(jié)點,可以通過對背景設定天空和地面角及天空和地面顏色來產(chǎn)生天空和地面效果,也可以在空間背景上添加背景圖片,使用background節(jié)點所生成的空間背景可以帶給用戶相當程度的立體層次感。背景和燈光的設置代碼如下:
<Background DEF="skycolor"groundColor=′0 0.6 0′
skyAngle=′0 0′skyColor=′0.3 0.4 0.5′
backUrl="image/sky_back.jpg"frontUrl="image/sky_front.jpg"
leftUrl="image/sky_left.jpg"rightUrl="image/sky_right.jpg"
topUrl="image/sky_top.jpg"
bottomUrl"image/sky_bottom.jpg"/>
<DirectionalLight direction="1 0 0"/>
……<!--對六個方向進行燈光設置
-->
<SpotLight intensity="1"color="0.9804 0.9725 0.902"location="-3985 9757 8019"
direction="0.4075-0.6483-0.6432"
cutOffAngle="0.7854"
beamWidth="0.7505"
on="TRUE"
radius="1.732e+030"/>
<PointLight intensity="1"
color="1 1 1"
location="2143 3467-1595"
on="TRUE"
radius="1.732e+030"/>
……<?。c光源設置-->
2.3.2 視點的設置
X3D視點控制使用viewpoint節(jié)點。Viewpoint節(jié)點用來設置瀏覽者在虛擬空間中的觀察位置、空間朝向以及視野范圍等參數(shù)。
Viewpoint節(jié)點代碼如下:
<Viewpoint position="1823 97.47-2822"
orientation="-0.05157-0.9932-0.1045-4.053"
field0fView="0.6024"description="manyou"/>
此段代碼描述了視點在場景中的空間位置、視角大小和視角名字,除此之外還可以定義視角朝向、是否跳躍等描述。
2.3.3 導航設置
虛擬場景中,用NavigationInfo導航信息節(jié)點作為供瀏覽者在虛擬世界的替身,并可使用替身在虛擬世界中移動、行走或飛行,Navigationinfo節(jié)點代碼如下:
<NavigationInfo headlight="TRUE"
type="WALK"avatarSize="0.5 3 5"/>
此段代碼描述主要設置了以行走的方式瀏覽虛擬場景以及瀏覽者替身的尺寸。
X3D中場景效果節(jié)點的設計除了以上所闡述的之外,用戶還可以設置空間大氣效果節(jié)點、音響效果節(jié)點等等,經(jīng)過建模、貼圖、優(yōu)化設計等步驟后,通過BS Contact播放器進行局部、全景的瀏覽,場景優(yōu)化后的效果如圖4所示。
圖4 場景優(yōu)化后的效果
用戶交互功能是X3D的一個重要特性,利用虛擬現(xiàn)實硬件設備和鼠標在三維立體空間中對虛擬物體和造型進行選取和退拽,產(chǎn)生身臨其境的動態(tài)感知交互效果[7]。X3D場景和用戶的交互由靜態(tài)或動態(tài)兩種方式體現(xiàn),靜態(tài)方式主要是通過X3D中提供的交互節(jié)點如觸摸傳感器、親近度傳感器等節(jié)點,然后通過Route節(jié)點連接節(jié)點之間的域以傳遞事件實現(xiàn)的,靜態(tài)方式只能實現(xiàn)一些簡單的交互,例如燈和門的開關等。動態(tài)方式則是通過一段外部程序邏輯去決定事件的產(chǎn)生,可以通過內部Script節(jié)點和外部編程接口(EAI)兩種方式。利用X3D中的Script腳本節(jié)點定義了一個包含程序腳本節(jié)點的域、事件出口和事件入口及描述了用戶自定義制作的檢測器和插補器所做的事情,Script節(jié)點可以讓場景有程序化的行為,用field(域)標簽定義腳本的界面,腳本語言可選擇ECMAScript/JavaScript或Java語言。EAI則定義了與外部HTML頁面中的Applet通信的接口。用戶交互功能可以使用戶實時地通過網(wǎng)絡創(chuàng)建虛擬世界,更為方便快捷。
圖5中自動門的交互是采用TouchSensor觸摸傳感器節(jié)點、TimeSensor時間傳感器節(jié)點以及PositionInterpolator位置插補器節(jié)點,通過Route路由連接節(jié)點之間的域實現(xiàn)交互,當鼠標點擊門時,通過平移產(chǎn)生開關效果。
圖5 自動門的交互
Group{
children[
構建門模型
DEF Touch TouchSensor{…}
]
}
DEF Time TimeSensor{…}
DEF zy PositionInterpolator{
key[0,0.3,0.7,1]
keyValue[0 0.025 0,-0.5 0.025 0,-0.5 0.025 0,0 0.025 0
]
}
DEF yy PositionInterpolator{…}
ROUTE Touch.isActive TO Time.enabled
ROUTE Touch.touchTime TO Time.startTime ROUTE Time.fraction_changed TO zy.set_fraction ROUTE Time.fraction_changed TO yy.set_fraction ROUTE zy.value_changed TO ldoor.set_translation ROUTE yy.value_changed TO rdoor.set_translation
虛擬現(xiàn)實X3D網(wǎng)絡三維立體設計的產(chǎn)生具有劃時代的意義。本文主要介紹利用3DSMAX建模軟件以及X3D三維圖像標記語言實現(xiàn)場景建立與優(yōu)化的方法,具體描述了各層模型的建立、如何減少數(shù)據(jù)存儲量,背景、視點和導航節(jié)點的設置,介紹了用戶交互的方式,達到了瀏覽的效果。用戶交互建立了場景與用戶之間的一種交流方式,用戶可以實時的通過網(wǎng)頁進行操作,節(jié)省時間,X3D的這一特點也是今后研究的重點。
[1]黃銳,譚佳佳.基于X3D的虛擬場景建模方法[J].內蒙古大學學報:自然科學版,2009,40(6):738-741.
[2]李妮,彭曉源,龔光紅.基于X3D的仿真可視化支撐服務研究 與 實 現(xiàn)[J].系 統(tǒng) 仿 真 學 報,2009,21(22):7195-7198.
[3]王方雄,李洋,韓飛.基于X3D的虛擬三維場景漫游系統(tǒng)設計與實現(xiàn)[J].地理空間信息,2009,7(3):21-23.
[4]張金鏑.X3D虛擬校園系統(tǒng)開發(fā)與設計[D].吉林:吉林大學,2011:1-66.
[5]何曲,楊潔,張紅燕.基于X3D的三維虛擬圖書館的構建[J].電腦知識與技術,2010,6(16):4510-4513.
[6]李海慶,殷國富,胡瑞飛.基于X3D的虛擬場景交互架構的實現(xiàn)方法研究[J].系統(tǒng) 仿真學報,2006,18(2):383-385,393.
[7]張金釗,張金銳,張金鏑,等.X3D三維立體網(wǎng)頁設計虛擬現(xiàn)實立體動畫游戲程序設計[M].北京:中國水利水電出版社,2009.
[8]吳義娟.3ds max 8建筑設計高級建模寶典[M].北京:清華大學出版社,2007.
[9]張永君.3ds max7建筑外觀表現(xiàn)技法實例詳解[M].北京:人民郵電出版社,2005.
[10]袁紊玉,李曉鵬,徐正坤.3ds max 7&Photoshop CS建筑效果圖制作風暴[M].北京:紅旗出版社,2005.