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