• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于WebGL的三維虛擬博物館碰撞檢測(cè)

      2017-05-31 19:36:11李赟劉一松陳繼明行
      軟件導(dǎo)刊 2017年5期
      關(guān)鍵詞:碰撞檢測(cè)

      李赟 劉一松 陳繼明行

      摘要摘要:三維虛擬博物館是通過計(jì)算機(jī)對(duì)現(xiàn)實(shí)生活中博物館的一個(gè)模擬,在各大主流瀏覽器上提供虛擬博物館漫游功能,讓廣大用戶不必親臨現(xiàn)場(chǎng)就可以在網(wǎng)上身臨其境地了解博物館藏品信息。在分析虛擬博物館實(shí)際應(yīng)用的基礎(chǔ)上,針對(duì)虛擬場(chǎng)景中的碰撞檢測(cè),提出了一種基于WebGL的適用于虛擬博物館的碰撞檢測(cè)算法。算法首先使用XML構(gòu)建虛擬場(chǎng)景,并通過樹的篩選方式對(duì)空間進(jìn)行篩選,然后使用優(yōu)化的AABB包圍盒進(jìn)行碰撞檢測(cè),使用戶在使用第一人稱漫游博物館場(chǎng)景時(shí),能與靜態(tài)物品產(chǎn)生真實(shí)的碰撞效果。實(shí)驗(yàn)結(jié)果表明,該算法的運(yùn)用可以實(shí)時(shí)反映連續(xù)碰撞效果。

      關(guān)鍵詞關(guān)鍵詞:WebGL;虛擬博物館;碰撞檢測(cè);AABB

      DOIDOI:10.11907/rjdk.171092

      中圖分類號(hào):TP319

      文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào)文章編號(hào):16727800(2017)05012405

      0引言

      虛擬現(xiàn)實(shí)技術(shù)的成熟和網(wǎng)絡(luò)技術(shù)的普及使得3D虛擬博物館的實(shí)現(xiàn)成為可能。3D虛擬博物館依據(jù)現(xiàn)實(shí)中的博物館,利用計(jì)算機(jī)構(gòu)建一個(gè)虛擬的三維世界,通過網(wǎng)絡(luò)處理技術(shù)將現(xiàn)實(shí)博物館逼真地展現(xiàn)給用戶。3D虛擬博物館的實(shí)現(xiàn)不僅打破了傳統(tǒng)展館在時(shí)間和空間上的局限性,還為使用者提供了關(guān)于聽覺和視覺的模擬,讓用戶能自由地觀察三維空間中的展品,給用戶一種沉浸式的體驗(yàn)[1]。

      對(duì)于虛擬博物館,人們關(guān)注的是其實(shí)時(shí)性和真實(shí)感,而其真實(shí)性和實(shí)時(shí)感主要體現(xiàn)于第一人稱視角在虛擬場(chǎng)景中的使用。要使用戶以第一人稱漫游場(chǎng)景時(shí)能如同在現(xiàn)實(shí)世界中瀏覽場(chǎng)景時(shí)一樣,碰撞檢測(cè)成為三維虛擬博物館系統(tǒng)實(shí)現(xiàn)中的重要一環(huán)。

      對(duì)于碰撞檢測(cè)的研究,至今為止已經(jīng)形成了一個(gè)相對(duì)完整的體系,網(wǎng)頁版虛擬技術(shù)實(shí)現(xiàn)的“Flash3D”、“Java3D”、“Unity3D”等技術(shù)都有自身的一些碰撞檢測(cè)機(jī)制,然而這些技術(shù)在網(wǎng)頁端的實(shí)現(xiàn)都需要安裝一些特定的插件,因此存在很大的局限性。而場(chǎng)景模型的針對(duì)性、應(yīng)用領(lǐng)域的專業(yè)性和場(chǎng)景要求的特殊性,對(duì)碰撞檢測(cè)的效果提出了不同要求:對(duì)于虛擬維修[2],主要追求碰撞檢測(cè)效率,因而王崴等[3]采用動(dòng)態(tài)分裂平面法加速OBB包圍盒構(gòu)建的過程來進(jìn)行碰撞檢測(cè);對(duì)于游戲場(chǎng)景,由于場(chǎng)景模型多且復(fù)雜,為了游戲場(chǎng)景的真實(shí)性和實(shí)時(shí)性,劉翼等[3]提出了結(jié)合使用空間剖分法和層次包圍盒法對(duì)其進(jìn)行檢測(cè)。WebGL[4]是2010年公開發(fā)布的Web端3D繪圖標(biāo)準(zhǔn),它無需安裝插件且具有跨平臺(tái)性[56],因此受到人們的關(guān)注,然而對(duì)WebGL碰撞檢測(cè)方面的研究并不是很多,因此亟需尋找一種方法對(duì)WebGL進(jìn)行碰撞檢測(cè)。本文提出了一種基于AABB包圍盒的碰撞檢測(cè)算法實(shí)現(xiàn)在WebGL環(huán)境下適用于虛擬現(xiàn)實(shí)博物館進(jìn)行的碰撞檢測(cè)。

      1相關(guān)工作

      Sang Z,Wang T Y,Zou X X[7]提出了一種適用于數(shù)控機(jī)床的在線碰撞檢測(cè)算法?;跀?shù)控機(jī)床的特點(diǎn),綜合分析了八叉樹算法和網(wǎng)格分割的碰撞檢測(cè)算法優(yōu)缺點(diǎn),提出了一種長方體碰撞檢測(cè)結(jié)合分離軸碰撞檢測(cè)的算法來優(yōu)化傳統(tǒng)機(jī)床的碰撞檢測(cè)算法。該算法準(zhǔn)確性好且精度較高,但是效率較低。

      Hung W H,Kang S C J[8]針對(duì)虛擬環(huán)境中的仿真施工現(xiàn)場(chǎng),在2014年提出了一種快速的碰撞檢測(cè)算法,稱為傳播聚類方法。該方法采用K均值進(jìn)行聚類迭代,將對(duì)象分為多個(gè)組,定義一個(gè)質(zhì)量指標(biāo)進(jìn)行結(jié)果評(píng)估,符合質(zhì)量要求時(shí),該組對(duì)象采用AABB包圍盒進(jìn)行替換,還建立了一個(gè)分散對(duì)象場(chǎng)景、一個(gè)施工現(xiàn)場(chǎng)場(chǎng)景、一個(gè)散亂的普通遺址場(chǎng)景進(jìn)行測(cè)試。該算法對(duì)虛擬建筑場(chǎng)景快速有效,但是碰撞檢測(cè)緊密型較差。

      2015年,王磊[9]提出了一個(gè)基于混合型包圍盒的碰撞檢測(cè)方法,稱為HBBCD算法。算法首先將待檢測(cè)物體轉(zhuǎn)化成二叉樹,在根節(jié)點(diǎn)處構(gòu)建包圍球,上層結(jié)構(gòu)構(gòu)建AABB包圍盒,下層結(jié)構(gòu)構(gòu)建OBB包圍盒。然后在相交測(cè)試階段,使用隊(duì)列標(biāo)記已檢測(cè)的物體,優(yōu)先遍歷深層次節(jié)點(diǎn)。王磊[9]將該算法集成到Unity3D中完成了一個(gè)基于Web3D的武警總隊(duì)警史館系統(tǒng),該算法很好地滿足了碰撞檢測(cè)的準(zhǔn)確性和實(shí)時(shí)性,但是復(fù)雜度高,計(jì)算比較麻煩。

      2016年,鄭華和劉家[10]提出了基于WebGL的面向Web的建筑模型碰撞檢測(cè)算法,先對(duì)導(dǎo)入的模型進(jìn)行拆解,然后將拆解后的子模型進(jìn)行碰撞檢測(cè)。該方法運(yùn)算簡單,但運(yùn)算步驟較多,對(duì)規(guī)則的類長方體模型有較好的碰撞檢測(cè)結(jié)果,但考慮的情況比較單一。

      2碰撞檢測(cè)

      碰撞檢測(cè)是為了提高虛擬場(chǎng)景的真實(shí)感而提出的關(guān)鍵技術(shù),其主要目的在于避免模型在運(yùn)動(dòng)過程中出現(xiàn)與其它模型發(fā)生交叉或者直接穿越的現(xiàn)象,避免用戶在使用虛擬場(chǎng)景時(shí)產(chǎn)生違和感[1112]。碰撞檢測(cè)主要分為3個(gè)階段:確認(rèn)碰撞模型階段、模型相交測(cè)試階段和碰撞響應(yīng)階段。確認(rèn)碰撞模型階段就是檢測(cè)運(yùn)動(dòng)物體與靜態(tài)物體是否發(fā)生碰撞,如果發(fā)生碰撞則確定碰撞模型;模型相交測(cè)試即確定運(yùn)動(dòng)模型與靜止模型是否發(fā)生穿越或沖突;碰撞響應(yīng)階段即當(dāng)運(yùn)動(dòng)物體與靜態(tài)物體發(fā)生碰撞時(shí),運(yùn)動(dòng)物體作出相應(yīng)改變的過程。

      2.1碰撞

      碰撞[13]是指兩個(gè)作相對(duì)運(yùn)動(dòng)的模型接觸并改變其運(yùn)動(dòng)狀態(tài)的現(xiàn)象。

      從能量角度出發(fā)可將碰撞分為:理想彈性碰撞、非彈性碰撞、完全非彈性碰撞和超彈性碰撞。理想彈性碰撞是指在不考慮任何不同能量間的轉(zhuǎn)化或者能量損耗的前提下,動(dòng)能和動(dòng)能之間的改變;非彈性碰撞是指在部分動(dòng)能轉(zhuǎn)換成其它形式的能,物體發(fā)生一定的改變;完全非彈性碰撞是指物體在發(fā)生碰撞后動(dòng)能為零,完全不反彈;超彈性碰撞是指碰撞后的動(dòng)能超過碰撞前的動(dòng)能。

      針對(duì)本文需要檢測(cè)的虛擬博物館系統(tǒng),主要考慮的是動(dòng)態(tài)物體和絕對(duì)靜態(tài)物體之間的碰撞。由上述不同碰撞類型可知,當(dāng)運(yùn)動(dòng)物體和靜態(tài)物體發(fā)生理性彈性碰撞時(shí),靜態(tài)物體不發(fā)生任何改變,運(yùn)動(dòng)物體將做反方向的等動(dòng)能運(yùn)動(dòng);當(dāng)運(yùn)動(dòng)物體和靜態(tài)物體發(fā)生非彈性碰撞時(shí),運(yùn)動(dòng)物體或靜態(tài)物體發(fā)生形變或發(fā)熱,運(yùn)動(dòng)物體做削弱動(dòng)能的運(yùn)動(dòng);當(dāng)運(yùn)動(dòng)物體和靜態(tài)物體發(fā)生完全非彈性碰撞時(shí),運(yùn)動(dòng)物體和靜態(tài)物體保持靜止;當(dāng)運(yùn)動(dòng)物體和靜態(tài)物體發(fā)生超彈性碰撞時(shí),運(yùn)動(dòng)物體做反方向更快速的運(yùn)動(dòng)。運(yùn)動(dòng)的物體就是第一人稱視角模型,絕對(duì)靜止的物體就是博物館場(chǎng)景模型。由此可知,場(chǎng)景模型中的模型屬性都是剛體,且動(dòng)能較小,因此需要考慮的是完全非彈性碰撞。

      2.2相交

      相交是指兩個(gè)物體相互交叉在一起。二維平面中,圖形與圖形之間擁有兩個(gè)及兩個(gè)以上交點(diǎn),則兩個(gè)圖形相交(直線與直線相交只有一個(gè)交點(diǎn));三維平面中,當(dāng)一個(gè)三維模型的部分或全部存在于另一個(gè)三維模型的內(nèi)部(兩個(gè)模型的體積發(fā)生重疊)時(shí)這兩個(gè)三維模型相交。

      本文討論的相交是指當(dāng)用戶使用第一人稱進(jìn)行漫游時(shí),由于第一人稱視角模型和場(chǎng)館靜態(tài)模型的碰撞檢測(cè)不及時(shí),或者包圍盒選擇不合適所引起的視角的穿透。發(fā)生相交時(shí),用戶使用第一人稱視角可以看到模型內(nèi)部,使場(chǎng)景出現(xiàn)違和感。若沒有包圍盒或者碰撞檢測(cè)緩慢,則有可能發(fā)生穿越現(xiàn)象。用戶可以用平滑的速度穿過前面場(chǎng)景中的障礙物。

      3基于包圍盒的碰撞檢測(cè)算法分析

      3.1包圍球

      包圍球算法[14]是將模型碰撞描述為一個(gè)能將該模型包圍住的最小球體。即確定球心和球半徑(每個(gè)坐標(biāo)軸投影絕對(duì)值最大的點(diǎn)間距離),就可以描述為一個(gè)包圍球。該方法構(gòu)造比較簡單,計(jì)算相對(duì)方便。

      3.2AABB包圍盒

      AABB包圍盒[15]是指軸向包圍盒,即將模型碰撞描述為將該模型包圍住的最小長方體,該長方體的長、寬、高分別平行于軸向上的X軸、Y軸和Z軸,確定模型每個(gè)軸向上投影的最大值和最小值即可構(gòu)造相應(yīng)的AABB包圍盒模型。該方法構(gòu)造簡單但緊密型差。

      3.3OBB包圍盒

      OBB包圍盒[16]即將模型碰撞描述為將碰撞模型包圍住的最小長方體,該長方體與軸向無關(guān)。該方法緊密性好,靈活但構(gòu)造復(fù)雜。

      3.4Kdops包圍盒

      Kdops包圍盒[17]將模型碰撞描述為能將模型圍住的最小凸多面體,該凸多面體所有面的法向量都來自于一個(gè)固定方向,有固定的軸集。該方法緊密性最佳,但是構(gòu)造麻煩。

      4 基于WebGL的3D虛擬博物館碰撞檢測(cè)

      3D虛擬博物館的碰撞檢測(cè)主要研究的是三維空間中運(yùn)動(dòng)物體(虛擬人物)與靜態(tài)物體(博物館場(chǎng)景)之間發(fā)生的碰撞檢測(cè)。

      由于博物館的場(chǎng)景較大,且對(duì)用戶體驗(yàn)有一定的要求,因此,為了檢測(cè)出移動(dòng)物體在運(yùn)動(dòng)過程的沖突,需要找到一個(gè)高效的基于場(chǎng)景的連續(xù)沖突檢測(cè)算法。

      4.1空間篩選

      在構(gòu)建場(chǎng)景時(shí),采用XML參數(shù)化語言進(jìn)行實(shí)現(xiàn)[18]。考慮到整個(gè)系統(tǒng)渲染效率、碰撞檢測(cè)和后續(xù)場(chǎng)景交互的方便性,采用如圖1所示的樹狀結(jié)構(gòu)組織場(chǎng)景。

      碰撞空間主要通過樹形結(jié)構(gòu)來確定,如果確定用戶停留在博物館外觀場(chǎng)景的虛擬空間時(shí),只需要進(jìn)行博物館外觀場(chǎng)景中的碰撞檢測(cè),若確定用戶進(jìn)入主題館(如青銅器館)場(chǎng)景中,則進(jìn)行與之相應(yīng)的主題館場(chǎng)景中的碰撞檢測(cè)。

      主題館場(chǎng)景主要分為兩種模型,即展臺(tái)模型(博物館建造時(shí)已經(jīng)確立的固定不動(dòng)部分)和展品模型(可根據(jù)現(xiàn)實(shí)情況變更的可變動(dòng)部分),而展品模型一般都存放在對(duì)應(yīng)的展柜之中。因此,為了提高碰撞檢測(cè)的效率,可以直接進(jìn)行展柜模型的碰撞檢測(cè)。

      4.2碰撞模型確認(rèn)

      經(jīng)過上述的空間篩選后,可以初步確定模型碰撞的范圍。由于博物館建筑模型的特殊性,一般展廳的展柜多為規(guī)則長方體透明玻璃,而展品一般都放在展柜之中,當(dāng)使用第一人稱視角模擬用戶漫游場(chǎng)景時(shí),只需要考慮外部展廳對(duì)于第一人稱視角的碰撞反應(yīng),而無需考慮放置在內(nèi)部的展品對(duì)于第一人稱產(chǎn)生的碰撞。因此選用AABB碰撞檢測(cè)包圍盒作為基本的碰撞模型,然后對(duì)此模型作一定的改進(jìn),最后利用改進(jìn)的碰撞模型完成對(duì)主題館內(nèi)的碰撞檢測(cè)。

      針對(duì)WebGL的碰撞檢測(cè),主要分為兩種情況:一種是由鍵盤控制第一人稱漫游引起的運(yùn)動(dòng)模型和靜態(tài)模型之間的碰撞;另一種是鼠標(biāo)控制的運(yùn)動(dòng)模型和靜態(tài)模型之間的碰撞。

      對(duì)于場(chǎng)景中的靜態(tài)展柜模型需要先設(shè)置對(duì)應(yīng)的AABB包圍盒,分別記錄靜態(tài)模型包圍盒S(S是一個(gè)變量,是靜態(tài)模型名稱)在3個(gè)軸向上的投影點(diǎn),X軸上投影的最小值和最大值分別記為:S-Xmin,S-Xmax;Y軸上投影的最小值和最大值分別記為:S-Ymin,S-Ymax;Z軸上投影的最小值和最大值分別記為:S-Zmin,S-Zmax。

      4.2.1鍵盤控制的運(yùn)動(dòng)模型和靜態(tài)模型之間的碰撞檢測(cè)

      對(duì)于運(yùn)動(dòng)模型M,計(jì)算運(yùn)動(dòng)后的包圍盒,并記錄3個(gè)軸向上的投影點(diǎn),分別為:M-Xmin,M-Xmax,M-Ymin,M-Ymax,M-Zmin,M-Zmax。依次判斷3個(gè)軸向上的碰撞,以X軸為例,先判斷最小值,若M-Xmin≤S-Xmax,則將S和M碰撞檢測(cè)標(biāo)志置為True(S和M碰撞檢測(cè)標(biāo)志默認(rèn)為false),如果M-Xmin>S-Xmax,不作處理;再判斷最大值,如果M-Xmax≤S-Xmin,S和M碰撞檢測(cè)標(biāo)志置為False,如果M-Xmax>S-Xmin,不作處理。若處理完3個(gè)軸向上的碰撞,最終M碰撞檢測(cè)標(biāo)志為True,則存在碰撞,碰撞模型為S。

      由于運(yùn)動(dòng)模型和靜態(tài)模型的碰撞對(duì)于實(shí)時(shí)性要求較高,因而需要將碰撞檢測(cè)的機(jī)制放置在渲染循環(huán)機(jī)制中。本文采用three.js來繪制虛擬場(chǎng)景,three.js是基于WebGL的3D圖形繪制庫,它主要由3部分組成:相機(jī)、場(chǎng)景和渲染器。

      然后將碰撞檢測(cè)包圍盒算法添加到場(chǎng)景中,并給相機(jī)添加碰撞檢測(cè)盒,利用渲染循環(huán)機(jī)制不斷更新運(yùn)動(dòng)物體運(yùn)動(dòng)后的位置和運(yùn)動(dòng)后包圍盒狀況,實(shí)時(shí)監(jiān)控碰撞的發(fā)生并繪制更新的虛擬場(chǎng)景。循環(huán)方式如下代碼所示,animate函數(shù)是一個(gè)動(dòng)畫,在系統(tǒng)運(yùn)行時(shí)不斷執(zhí)行,使render函數(shù)內(nèi)的場(chǎng)景和相機(jī)不斷更新,并渲染它們。

      4.2.2鼠標(biāo)控制的運(yùn)動(dòng)模型和靜態(tài)模型之間的碰撞檢測(cè)

      由于鼠標(biāo)控制運(yùn)動(dòng)模型的運(yùn)動(dòng)方式是直線運(yùn)動(dòng),可以計(jì)算運(yùn)動(dòng)模型運(yùn)動(dòng)中包圍盒在3個(gè)軸向上的投影。在直線運(yùn)動(dòng)狀態(tài)下,可以認(rèn)為在Z軸上投影坐標(biāo)保持不動(dòng),因此只要考慮在Y軸和X軸存在的關(guān)系,運(yùn)動(dòng)前包圍盒X軸為:M-Xmin,M-Xmax,Y軸投影點(diǎn)為:M-Ymin,M-Ymax;運(yùn)動(dòng)后包圍盒X軸投影點(diǎn)為M-Xmin′,M-Xmax′,Y軸投影點(diǎn)為:M-Ymin′,M-Ymax′。根據(jù)線性方程y=ax+b可知:

      然后將運(yùn)動(dòng)路線中可能存在的碰撞進(jìn)行檢測(cè),判斷方式和鍵盤控制運(yùn)動(dòng)的碰撞判斷方式類似。

      4.3模型相交測(cè)試

      運(yùn)用分割軸算法進(jìn)行模型相交測(cè)試,若兩個(gè)模型不相交,則存在一個(gè)平面使得兩個(gè)模型分別位于平面的兩側(cè)。

      運(yùn)動(dòng)模型M和靜止模型S,其中心連線在每個(gè)軸向上的投影長度為C=|(S-M)*Axis|(Axis指每個(gè)軸向),參考長度為T=L/2+[(S-Max)-(S-Min)/2],其中L是運(yùn)動(dòng)包圍盒邊長。當(dāng)某個(gè)軸向上的C≥T時(shí),模型不相交;如果各個(gè)軸向上中心連線投影長度C都小于它的參考長度T,則模型相交。

      4.4動(dòng)作選擇

      由于運(yùn)動(dòng)方式分為鍵盤控制的運(yùn)動(dòng)和鼠標(biāo)控制的運(yùn)動(dòng),因而動(dòng)作選擇需要做一定的區(qū)分。

      4.4.1鍵盤控制運(yùn)動(dòng)碰撞時(shí)的動(dòng)作選擇

      未檢測(cè)到碰撞時(shí),運(yùn)動(dòng)操作繼續(xù),并作相應(yīng)的動(dòng)作。當(dāng)檢測(cè)到發(fā)生碰撞時(shí),首先確定發(fā)生碰撞的軸向,由于博物館場(chǎng)景模型為平地,檢測(cè)碰撞時(shí)只需要檢測(cè)4個(gè)軸向上的碰撞。將運(yùn)動(dòng)模型碰撞檢測(cè)盒朝著4個(gè)軸向:X軸正軸,X軸負(fù)軸,Y軸正軸和Y軸負(fù)軸分別收縮,然后進(jìn)行檢測(cè),若在某一軸向收縮的情況下檢測(cè)到碰撞消除,則該軸向預(yù)判為碰撞軸向,運(yùn)動(dòng)模型在該軸向上的運(yùn)動(dòng)被鎖定,只允許其它軸向上的運(yùn)動(dòng),碰撞模型檢測(cè)盒恢復(fù);若未檢測(cè)到碰撞消除,則再次縮小各軸向的邊長,繼續(xù)檢測(cè)。

      4.4.2鼠標(biāo)控制運(yùn)動(dòng)碰撞時(shí)的動(dòng)作選擇

      未檢測(cè)到碰撞時(shí),平移運(yùn)動(dòng)被執(zhí)行,模型平緩運(yùn)動(dòng)到目標(biāo)位置。當(dāng)檢測(cè)到碰撞時(shí),根據(jù)對(duì)碰撞反應(yīng)精度的要求,將模型的運(yùn)動(dòng)量減小1/r倍,并按上述碰撞檢測(cè)方法再次進(jìn)行檢測(cè),即計(jì)算運(yùn)動(dòng)目標(biāo)位置為(M-Xmin′+M-Xmin)(r-1)/r,(M-Xmax′+M-Xmax)(r-1)/r,(M-Ymin′+M-Ymin)(r-1)/r,(M-Ymax′+M-Ymax)(r-1)/r的情況。若仍然存在碰撞檢測(cè)則繼續(xù)將運(yùn)動(dòng)量減小1/r倍并檢測(cè),否則,按照減小的運(yùn)動(dòng)量運(yùn)動(dòng)。

      由于虛擬博物館對(duì)碰撞反應(yīng)的速率要求相對(duì)較高,對(duì)精度要求相對(duì)較低,因而當(dāng)檢測(cè)到碰撞時(shí),選擇將模型的運(yùn)動(dòng)量減半并按上述碰撞檢測(cè)方法再次進(jìn)行檢測(cè),即計(jì)算運(yùn)動(dòng)目標(biāo)位置為(M-Xmin′+M-Xmin)/2,(M-Xmax′+M-Xmax)/2,(M-Ymin′+M-Ymin)/2,(M-Ymax′+M-Ymax)/2的情況。若仍然存在碰撞檢測(cè)則繼續(xù)將運(yùn)動(dòng)量減半并檢測(cè),否則按照減半的運(yùn)動(dòng)量運(yùn)動(dòng)。

      5檢測(cè)結(jié)果

      本文基于WebGL對(duì)虛擬博物館中的碰撞檢測(cè)展開了研究,設(shè)計(jì)并實(shí)現(xiàn)了三維虛擬博物館系統(tǒng),從而驗(yàn)證該碰撞檢測(cè)的可行性和碰撞檢測(cè)效果。

      當(dāng)使用鍵盤進(jìn)行第一人稱漫游時(shí),用戶通過鍵盤控制第一人稱的移動(dòng),W向前、S向后、A向左、D向右。若不發(fā)生碰撞,則用戶做如圖2所示的流暢的勻速運(yùn)動(dòng)。

      若發(fā)生碰撞,輸出對(duì)應(yīng)的提示信息,并給出碰撞軸,如圖3所示。判斷當(dāng)前狀態(tài)為hit給出碰撞軸為X正方向,此時(shí)用戶不能再向X正軸方向前進(jìn),但用戶可以向Y軸正方向、Y軸負(fù)方向或X軸負(fù)方向前進(jìn)。

      當(dāng)鼠標(biāo)控制第一人稱移動(dòng)時(shí),通過鼠標(biāo)點(diǎn)擊屏幕來獲取運(yùn)動(dòng)模型的終點(diǎn)信息。若運(yùn)動(dòng)過程中不發(fā)生碰撞,則第一人稱視角以直線勻速運(yùn)動(dòng)方式移動(dòng)到終點(diǎn)位置,如圖4所示。進(jìn)入場(chǎng)景默認(rèn)起始位置(0,0,0)點(diǎn)擊屏幕之后獲取終點(diǎn)位置(115.33,73.021,0),若該運(yùn)動(dòng)路徑上未發(fā)生碰撞,則移動(dòng)到(115.33,73.021,0)位置。

      若發(fā)生碰撞時(shí),第一人稱視角運(yùn)動(dòng)量減半,并重新檢測(cè)。

      重新檢測(cè)時(shí)未發(fā)生碰撞,移動(dòng)到減半后的位置,如圖5所示。進(jìn)入場(chǎng)景默認(rèn)起始位置(0,0,0)點(diǎn)擊屏幕之后獲取終點(diǎn)位置(117.28,56.33,0),判斷該運(yùn)動(dòng)路徑上是否發(fā)生碰撞,給出提示信息hit,并更新起始位置(0,0,0)和終點(diǎn)位置(58.64,28.165,0),終點(diǎn)位置是之前的一半,再次判斷后未產(chǎn)生碰撞,則移動(dòng)到位置(58.64,28.165,0)。

      若發(fā)生如6圖所示的連續(xù)碰撞,在起點(diǎn)位置(200,0,0)和終點(diǎn)位置(207.1,100.531,0)之間檢測(cè)到碰撞,輸出碰撞信息hit并將模型運(yùn)動(dòng)量減半,更新起點(diǎn)位置(200,0,0)和終點(diǎn)位置(203.55,50.2655,0)再次進(jìn)行判斷,仍然存在碰撞繼續(xù)輸出碰撞信息hit并減半運(yùn)動(dòng)量,起點(diǎn)為(200,0,0),終點(diǎn)為(201.775,25.1328,0),再次檢測(cè)未發(fā)生碰撞,物體移動(dòng)到位置(201.775,25.1328,0)。

      6結(jié)語

      隨著虛擬現(xiàn)實(shí)技術(shù)的發(fā)展,WebGL憑借跨平臺(tái)性和可操作性的優(yōu)勢(shì)實(shí)現(xiàn)了很好的展示,然而目前國內(nèi)對(duì)于WebGL和HTML5的探索和研究還不是很多。本文基于WebGL實(shí)現(xiàn)了虛擬博物館場(chǎng)館模型中的碰撞檢測(cè),雖然不夠完美,緊密型存在差距,但方法是可行的,能快速檢測(cè)到場(chǎng)景中發(fā)生的連續(xù)碰撞和未發(fā)生失真的交互穿越現(xiàn)象。本文的碰撞檢測(cè)僅針對(duì)虛擬博物館的特性展開研究,相信隨著WebGL及3D引擎的不斷完善,瀏覽器端的3D仿真在教育、商業(yè)、生活等方面都會(huì)有更加廣闊的應(yīng)用前景。

      參考文獻(xiàn)參考文獻(xiàn):

      [1]張劍平,夏文菁.數(shù)字化博物館與學(xué)校教育相結(jié)合的機(jī)制與策略研究[J].中國電化教育,2016(1):7985.

      [2]王崴,周誠,楊云,等.面向虛擬維修的碰撞檢測(cè)算法[J].計(jì)算機(jī)應(yīng)用與軟件,2016,33(4):235238.

      [3]劉翼.三維游戲中碰撞檢測(cè)算法的研究與實(shí)現(xiàn)[D].武漢:武漢理工大學(xué),2010.

      [4]MARRIN C.Webgl specification[Z].Khronos WenGL Working Group,2011.

      [5]KOPEC A,BALA J,PIETA A.WebGL based visualisation and analysis of stratigraphic data for the purposes of the mining industry[J].Procedia Computer Science,2015,51(1):28692877.

      [6]SUN F,ZHANG Z,LIAO D,et al.A lightweight and crossplatform Web3D system for casting process based on virtual reality technology using WebGL[J].International Journal of Advanced Manufacturing Technology,2015,80(58):801816.

      [7]SANG Z,WANG T Y,ZOU X X,et al.Research on online collision detection algorithm of CNC machine tools[J].Key Engineering Materials,2016,693(3):17801785.

      [8]HUNG W H,KANG S C J.Automatic clustering method for realtime construction simulation[J].Advanced Engineering Informatics,2014,28(2):138152.

      [9]王磊.基于混合型包圍盒碰撞檢測(cè)技術(shù)的研究及其在Web3D漫游中的應(yīng)用[D].上海:上海大學(xué),2015.

      [10]鄭華,劉佳.面向Web的建筑模型分析與碰撞檢測(cè)[J].石家莊鐵路職業(yè)技術(shù)學(xué)院學(xué)報(bào),2016,15(2):8994.

      [11]HWANG S S,SPEYER J L.Collision detection system based on differential carrierphase global positioning system broadcasts[J].Journal of Aircraft,2015,46(6):20772089.

      [12]SU J,HONG D,TANG J,et al.An efficient anticollision algorithm based on improved collision detection scheme[J].IEICE Transactions on Communications,2016,99(2):465470.

      [13]WANG H.Defending continuous collision detection against errors[J].Acm Transactions on Graphics,2014,33(4):110.

      [14]溫茹.虛擬現(xiàn)實(shí)環(huán)境中碰撞檢測(cè)優(yōu)化技術(shù)研究[D].長春:吉林農(nóng)業(yè)大學(xué),2014.

      [15]趙偉,譚睿璞,李勇.復(fù)雜虛擬環(huán)境下的實(shí)時(shí)碰撞檢測(cè)算法[J].系統(tǒng)仿真學(xué)報(bào),2010,22(1):125129

      [16]王偉,馬俊,劉偉.基于OBB包圍盒的碰撞檢測(cè)研究與應(yīng)用[J].計(jì)算機(jī)仿真,2009(9):180183.

      [17]李紅波,周東諭,吳渝.基于混合包圍盒的碰撞檢測(cè)算法[J].計(jì)算機(jī)應(yīng)用,2010,30(12):33043306.

      [18]盧威,曾定浩,陳繼明,等.虛擬博物館系統(tǒng)構(gòu)建中的關(guān)鍵技術(shù)研究[J].計(jì)算機(jī)科學(xué),2007,34(7):244247.

      責(zé)任編輯(責(zé)任編輯:孫娟)

      猜你喜歡
      碰撞檢測(cè)
      基于動(dòng)力學(xué)補(bǔ)償?shù)臋C(jī)器人電機(jī)力矩誤差碰撞檢測(cè)
      全新預(yù)測(cè)碰撞檢測(cè)系統(tǒng)
      基于BIM的鐵路信號(hào)室外設(shè)備布置與碰撞檢測(cè)方法
      Unity3D中碰撞檢測(cè)問題的研究
      基于Virtools的虛擬滅火系統(tǒng)碰撞檢測(cè)設(shè)計(jì)與實(shí)現(xiàn)
      空間遙操作預(yù)測(cè)仿真快速圖形碰撞檢測(cè)算法
      BIM技術(shù)下的某辦公樓項(xiàng)目管線碰撞檢測(cè)
      雙臂鉆車鉆臂與巷道的碰撞檢測(cè)方法研究
      基于分層包圍盒的線纜與剛性體碰撞檢測(cè)算法
      碰撞檢測(cè)在三維場(chǎng)景漫游中的研究與實(shí)現(xiàn)
      沁阳市| 镇巴县| 南宫市| 沐川县| 河南省| 珠海市| 兰州市| 杨浦区| 库车县| 正镶白旗| 来凤县| 祁阳县| 潼南县| 图们市| 响水县| 汝州市| 江山市| 通山县| 长寿区| 汉阴县| 丘北县| 会泽县| 杂多县| 神木县| 安新县| 盐源县| 德阳市| 浦江县| 麟游县| 惠州市| 冷水江市| 抚宁县| 曲水县| 周口市| 杭州市| 钦州市| 青浦区| 梧州市| 木兰县| 延川县| 石棉县|