體素化(Voxelization)是將物體的幾何形式表示轉(zhuǎn)換成最接近該物體的體素表示形式,產(chǎn)生體數(shù)據(jù)集,其不僅包含模型的表面信息,而且能描述模型的內(nèi)部屬性。表示模型的空間體素跟表示圖像的二維像素比較相似,只不過從二維的點(diǎn)擴(kuò)展到三維的立方體單元,而且基于體素的三維模型有諸多應(yīng)用。
由于使用的需要,需對(duì)模型進(jìn)行體素化操作,這里采用了一種簡(jiǎn)單但卻有效的操作方法。首先設(shè)定模型體素化的分辨率,假設(shè)為 N * N * N,之后的操作主要包括兩部分:
1. 對(duì)模型表面的體素化
這一步的操作比較簡(jiǎn)單,首先計(jì)算出模型的AABB包圍盒,然后根據(jù)空間分辨率對(duì)包圍盒進(jìn)行劃分,得到每個(gè)大小為(X/N) * (Y/N) * (Z/N)空間像素列表。然后對(duì)構(gòu)成3D模型的多邊形或三角形列表進(jìn)行遍歷,得到這些基本體元所對(duì)就應(yīng)的包圍盒,然后由AABB求交運(yùn)算得到這些基本體元所能影響到的體素單元,將這些體素單元做為待判斷的基本對(duì)象。為了做進(jìn)一步的精確判定,使用三角形與AABB的求交算法確定這些基本體元所能影響到最終體素,并將這些體素標(biāo)記為非空,這樣就完成了對(duì)3D模型表面的體素化操作。
2. 對(duì)模型內(nèi)部的體素化
將模型表面體素化的操作進(jìn)行完之后即可得到對(duì)模型體素表示的一個(gè)“外殼”,接下來(lái)要做的操作就是進(jìn)行模型的內(nèi)部體素化操作。這里采用一種簡(jiǎn)單的方法。首先將對(duì)應(yīng)的3D模型建立空間八叉樹,這棵八叉樹主要用于進(jìn)行基本體元面片的求交操作。然后對(duì)模型AABB中的所有空體素,從其中心位置以軸對(duì)齊方向來(lái)發(fā)射兩條射線,這兩條射線的方向相反,但基本方向都是軸對(duì)齊的。對(duì)于這兩條的射線利用空間模型的八叉樹來(lái)得到其與3D模型的相交位置,并得到相交點(diǎn)的法向量及到相交點(diǎn)的距離,然后根據(jù)這兩點(diǎn)法向量之間的關(guān)系來(lái)判斷得到當(dāng)前體素是在3D模型的內(nèi)部或是在3D模型的外部。將這樣的操作施加于每一個(gè)空的體素之后就可以完成對(duì)3D模型內(nèi)部的體素化操作。
但是將這樣的操作施加于每一個(gè)空的體素速度比較慢,故而此處可以采用掃描的方法來(lái)進(jìn)行加速處理。如果判斷得到某個(gè)體素的位置為模型內(nèi)部后,就可以根據(jù)射線的方向及這兩條射線與模型的交點(diǎn)處的距離來(lái)對(duì)當(dāng)前體素相鄰的體素進(jìn)行掃描,這樣不需要再做判斷就可以標(biāo)記出相鄰體素的狀態(tài),這樣就加速了整個(gè)模型內(nèi)部的體素化操作。
但是上述這種方法具有局限性,對(duì)于非完全閉合的3D模型,這種方法不能很好地進(jìn)行內(nèi)部體素化操作,不過自己工程的需要中,這種方法就已經(jīng)適用了,而且簡(jiǎn)單易行。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注