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

        ?

        基于Unity3D 的Web 3D 全景交互技術(shù)實現(xiàn)

        2020-10-30 05:49:20楊紹清劉伯艷
        科學(xué)技術(shù)創(chuàng)新 2020年31期
        關(guān)鍵詞:按鈕案例

        楊紹清 劉伯艷

        (河南職業(yè)技術(shù)學(xué)院,河南 鄭州450046)

        1 概述

        720°全景交互技術(shù),也可以稱作VR 技術(shù)的一種,是由一張全景貼圖而不是維立體模型作為場景。本文以一個房地產(chǎn)小區(qū)規(guī)劃全景展示作為案例實現(xiàn)如下功能:建立360°全景交互場景,實現(xiàn)手動720°視角旋轉(zhuǎn)、雙手指縮放場景,添加三個按鈕可以篩選場景中交通周邊、醫(yī)療配套、商業(yè)休閑標(biāo)簽指示,最終發(fā)布為web 版,掛在服務(wù)器于手機端測試。

        2 技術(shù)簡介

        技術(shù)工具本文用的是Unity3d 平臺以及C# 開發(fā)語言,Unity3d 是一個專門用于搭建3D 美術(shù)場景并實現(xiàn)場景交互的游戲引擎,最大的特點是場景渲染效果逼真、交互開發(fā)簡單易上手,多平臺發(fā)布,同類的還有UE5(Unreal 5),渲染效果好,但開發(fā)語言較難,本文主要使用的軟件工具有Photoshop、3ds Max、Unity 3D。

        3 實現(xiàn)步驟

        3.1 搭建全景交互場景

        三維場景搭建:a.在三維軟件中,我們將全景貼圖無縫貼在這球體模型上,把攝像機放在球體內(nèi)部即可。首先借助3Dmax創(chuàng)建一個標(biāo)準(zhǔn)球體,該球體模型所有面需要做法線翻轉(zhuǎn)處理,保持內(nèi)部可見。導(dǎo)出FBX 格式,將該球體模型導(dǎo)入Unity 創(chuàng)建好的場景中;b.準(zhǔn)備一張做好的全景貼圖,全景貼圖的生成辦法可以用全景360 度攝像機拍攝,使用工具PTGui 或Pano2VR 拼接,在三維軟件(3Dmax,Maya)中渲染成為全景720°的全景貼圖,細(xì)節(jié)不再敘述。本案例是一張街道全景圖,為了后期能夠用按鈕交互顯示街景的建筑分類,在Photoshop 中將貼圖上建筑對應(yīng)的分類標(biāo)注上去,再導(dǎo)入Unity 中命名為Original_Texture。c.創(chuàng)建空物體命名VR3D360,創(chuàng)建一個球作為其子物體命名SphereInside,在其Inspector 面板改變網(wǎng)格為Sphere_001;創(chuàng)建材質(zhì)球命名360 VRMaterials,改變其Shader 為Unlit/Texture 或者(Transparent),此時將該材質(zhì)的貼圖指定為Original_Texture。這時候我們已經(jīng)看到場景中一個球體被一個全景圖包裹。d.創(chuàng)建攝像機,這里使用默認(rèn)的攝像機MainCamera,本案例中需要一個攝像機作為我們觀察全景交互的“眼睛”。

        3.2 交互面板設(shè)計

        使用Unity 中的UGUI 創(chuàng)建交互框架,在Hierarchy 面板中,創(chuàng) 建 三 個 Button, 分 別 命 名 為 Traffic surround_Button、Education_Button、Business_Button,同時將設(shè)計好的按鈕圖標(biāo)放在Button 組件中,并設(shè)置Text 為目標(biāo)名稱。若發(fā)布web 移動端,需考慮按鈕的自適應(yīng)問題,這里需要設(shè)置按鈕的Rect Transform,在Anchor Presets 中將按鈕固定在屏幕某側(cè),這里固定在了左側(cè)。

        3.3 交互功能實現(xiàn)

        本案例的主要交互功能有:a.手指滑動實現(xiàn)720 度視角旋轉(zhuǎn)b.雙指同時擴展收縮控制場景的放大縮小,視角遠(yuǎn)近交互。c.按鈕交互實現(xiàn)場景建筑標(biāo)簽切換標(biāo)簽。

        3.3.1 手指滑動旋轉(zhuǎn)視角

        以移動端的觸摸交互為案例,單手滑動旋轉(zhuǎn)視角的腳本思路為:首先檢測用戶是否單手觸摸滑動,如果是移動觸摸狀態(tài),獲取鼠標(biāo)在屏幕上X 和Y 方向的滑動數(shù)據(jù),讓該數(shù)據(jù)與攝像機旋轉(zhuǎn)的角度關(guān)聯(lián)起來。創(chuàng)建C# 腳本并命名,將腳本綁定于Main Camera 之上,即滑動旋轉(zhuǎn)視角速度,水平方向旋轉(zhuǎn)速度為xSpeed,豎直方向旋轉(zhuǎn)速度為ySpeed,單手滑動視角旋轉(zhuǎn)數(shù)據(jù)的核心代碼:

        將得到的x 和y 轉(zhuǎn)換為四元數(shù)賦值給主攝像機的Transform組件中的rotation,即可實現(xiàn)單手觸摸并移動帶動視角旋轉(zhuǎn),注意,攝像機水平方向的旋轉(zhuǎn)值x 可以沒有范圍限制,但是豎直方向y 的值應(yīng)該有所限制,否則用戶很難回歸正常視角,限制攝像機y 方向角度的核心代碼如下:

        此處在調(diào)用該函數(shù)時,angle 是手動滑動獲取到的值,本案例給與的min 是20 度,max 是80 度供參考,該函數(shù)返回一個新y 值,y 最終介于20-80 之間。

        3.3.2 雙指控制視角縮放

        該功能本質(zhì)上是檢測到用戶雙手觸摸并移動,再計算是放大還是縮小移動,好讓攝像機做出對應(yīng)反應(yīng)。首先系統(tǒng)需要檢測到觸摸點數(shù)量大于1(Input.touchCount > 1),然后驗證兩個觸摸手指都在移動(Input.GetTouch(0).phase == TouchPhase.Moved|| Input.GetTouch(1).phase == TouchPhase.Moved),如果兩個條件都成立,那么就說明用戶正在多指觸摸并移動,這里只計算前兩個手指觸摸坐標(biāo)。檢測了雙指觸摸移動,創(chuàng)建函數(shù)命名為isEnlarge 判斷雙指是做放大移動還是縮小移動。該函數(shù)通過比較兩手指觸摸起點距離(leng1)和滑動結(jié)束點的距離(leng2)大小,從而判斷是張開還是收縮,核心代碼如下:privatebool isEnlarge (Vector2 oldP1, Vector2 oldP2, Vector2 newP1, Vector2 newP2)//計算雙指滑動前后的距離變化{ //函數(shù)傳入上一次觸摸兩點的位置與本次觸摸兩點的位置計算出用戶的手勢float leng1 = Mathf.Sqrt((oldP1.x- oldP2.x) * (oldP1.x- oldP2.x) + (oldP1.y- oldP2.y) * (oldP1.y- oldP2.y));//勾股定理計算兩老點之間的距離float leng2 = Mathf.Sqrt ((newP1.x- newP2.x) * (newP1.x-newP2.x) + (newP1.y- newP2.y) * (newP1.y- newP2.y));if (leng1 < leng2) //放大手勢

        { returntrue;}else{ returnfalse; //縮小手勢}}

        判斷好手勢的縮放以后,創(chuàng)建函數(shù)控制攝像機的前后移動對應(yīng)手勢縮放,但是要有最大最小移動值限制。

        3.3.3 按鈕交互

        該功能主要實現(xiàn)控制全景圖中標(biāo)簽的切換,實現(xiàn)按鈕交互,用戶可以從地圖中篩選所關(guān)注的地點,本案例中可以幫助用戶篩選場景中“交通周邊”、“醫(yī)療配套”、“商業(yè)休閑”。同時地圖會以標(biāo)簽指示出對應(yīng)的建筑。該算法的基本原理是,通過偵聽按鈕事件,讓按鈕控制對應(yīng)的更換場景球的貼圖的函數(shù),核心算法:publicvoid Addlistener()

        { Changebutton[0].onClick.AddListener(onbutton0);Changebutton[1].onClick.AddListener(onbutton1);Changebutton[2].onClick.AddListener(onbutton2);}publicvoid onbutton0()

        { TheMaterial.mainTexture = BlueTexture[0];}

        另外兩個按鈕代碼同上,BlueTexture[]是存儲貼圖的數(shù)組,用于存放不同標(biāo)簽的全景圖,更換的地方是材質(zhì)球的貼圖參數(shù)。

        3.4 發(fā)布與測試

        3.4.1 發(fā)布設(shè)置,本案例最終發(fā)布為web 版,用于手機移動端,Unity 允許發(fā)布為WebGL(html5),直接發(fā)布為網(wǎng)頁模板。在發(fā)布測試中注意:1. 在Other Setting 中Strip Engine Code 此選項可減少未用到的代碼提高效率。如果使用了AssetBundle 加載,需取消勾選此選項。2. 這里開啟了Publishing Setting-Data Caching,幫助數(shù)據(jù)緩存的提高加載速度。

        3.4.2 測試設(shè)備配置

        首先部署在服務(wù)器上,測試服務(wù)器配置參數(shù):CPU: Intel Xeon E5-2682v4,內(nèi)存:4GB,寬帶5Mbps。移動設(shè)備參數(shù):運行內(nèi)存4GB,機械存儲128GB,操作系統(tǒng)EMUI 9.1 (基于Android 9),處理器4 *CortexA73 2.2GHz + 4*CortexA53 1.7GHz,瀏覽器:Google Chrome。

        3.4.3 測試結(jié)果與分析

        a.加載速度測試,第一次開啟測試10 秒,第二次6 秒。b.效果顯示測試,UI 顯示正常、場景資源顯示正常,與發(fā)布前一致,效果良好。c.交互功能測試,按鈕測試正常,手指滑動旋轉(zhuǎn)視角正常,速度快慢需要反復(fù)調(diào)試,雙指縮放正常。

        4 結(jié)論

        對于傳統(tǒng)的平面、視頻展示效果來說,全景交互展示效果不僅僅聲音畫面結(jié)合,還具有交互性,對于風(fēng)景、建筑展示非常適用。Unity3d 能夠?qū)崿F(xiàn)自定義功能開發(fā),能夠?qū)崿F(xiàn)各類自定義化全景交互功能并且能夠發(fā)布多種平臺,對于VR 全景開發(fā)來說提供了技術(shù)支撐。

        猜你喜歡
        按鈕案例
        哪個是門鈴真正的按鈕
        當(dāng)你面前有個按鈕
        案例4 奔跑吧,少年!
        少先隊活動(2021年2期)2021-03-29 05:40:48
        門鈴按鈕
        隨機變量分布及統(tǒng)計案例拔高卷
        發(fā)生在你我身邊的那些治超案例
        中國公路(2017年7期)2017-07-24 13:56:38
        死循環(huán)
        隨機變量分布及統(tǒng)計案例拔高卷
        一個模擬案例引發(fā)的多重思考
        內(nèi)心不能碰的按鈕
        国产一区二区三区精品成人爱| 波多野结衣免费一区视频| 久久精品国产亚洲7777| 97无码免费人妻超级碰碰夜夜| 精品一品国产午夜福利视频| 丰满人妻AV无码一区二区三区| 亚洲日产乱码在线中文字幕| 亚洲欧洲成人精品香蕉网| 成人欧美一区二区三区a片| 国产精品98福利小视频| 亚洲av高清在线一区二区三区| 日韩不卡一区二区三区色图| 天天爽夜夜爽夜夜爽精品视频| 国产女主播精品大秀系列| 久久99欧美| 亚洲天堂免费成人av| 黄色av一区二区在线观看| 正在播放强揉爆乳女教师| 蜜桃精品免费久久久久影院| 丝袜 亚洲 另类 欧美| 一二三四在线观看韩国视频| 边添小泬边狠狠躁视频| 麻豆精品国产精华精华液好用吗 | 在线亚洲精品国产成人二区| 偷拍色图一区二区三区| 亚洲av日韩av女同同性| 香蕉久久久久久久av网站| 美女极度色诱视频国产免费| 精品乱色一区二区中文字幕 | 久久久亚洲精品免费视频| 亚洲精品美女中文字幕久久| 久久日日躁夜夜躁狠狠躁| 99精品国产99久久久久久97| 2020久久精品亚洲热综合一本| 亚洲本色精品一区二区久久| 亚洲精品久久久久avwww潮水| 真人二十三式性视频(动)| 色婷婷一区二区三区四区| 日本中文字幕婷婷在线| 午夜无码国产理论在线| 国产黑色丝袜在线观看视频|