亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Unity3d中虛擬家裝系統(tǒng)的架構(gòu)與關(guān)鍵技術(shù)

        2018-05-28 11:10:10徐玉如黃瑋
        電腦知識(shí)與技術(shù) 2018年9期
        關(guān)鍵詞:序列化虛擬現(xiàn)實(shí)

        徐玉如 黃瑋

        摘要:虛擬現(xiàn)實(shí)是當(dāng)前IT行業(yè)的熱點(diǎn),虛擬家裝系統(tǒng)是其應(yīng)用之一。該研究首先介紹虛擬家裝系統(tǒng)的總體架構(gòu)。并在此基礎(chǔ)上針對(duì)資源加載的效率、拖動(dòng)管理的策略、射線管理模塊等等各個(gè)功能的進(jìn)行分析并最終在Unity3d環(huán)境下將其實(shí)現(xiàn)。

        關(guān)鍵詞:虛擬現(xiàn)實(shí);資源加載;序列化

        中圖分類號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)09-0098-02

        1 背景

        VR技術(shù)即虛擬現(xiàn)實(shí)技術(shù)[1]是當(dāng)前IT界熱門技術(shù)。當(dāng)前VR技術(shù)已經(jīng)在在工程[2]、機(jī)械[3]、展覽[4]、旅游領(lǐng)域得到廣泛應(yīng)用。在家庭裝修過(guò)程中使用VR技術(shù)進(jìn)行虛擬家裝,不僅可以讓用戶最終更好的預(yù)覽家裝的效果,而且,也便于用戶參與家裝的過(guò)程,不斷試錯(cuò),最終修改出適合自己體驗(yàn)的家裝方案。

        Unity3d[5]是進(jìn)行VR/AR開(kāi)發(fā)的主流引擎之一。在Unity3d引擎中提供了如粒子系統(tǒng)、射線系統(tǒng)、物理系統(tǒng)、碰撞檢測(cè)、三維坐標(biāo)體系等基本模塊,開(kāi)發(fā)者可在此基礎(chǔ)上快速開(kāi)發(fā)。本研究以Unity3d為底層技術(shù)介紹虛擬家裝系統(tǒng)的架構(gòu)設(shè)計(jì)與關(guān)鍵技術(shù)的實(shí)現(xiàn)。

        2 系統(tǒng)架構(gòu)的設(shè)計(jì)

        虛擬家裝系統(tǒng)需要實(shí)現(xiàn)以下的核心功能:

        1)在虛擬場(chǎng)景中實(shí)現(xiàn)家具的選擇、安裝、移動(dòng)、旋轉(zhuǎn)。

        2)對(duì)家具進(jìn)行變更材質(zhì)。

        3)提供家具、材質(zhì)的上傳功能。

        為實(shí)現(xiàn)上述功能,需要許多的輔助功能。例如,對(duì)家具模型的選擇涉及模型的上傳保存、加載以及界面上的選擇操作等。此外還有許多的業(yè)務(wù)也均涉及存儲(chǔ)、業(yè)務(wù)邏輯與UI等部分。因此在本系統(tǒng)中采用傳統(tǒng)的三層進(jìn)行設(shè)計(jì),即數(shù)據(jù)訪問(wèn)、業(yè)務(wù)邏輯與界面三個(gè)部分。這三層的具體情況如圖1所示。

        與許多信息系統(tǒng)不同的是,該系統(tǒng)中的數(shù)據(jù)訪問(wèn)不與數(shù)據(jù)庫(kù)打交道。該系統(tǒng)需要與外部交互的數(shù)據(jù)主要為3D模型與材質(zhì)貼圖,因此數(shù)據(jù)訪問(wèn)層的主要任務(wù)是文件的讀寫操作。其中文件訪問(wèn)類是最為底層的類。在此基礎(chǔ)上為滿足不同的應(yīng)用分別提供序列化類、資源加載類、貼圖讀寫類等模型。序列化類采用Json格式進(jìn)行家裝方案的保存與讀取。資源加載類則采用異步讀取的方式針對(duì)大文件進(jìn)行訪問(wèn)以提供系統(tǒng)的性能。而貼圖讀取器則直接從進(jìn)行貼圖與二進(jìn)制文件的交互。

        業(yè)務(wù)邏輯層中的業(yè)務(wù)解釋器類與狀態(tài)管理器配合,將UI中獲得的各種數(shù)據(jù)轉(zhuǎn)換成業(yè)務(wù)邏輯中的各種狀態(tài),從而分離UI與業(yè)務(wù)邏輯。拖動(dòng)管理器用于實(shí)現(xiàn)對(duì)物體的拖放、材質(zhì)管理器則實(shí)現(xiàn)更換材質(zhì)的功能、 位移管理器實(shí)現(xiàn)對(duì)物體位置的移動(dòng)以及角度的旋轉(zhuǎn)、射線管理器用于物體的選擇。

        在UI中對(duì)話框管理器主要實(shí)現(xiàn)彈出對(duì)話框的功能,用于與用戶的交互。攝像機(jī)管理則實(shí)現(xiàn)對(duì)攝像機(jī)的上下左右移動(dòng),鼠標(biāo)管理器則實(shí)現(xiàn)攝像機(jī)的水平旋轉(zhuǎn),在移動(dòng)設(shè)備上進(jìn)行VR內(nèi)容呈現(xiàn)時(shí)則支持觸屏操作。

        3 系統(tǒng)架構(gòu)的實(shí)現(xiàn)

        3.1 資源加載功能的實(shí)現(xiàn)

        在虛擬家裝系統(tǒng)中,需要加載的資源是很多的,如各種房間、家具、電器的模型,各種材質(zhì)圖片等。更了更好提供用戶體驗(yàn),模型需要有一定的精度。但隨著資源精度的提高,所需加載的文件的數(shù)據(jù)量大,這又會(huì)造成加載速度慢,造成卡頓效果,反而易給用戶帶來(lái)眩暈感。

        Unity3d中要呈現(xiàn)一個(gè)物體需要有以下的操作:首先,將模型資源從磁盤加載到內(nèi)存,并實(shí)例化該模型的原型對(duì)象,接著再根據(jù)該原型創(chuàng)建具體需要呈現(xiàn)的物體。這一過(guò)程需要涉及大量的IO操作,性能較差。本系統(tǒng)中采用原型模式+緩存機(jī)制+異步加載的方式實(shí)現(xiàn)。原型模式是指對(duì)象的創(chuàng)建方式不是采用動(dòng)態(tài)生成的方式,而是根據(jù)目標(biāo)對(duì)象的內(nèi)存值直接復(fù)制出一個(gè)副本,原型模式通過(guò)增加內(nèi)存的消耗提高了對(duì)象的創(chuàng)建效率。為了提高內(nèi)存的使用率,通過(guò)引入哈希表對(duì)模型的原型進(jìn)行緩存。而對(duì)于文件的加載,則可以采用異步預(yù)加載的方式。系統(tǒng)預(yù)加載的算法如下:

        Step 1:(系統(tǒng)閑時(shí))根據(jù)系統(tǒng)的路徑獲取資源目錄下所有模型的文件列表。

        Step 2:遍歷文件列表,如果文件列表中的資源在緩存目錄中,則不再加載該文件

        否則,加載該文件,并將所加載的內(nèi)容寫入緩存。

        為了顯示場(chǎng)景中的物體,需要實(shí)例化模型對(duì)象。實(shí)例化模型對(duì)象的算法如下:

        Step 1:如果緩存中有模型,則直接使用原型機(jī)制創(chuàng)建模型副本并呈現(xiàn)。

        Step 2:如果緩存中不存在模型,則查看有沒(méi)有啟動(dòng)加載該模型的異步線程,如果沒(méi)有則啟動(dòng)。如果有,則提高該線程的加載優(yōu)先級(jí)。

        Step 3:加載完成后通過(guò)回調(diào)實(shí)例化模型,并將模型加入緩存?;氐絊tep 1。

        以上的方法可以較好的提高系統(tǒng)的性能。

        3.2 拖動(dòng)管理功能的實(shí)現(xiàn)

        家裝系統(tǒng)中需要進(jìn)行各種家具位置的移動(dòng)擺放。無(wú)論是通過(guò)鼠標(biāo)、觸摸屏、手柄或是其他的控制設(shè)備進(jìn)行操作,本質(zhì)上都是要先選中物體,然后通過(guò)控制設(shè)備的移動(dòng)軌跡計(jì)算出虛擬現(xiàn)實(shí)三維坐標(biāo)系統(tǒng)上物體的新坐標(biāo)。由于控制設(shè)備在現(xiàn)實(shí)世界中的位移向量與三維坐標(biāo)系中的移動(dòng)向量不可能等同,例如控制設(shè)備(如鼠標(biāo))的移動(dòng)是在二維平面上移動(dòng),其控制的物體卻要在三維中移動(dòng)。二維向量是無(wú)法直接映射到三維向量。為解決這一問(wèn)題,先對(duì)三維中的物體進(jìn)行降維,即一次僅限其在一個(gè)維度上運(yùn)動(dòng),同時(shí)也僅考慮鼠標(biāo)在一個(gè)維度上的分量,使得兩個(gè)維度的向量建立起映射關(guān)系。這種方式可以通過(guò)輔助坐標(biāo)系來(lái)實(shí)現(xiàn)。如圖2所示的輔助坐標(biāo)系,需要拖動(dòng)物體時(shí)只能點(diǎn)中某個(gè)物體的三維坐標(biāo)系箭頭,使其沿一個(gè)方向進(jìn)行拖動(dòng),從而建立起平面坐標(biāo)系與三維坐標(biāo)系的映射。

        以上輔助坐標(biāo)系采用第三方組件形式完成,但最為核心的拖動(dòng)代碼如下:

        Step 1:得到要拖動(dòng)的物體在屏幕的坐標(biāo)screenSpace。

        Step 2:記下鼠標(biāo)的位置,并將鼠標(biāo)位置轉(zhuǎn)化為三維場(chǎng)景中的座坐標(biāo)startPos。

        Step 3:如果是鼠標(biāo)拖動(dòng)狀態(tài):

        記下鼠標(biāo)的位置,并將鼠標(biāo)位置轉(zhuǎn)化為三維場(chǎng)景中的坐標(biāo)curScreenSpace。

        計(jì)算兩點(diǎn)curScreenSpace與startPos之間的向量,并將該向量轉(zhuǎn)化為三維坐標(biāo)系的向量V1。

        計(jì)算V1在物體移動(dòng)方向上的投影V2。V2即為物體需要移動(dòng)的向量。

        當(dāng)前物體的座標(biāo)與V2相加,得到目的地的坐標(biāo)V3,將物體移到V3位置。

        重置起始點(diǎn)。

        等待下一幀,并重復(fù)Step 3。

        3.3 射線管理功能的實(shí)現(xiàn)

        射線管理功能是本系統(tǒng)中的一個(gè)基礎(chǔ)功能,無(wú)論是更換材質(zhì)、拖動(dòng)物體或是UI元素交互,均需要使用射線功能。

        射線功能實(shí)現(xiàn)的工作有兩個(gè),一是發(fā)出射線,二是獲得射線路徑上的物體。發(fā)出射線是通過(guò)場(chǎng)景中的攝像機(jī)來(lái)實(shí)現(xiàn)。通過(guò)Unity3D中的Camera向屏幕上指定一點(diǎn)發(fā)出射線。但在VR環(huán)境下,可能存在多攝像機(jī)的情況,例如使用Google Card Board類型的眼鏡時(shí),實(shí)際上左右眼分別對(duì)應(yīng)一個(gè)攝像機(jī)。因此在這種情況下,使用狀態(tài)模式來(lái)解決射線的切換問(wèn)題。

        圖3是射線管理模塊的設(shè)計(jì)類圖,在RayState的抽象狀態(tài)類中派生出NormalState與VRState兩種狀態(tài),每個(gè)類均重寫父類的CreateInstance方法用于生成射線對(duì)象。對(duì)于NormalState中的CreateInstance則用Unity3d的Ray類生成射線對(duì)象,而VRState中,則取兩攝像機(jī)連線的垂直方向產(chǎn)生射線。在實(shí)際操作中,以兩攝像機(jī)正前方向量之和為新射線的向量。

        射線創(chuàng)建后可以通過(guò)與碰撞器的識(shí)別來(lái)判斷所擊中的物體,從而獲得場(chǎng)景中對(duì)應(yīng)的物體。偽碼如下:

        Ray ray = State.CreateInstance();

        RaycastHit hit;

        if(Physics.Raycast(ray,out hit)){

        return hit.transform;

        }

        return null;

        通過(guò)上述的偽碼解決了選中物體的邏輯。另外射線管理模塊使用狀態(tài)模式的設(shè)計(jì)也解決了在不同設(shè)備呈現(xiàn)VR場(chǎng)景時(shí)不易管理的問(wèn)題。

        4 結(jié)束語(yǔ)

        在介紹虛擬家裝系統(tǒng)的功能后進(jìn)行了系統(tǒng)整體結(jié)構(gòu)的設(shè)計(jì),并在此基礎(chǔ)上介紹了最為核心的三個(gè)功能,即資源加載、拖動(dòng)管理與射線管理。受制于篇幅,系統(tǒng)中還有如材質(zhì)變更、序列化、對(duì)話框管理等許多也存在創(chuàng)新性的地方就不一一介紹。測(cè)試運(yùn)行的結(jié)果證明了系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)有正確性。

        參考文獻(xiàn):

        [1] 李敏, 韓豐. 虛擬現(xiàn)實(shí)技術(shù)綜述[J]. 軟件導(dǎo)刊, 2010, 9(6): 142-144.

        [2] 徐偉, 李龍華. 全斷面硬巖掘進(jìn)機(jī)事故處理虛擬仿真培訓(xùn)系統(tǒng)界面設(shè)計(jì)[J]. 科技廣場(chǎng), 2016(10): 40-43.

        [3] 王娜. 基于Unity3D的采礦機(jī)械零件庫(kù)系統(tǒng)設(shè)計(jì)[J]. 牡丹江師范學(xué)院學(xué)報(bào):自然科學(xué)版, 2017(1): 32-33.

        [4] 郭丹, 商書元. 基于Unity3D的虛擬博物館展陳模型研究[J]. 北京服裝學(xué)院學(xué)報(bào):自然科學(xué)版, 2017, 37(2): 63-68.

        [5] 黃瑋, 余葉蘭. 基于Unity3d的虛擬現(xiàn)實(shí)家裝系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 新余學(xué)院學(xué)報(bào), 2017, 22(3): 19-22.

        猜你喜歡
        序列化虛擬現(xiàn)實(shí)
        如何建構(gòu)序列化閱讀教學(xué)
        甘肅教育(2020年14期)2020-09-11 07:58:36
        論虛擬現(xiàn)實(shí)藝術(shù)的“沉浸”
        REALITY BITES
        風(fēng)口上的虛擬現(xiàn)實(shí)
        商周刊(2017年24期)2017-02-02 01:42:55
        虛擬現(xiàn)實(shí)技術(shù)向科幻小說(shuō)借靈感
        海外星云(2016年7期)2016-12-01 04:18:00
        Java反序列化漏洞探析及其修復(fù)方法研究
        湖北電力(2016年11期)2016-11-07 07:25:37
        論初中語(yǔ)文作文的序列化訓(xùn)練
        Java 反序列化漏洞研究
        HTC斥資千萬(wàn)美元入股虛擬現(xiàn)實(shí)設(shè)備商WEVR
        作文訓(xùn)練微格化、序列化初探
        亚洲色大成网站www尤物| 国产盗摄xxxx视频xxxx| 成人性生交大片免费| 国产成人无码一区二区三区在线| 久久婷婷国产剧情内射白浆| 亚洲综合中文字幕乱码在线| 尤物网址在线观看| 欧美成年黄网站色视频| 欧美视频在线观看一区二区| 国产免费一区二区av| 永久免费看黄网站性色| 人妻少妇中文字幕久久| 国产精品二区一区二区aⅴ污介绍| 欧美牲交videossexeso欧美| 久久国产精品精品国产色婷婷| 亚洲首页一区任你躁xxxxx| 粉嫩小泬无遮挡久久久久久| 国产亚洲精品综合一区二区| 久久精品亚洲成在人线av乱码| 亚洲国产精品久久久久久无码| 国产精品18久久久| 蜜桃精品免费久久久久影院| 98精品国产综合久久| 91蜜桃国产成人精品区在线| 亚洲黄色精品在线播放| 曰韩少妇内射免费播放| 99热这里有精品| 日韩在线观看你懂的| 亚洲中文字幕av一区二区三区人 | 91精品国产综合久久精品密臀| 日本边添边摸边做边爱| 公粗挺进了我的密道在线播放贝壳| 99国产免费热播视频| 国产呦系列呦交| 大香蕉国产av一区二区三区| 久久中文骚妇内射| 性色av一区二区三区| 91视频免费国产成人| 性视频毛茸茸女性一区二区| 极品尤物在线精品一区二区三区| 中文字幕久久熟女蜜桃|