王莉莉 宋燕燕 童氿一
摘要:隨著計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)的高速發(fā)展,虛擬現(xiàn)實(shí)技術(shù)逐漸走進(jìn)人們的日常生活。建筑虛擬漫游作為虛擬現(xiàn)實(shí)技術(shù)的一個(gè)重要分支,被廣泛應(yīng)用于場(chǎng)館展示項(xiàng)目中。本文以綜合體育館為虛擬漫游場(chǎng)景,使用3D Max軟件制作三維模型,Unity3D引擎為開發(fā)工具,實(shí)現(xiàn)了綜合體育場(chǎng)館第一人稱虛擬漫游。
關(guān)鍵詞:虛擬漫游;體育館;Unity3D;第一人稱漫游
中圖分類號(hào):S126 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2018)05-0089-03
1 引言
虛擬現(xiàn)實(shí)技術(shù)是一種利用計(jì)算機(jī)模擬產(chǎn)生場(chǎng)景,并能實(shí)現(xiàn)虛擬現(xiàn)實(shí)環(huán)境的計(jì)算機(jī)仿真技術(shù)。利用最新的計(jì)算機(jī)虛擬現(xiàn)實(shí)技術(shù)創(chuàng)作的三維虛擬環(huán)境較二維照片和視頻更直觀形象,更逼真,臨場(chǎng)感更強(qiáng)。傳統(tǒng)體育場(chǎng)館在宣傳上,僅僅只能通過網(wǎng)站圖片的形式,缺乏現(xiàn)實(shí)空間感受。場(chǎng)景虛擬漫游技術(shù)的實(shí)現(xiàn),可以讓使用者產(chǎn)生身臨其境的感覺,還可以在場(chǎng)景中通過交互,實(shí)現(xiàn)場(chǎng)館預(yù)定、查看詳細(xì)功能等。本項(xiàng)目的研究具有較高的實(shí)際應(yīng)用價(jià)值。
2 虛擬漫游系統(tǒng)及Unity3D引擎
虛擬漫游系統(tǒng)是一種能夠集視覺、聽覺、觸覺為一體的虛擬環(huán)境,能夠?qū)崟r(shí)仿真虛擬空間,可從任意角度對(duì)虛擬對(duì)象進(jìn)行瀏覽觀察,可與其中的對(duì)象進(jìn)行交互的新技術(shù)。具有沉浸感、交互性、構(gòu)想性等特點(diǎn)。在建筑設(shè)計(jì)、城鄉(xiāng)規(guī)劃、家具裝潢、場(chǎng)景展示等領(lǐng)域,游戲設(shè)計(jì)與娛樂行業(yè)應(yīng)用廣泛。
Unity3D是由Unity Technologies開發(fā)的一款跨平臺(tái)綜合游戲引擎,能夠運(yùn)行在Windows和Mac OS X操作系統(tǒng)下,可以發(fā)布游戲到Windows,Mac,Wii,iPhone,WebGL(需要HTML5)和Android等多種平臺(tái)。腳本語(yǔ)言簡(jiǎn)單,支持各種插件,開發(fā)速度快,跨平臺(tái)性好,可以讓用戶輕松創(chuàng)建3D游戲、建筑可視化、三維動(dòng)畫等類型的交互式內(nèi)容。
3 綜合體育館系統(tǒng)設(shè)計(jì)
本文所實(shí)現(xiàn)的綜合體育館漫游系統(tǒng)主要利用三維建模軟件3DS Max完成場(chǎng)景和模型的建模,利用Unity3D引擎來完成系統(tǒng)的漫游和交互。
3.1 系統(tǒng)總體設(shè)計(jì)目標(biāo)
綜合體育館漫游系統(tǒng)主要包含乒乓球場(chǎng)、羽毛球場(chǎng)和籃球場(chǎng)所、觀眾席看臺(tái)四部分。使用者可通過鍵盤W、A、S、D鍵來控制位移,通過鼠標(biāo)控制視角,可瀏覽場(chǎng)館任何區(qū)域。可查看場(chǎng)館預(yù)定信息、進(jìn)行預(yù)定操作、查看操作說明和退出系統(tǒng)等。
3.2 系統(tǒng)功能模塊設(shè)計(jì)
本系統(tǒng)主要包括建模模塊、漫游模塊和交互模塊,功能結(jié)構(gòu)圖如圖1所示。建模模塊主要實(shí)現(xiàn)綜合體育館整體建模和三個(gè)運(yùn)動(dòng)場(chǎng)區(qū)的建模;漫游模塊主要實(shí)現(xiàn)第一人稱視角位移和視角控制,碰撞檢測(cè);交互模塊主要實(shí)現(xiàn)查看預(yù)定信息、預(yù)定場(chǎng)館、查看操作說明及退出系統(tǒng)功能。
4 綜合體育館漫游系統(tǒng)實(shí)現(xiàn)
4.1 建模模塊實(shí)現(xiàn)
本系統(tǒng)建模主要通過3DS Max軟件建模、貼圖、渲染、烘焙完成。主要包括體育館整體建模和三個(gè)運(yùn)動(dòng)場(chǎng)區(qū)的建模。在將模型導(dǎo)入U(xiǎn)nity3D引擎前對(duì)模型面數(shù)進(jìn)行了優(yōu)化,將多個(gè)次要對(duì)象通過布爾運(yùn)算合成一個(gè)對(duì)象,減少Unity3D的渲染負(fù)擔(dān),檢查場(chǎng)景中的孤立點(diǎn)和面,適當(dāng)刪除,調(diào)整貼圖模式,減少燈數(shù)。通過此類優(yōu)化措施,提高系統(tǒng)運(yùn)行效率。
(1)體育館整體場(chǎng)館建模。場(chǎng)館外觀為灰色,整體類正方形,有層次感,側(cè)面為透明玻璃。如圖2所示為導(dǎo)入U(xiǎn)nity3D后的整體場(chǎng)館外觀圖。館內(nèi)墻壁采用灰色吸音材料,可以隔絕噪音,保證比賽不受雜音影響。制作時(shí),新建一個(gè)長(zhǎng)20,寬5,高5的長(zhǎng)方體,然后復(fù)制粘貼出多個(gè)同樣的長(zhǎng)方體,再進(jìn)行堆疊,將體育館模型構(gòu)建出來。如圖3所示為導(dǎo)入U(xiǎn)nity3D后的場(chǎng)館室內(nèi)效果圖
(2)乒乓球場(chǎng)臺(tái)建模。乒乓球球臺(tái)按照國(guó)際標(biāo)準(zhǔn)設(shè)計(jì),乒乓球球桌臺(tái)面尺寸為2740×1525mm,臺(tái)高為760mm,網(wǎng)寬1.83米,網(wǎng)高0.1525米。本系統(tǒng)中采用綠色桌面。如圖4所示為乒乓球球臺(tái)模型圖。
(3)羽毛球場(chǎng)建模。羽毛球球場(chǎng)按照國(guó)際標(biāo)準(zhǔn)尺寸設(shè)計(jì),球場(chǎng)為長(zhǎng)方形場(chǎng)地,長(zhǎng)度為13.40m,場(chǎng)地寬為5.18m設(shè)計(jì)為單打場(chǎng)地。球場(chǎng)上各條線寬均為4cm,球場(chǎng)界限用白色畫出。羽毛球球網(wǎng)長(zhǎng)6.10m、寬760mm,網(wǎng)孔大小在15-20mm之間,網(wǎng)的上沿有75mm寬的雙層白布。網(wǎng)柱高1.55m,兩根網(wǎng)柱分別立在雙打場(chǎng)地邊線的中點(diǎn)上。球網(wǎng)中部上沿離地面為1.524m,球網(wǎng)兩端高為1.55m。如圖5所示為羽毛球場(chǎng)模型圖。
(4)籃球場(chǎng)建模?;@球球場(chǎng)按照國(guó)際標(biāo)準(zhǔn)尺寸設(shè)計(jì),整個(gè)籃球場(chǎng)地長(zhǎng)28m,寬15m?;@圈下沿距地面3.05m。線條:寬度為5cm. 球場(chǎng)界線距觀眾席2m。中線向兩側(cè)邊線外各延長(zhǎng)15cm。罰球線與端線平行,它的外沿距離端線內(nèi)沿5.80m;這條線長(zhǎng)為3.60m。罰球區(qū)是以罰球線中點(diǎn)為圓心,以1.80m為半徑,向限制區(qū)外畫出一個(gè)半圓區(qū)域,限制區(qū)內(nèi)的半圓畫成虛線。罰球區(qū)中第一條線距離端線內(nèi)沿1.75m,第一位置區(qū)的寬度為0.85m,并且與中立區(qū)域的始端相接。中立區(qū)域的寬度為0.40m,第二位置區(qū)與中立區(qū)域相鄰,寬度為0.85m,第三位置區(qū)與第二位置區(qū)相鄰,寬度也是0.85m。所有區(qū)域線條長(zhǎng)度為0.10m,并垂直于罰球區(qū)邊線的外側(cè)。中圈畫在球場(chǎng)的中央,半徑為1.80m。三分投籃區(qū)距邊線1.25m,從端線引出兩條平行線,半徑為6.25m(量至圓弧外沿)的圓弧(半圓)與兩平行線相交圓心距端線內(nèi)沿中點(diǎn)的距離為1.575m。如圖6所示為籃球場(chǎng)模型圖。
(5)觀眾席看臺(tái)建模。觀眾席以NBA聯(lián)賽中球館的觀眾席為模板進(jìn)行設(shè)計(jì),分為三層。第一層為觀眾椅,椅子高度為410mm,椅子座位寬度為200mm,共三排。第二層和第三層都是階梯型座位,每級(jí)階梯的座位間由隔板隔開,每級(jí)階梯高為400mm,共14級(jí)階梯。如圖7所示為觀眾席看臺(tái)模型圖。
4.2 漫游模塊實(shí)現(xiàn)
首先,在Unity3D中新建一個(gè)工程文件,自帶一個(gè)主攝像機(jī)和一個(gè)自然光。然后,將制作好的模型導(dǎo)入U(xiǎn)nity 3D,將制作的場(chǎng)景拖入制作窗口。
(1)第一人稱漫游位移控制功能實(shí)現(xiàn)。首先,在場(chǎng)景中添加一個(gè)圓柱體,代表用戶。將主攝像機(jī)設(shè)定為跟隨圓柱體移動(dòng),通過控制場(chǎng)景中圓柱體的位移和攝像機(jī)的轉(zhuǎn)到,來實(shí)現(xiàn)用戶的位移和視角。通過代碼設(shè)置了向前行走、向后行走、橫向移動(dòng)和跑動(dòng)的速度,并對(duì)跳躍的高度進(jìn)行了設(shè)置??刂频谝蝗朔Q向前位移和向左位移的關(guān)鍵代碼如下:
if (Input.GetKey(KeyCode.W)) //設(shè)置鍵盤上的“W”鍵控制第一人稱視角向前移動(dòng)
{ float x = Mathf.Sin(transform.eulerAngles.y * Mathf.Deg2Rad) * distance;
float z = Mathf.Cos(transform.eulerAngles.y * Mathf.Deg2Rad) * distance;
transform.Translate(new Vector3(x,0,z), Space.World); return true; }
if (Input.GetKey(KeyCode.A)) //設(shè)置鍵盤上的“A”鍵控制第一人稱視角向左移動(dòng)
{transform.Translate(new Vector3(-distance, 0, 0)); return true;}
(2)第一人稱漫游視角控制功能實(shí)現(xiàn)。第一人稱漫游視角控制,主要通過攝像機(jī)的視角轉(zhuǎn)動(dòng)設(shè)定為跟隨鼠標(biāo)的移動(dòng)而移動(dòng)。如圖8所示為第一人稱視角漫游場(chǎng)景圖。視角控制的部分關(guān)鍵代碼如下:
public Camera cam;// 定義相機(jī)
public MovementSettings movementSettings = new MovementSettings();//定義相機(jī)視角移動(dòng)
public MouseLook mouseLook = new MouseLook();// 跟隨鼠標(biāo)移動(dòng)而移動(dòng)
public AdvancedSettings advancedSettings = new AdvancedSettings();
(3)碰撞檢測(cè)功能實(shí)現(xiàn)。碰撞檢測(cè)是虛擬漫游系統(tǒng)的重要功能,其作用是用來確保兩個(gè)不可穿透的對(duì)象互相不能共享相同的空間。首先,為圓柱體添加剛體,再通過為所有模型添加碰撞檢測(cè)Mesh Collider屬性來實(shí)現(xiàn)。
4.3 交互模塊實(shí)現(xiàn)
(1)查看預(yù)定功能實(shí)現(xiàn)。首先,新建一個(gè)button,將其命名為 “chakan”,將按鈕的文本名稱改為 “查看預(yù)定”。然后在按鈕上方新建一個(gè)Text文本框“yuding”。新建一個(gè)c#文件“mingdan”,通過代碼設(shè)置文本框初始不可見,編寫代碼,設(shè)置點(diǎn)擊按鈕后,如果文本框是顯示狀態(tài)則將其隱藏,如果文本框是隱藏狀態(tài)則將其顯示,然后將腳本拖到“chakan”的屬性欄中的Button(Script)中,再將拖到Button(Script)中的腳本文件拖到OnClick中,并設(shè)置點(diǎn)擊按鈕后執(zhí)行mingdan.sendMessageUpwards。如圖9所示為查看場(chǎng)館預(yù)定功能圖。部分代碼如下:
void Start()
{ga=GameObject.Find(ganame);
ga.active=false; //設(shè)置開始可見性}
void OnClick() //控制顯示和隱藏的方法
{if (ga.active==true)//文本此時(shí)顯示
{ga.SetActive(false);//點(diǎn)擊后隱藏}
else if(ga.active==false)//文本此時(shí)隱藏
{ga.SetActive(true);//點(diǎn)擊后顯示}}}
(2)預(yù)定場(chǎng)館功能實(shí)現(xiàn)。首先,添加一個(gè)button和一個(gè)Input Filed。分別改名為“yuyue”和“yudingxinxi”,button控件的文本名稱改為“場(chǎng)地預(yù)定”。新建一個(gè)c#文件“xinxishuru”,編寫代碼使在Input Filed中輸入的內(nèi)容能在查詢預(yù)定的文本框內(nèi)顯示,將腳本拖到Input Filed屬性欄中的On Value Changed(String)中,設(shè)置對(duì)應(yīng)的Text.text。
(3)操作說明功能實(shí)現(xiàn)。首先,先新建一個(gè)button,命名為“caozuo”,按鈕文本名稱改為“操作說明”。然后在button上方新建一個(gè)Text文本框“kongzhi”。通過代碼設(shè)置文本框初始不可見,新建一個(gè)c#腳本“shuoming”,編寫代碼,設(shè)置點(diǎn)擊按鈕后,如果文本框是顯示狀態(tài)則將其隱藏,如果文本框是隱藏狀態(tài)則將其顯示,然后將腳本拖到“caozuo”的屬性欄中的Button(Script)中,再將拖到Button(Script)中的腳本文件拖到OnClick中,并設(shè)置點(diǎn)擊按鈕后執(zhí)行shuoming.sendMessageUpwards。
(4)退出系統(tǒng)功能實(shí)現(xiàn)。首先,先新建一個(gè)button控件,改名為“guanbi”,文本名稱改為“退出”。然后新建一個(gè)c#腳本,編寫好代碼后保存,將腳本拖到Button(Script)中,再拖到OnClick中,并設(shè)置執(zhí)行tuichu.OnClick。退出漫游部分代碼如下:
public void ontuichu()
{Application.Quit ();// 退出漫游}
5 結(jié)語(yǔ)
虛擬現(xiàn)實(shí)漫游技術(shù)是一項(xiàng)應(yīng)用廣泛的計(jì)算機(jī)綜合性技術(shù),它利用計(jì)算機(jī)生成逼真的虛擬環(huán)境,通過漫游和交互讓用戶產(chǎn)生臨場(chǎng)感。本文使用3DS Max和Unity3D工具實(shí)現(xiàn)了綜合體育館虛擬漫游系統(tǒng),系統(tǒng)包括建模、漫游、交互三個(gè)重要組成部分,采用碰撞檢測(cè)技術(shù)保證了系統(tǒng)的真實(shí)效果。系統(tǒng)設(shè)計(jì)效果良好,場(chǎng)景逼真。
參考文獻(xiàn)
[1]范國(guó)華,等.基于Unity的虛擬校園漫游系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].安徽農(nóng)業(yè)科學(xué),2016,44(1):325-327.
[2]曲寶,等.基于Virtools的虛擬家居漫游系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與科學(xué),2009.12:130-133.