郭艷
摘 要:在虛擬環(huán)境中,用戶在交互與物體運動中,物體之間會發(fā)生相應的碰撞。虛擬漫游中碰撞檢測屬于關鍵技術,在虛擬漫游時,為避免觀察者飛入地下、穿墻而過的不真實情況發(fā)展,應當積極開展碰撞檢測,切實解決虛擬漫游中碰撞檢測問題。本文首先對三角形與視點運動的檢測算法進行了分析,并且對算法細節(jié)等進行了闡述,意在旨為實際工作選擇協(xié)議提供有利參考,減少不必要的計算,不斷優(yōu)化其算法。
關鍵詞:虛擬漫游 碰撞檢測 解決方法
中圖分類號:TV147 文獻標識碼:A 文章編號:1672-3791(2018)09(a)-0013-02
虛擬漫游技術是VR的一個重要分支,該技術以其自身所具備的諸多特點,在多個領域中獲得廣泛應用,如建筑領域、航空航天領域、醫(yī)學領域等。虛擬漫游技術具有如下特性:交互性、構想性、沉浸感、三維空間感等,這些特性的存在,使得該技術要遠超其他漫游技術。借此,本文就虛擬漫游中的碰撞檢測問題的解決方法展開淺談。
1 三角形與視點運動過程中的檢測算法
在虛擬場景漫游中,所有的視點全部都會被轉化成為一個點,由此可將虛擬場景中的物體表面剖分成三角形,基于這一前提,便可將碰撞檢測的相關問題,轉化為點與三角形的碰撞問題。具體的碰撞檢測步驟如下。
Step1:先對視點在上一幀及當前幀的位置進行準確記錄。
Step2:對虛擬場景中的每個三角形進行遍歷,從中找出當前三角形所處的平面。
Step3:如果視點的上一幀和當前幀的兩個點分別位于平面的兩側,則可進行下一個步驟,若是不在平面兩側,則應當使虛擬場景中的下個三角形成為當前的三角形,并跳轉至Step2。
Step4:當視點的上一幀和當前幀的兩個點位于平面兩側時,雖然可以說明視點將平面穿透,但卻并不能說明,點和三角形之間發(fā)生了碰撞,這是因為平面本身具有無邊界的特性,故此,需要進一步判斷視點所處的位置,即是否在三角形的三條邊范圍內,穿過平面。
Step5:當虛擬場景中視點與當前的三角形之間出現碰撞的情況,便可對當前幀所處的位置進行修正,從而使視點沿著與平面相平行的方向運動。虛擬場景中的所有三角形全都遍歷一次后,視點的位置便是經過碰撞檢測,并加以修正后的,可據此對場景進行渲染,并對當前幀的位置進行更新。
2 算法細節(jié)
對于虛擬環(huán)境而言,受到用戶操作和物體運動的影響,使得環(huán)境中的物體常常會出現碰撞的情況,由此會對虛擬環(huán)境的真實性造成破壞,為避免此類問題的發(fā)生,需要對物體之間的碰撞進行及時檢測,并對碰撞后的反映進行計算,據此對繪制結果進行更新,從而達到防止物體相互穿透的現象發(fā)生。目前,對虛擬場景中的物體進行碰撞檢測時,較為常用的方法是借助包裹物體的包圍盒,來完成碰撞檢測。由于包圍盒中的各條線段全都與坐標軸相平行,包圍盒本身相當于一個體積較小的長方體,利用包圍盒進行碰撞檢測的最大優(yōu)越性在于快速。然而,在很多可視化系統(tǒng)中,要想實現自然交互僅憑借包圍盒檢測無法達到預期中的目標。如果兩個物體在虛擬場景中不相交時,包圍盒的檢測具有一定的效果,若是兩個物體的包圍盒有可能出現相交的情況時,但卻又無法確保必定相交,這樣包圍盒的效果就會大打折扣。所有物體的表面全部都能剖分為三角形,為使碰撞檢測結果的精度達到要求,可將之轉換為三角形的碰撞。在上文中,簡要分析了虛擬漫游中碰撞檢測的具體步驟,下面重點對算法的細節(jié)問題進行解釋。
2.1 三角形所在平面是否被視點穿過
在對視點是否從三角形所處的平面內穿過進行判斷時,可將如下條件作為主要的判斷依據:即兩點與之確定直線相交平面所產生的交點位置關系。如果焦點N在兩點之間,則表示視點從平面穿過,若是交點N在來不在兩點之間,則表明視點并未從平面中穿過。下面對檢測算法的具體細節(jié)進行分析。
從虛擬場景當中,找出當前三角形所在的那個平面,可從法向量與原點的距離對該平面進行表示,即v1=b-a;v2=c-a;其中的v1和v2均為向量,利用這兩個向量的叉乘可以求出該平面的法向量vN;叉乘函數為vectorCross,vN=vectorCross(v1,v2),隨后便可對平面至原點之間的距離f進行計算。點乘函數為vDot,對兩點所確定的直線方向向量vLine進行計算。按照交點與兩點所處的位置關系,對視點是否從平面穿過進行判斷??捎煤瘮祊osition()對3個點之間所處的位置關系進行判斷,當交點處于兩點之間,則表明視點從平面內穿過;若是交點在兩點的前面或是后面,則表明視點并未成功穿過平面。
2.2 觀察三角形是否與視點有所接觸
當視點從三角形所處的平面內穿過時,判斷其是否與三角形之間出現碰撞的過程較為簡單,具體方法是判斷直線與平面之間的交點是否處于三角形的內部,若是交點存在于三角形的內部,則表明視點是從三角形三邊范圍內穿過平面,據此可以判斷視點與三角形之間發(fā)生了碰撞;若是交點并不在三角形的內部,則說明,視點并未與三角形之間發(fā)生碰撞。對交點是否在三角形的內部進行判斷時,可以采用如下方法:交點與三角形三個頂點的夾角和為360°時,該交點處于三角形的內部,交點與三角形三個頂點夾角和的計算方法如下:先獲的當前頂點與交點之間的向量vA,據此得到下個向量vB,以循環(huán)的方法求出交點與3個頂點夾角的和,可以通過函數Angle Between對兩個向量間的夾角進行求取,即:
Angle+=Angle Between(vA,vB)
若是計算所得的結果超過360°,并且交點處于三角形的內部,則可判斷,該視點與三角形之間出現了碰撞。若是計算所得結果在360°以內,并且交點不在三角形的內部,則可以判斷該視點并未與三角形之間發(fā)生碰撞。
通過大量的實踐后發(fā)現,上文中的算法只能夠在比較簡單的場景且三角形數量較少的前提條件下運用,當虛擬場景過于復雜,并且其中的三角形數量較多時,該計算方法的運算速度便會顯著降低,為使這種計算方法能夠在大多數情況適用,對其進行了優(yōu)化改進,通過過濾的方法,將計算過程中,不需要的數據全部濾除掉,從而減化計算流程。本文所采用的優(yōu)化方法是分割過濾法,利用該方法可以將虛擬空間劃分為規(guī)則的格網,這樣便可將空間當中的物體分割成為更小的群組,在分割過濾的基礎上,可使系統(tǒng)進行碰撞檢測時的比較次數隨之減少,這樣一來,三角形的數量也會隨之減少,一些不必要的運算得以簡化,計算速度顯著提升。
3 結語
綜上所述,虛擬環(huán)境中的物體存在碰撞的可能性,為最大限度地保持環(huán)境的真實性,需要采用有效的方法對碰撞進行及時檢測,并對碰撞之后產生的反應進行計算。在對碰撞反應進行計算的過程中,碰撞檢測是不可或缺的先決條件之一,由此使其成為虛擬環(huán)境中的重要組成部分。本文應用VR技術中的虛擬漫游技術,提出碰撞檢測問題的解決方法,對計算的細節(jié)進行詳盡論述。
參考文獻
[1] 李婷婷,余慶軍.基于OpenGL的交互式虛擬漫游系統(tǒng)開發(fā)研究[J].計算機技術與發(fā)展,2017,29(10):109-110.
[2] 田軍,孟祥娟.基于VRML模型和ASP技術虛擬漫游展廳構建的研究[J].電腦與信息技術,2017,21(4):54-55.
[3] 曾凌.基于全景圖像的虛擬漫游系統(tǒng)在龍橋群展示中的應用研究[J].酒城教育,2018,16(6):87-88.
[4] 聶瑞.sketchup在計算機校園虛擬漫游中的運用[J].中國新通信,2017,25(3):65-66.
[5] 曹海龍,楊曉波.基于3dsMax和VRP的數字博物館虛擬漫游系統(tǒng)設計與實現[J].甘肅科技縱橫,2017,10(3):45-46.