矯宇鵬 魏巍 劉尚武



摘要:利用三維模型三角面片的點(diǎn)面信息,對(duì)模型進(jìn)行基于體素的規(guī)格化表示,重新構(gòu)建三維模型。對(duì)在同一平面的相鄰兩個(gè)規(guī)格化三角面片進(jìn)行合并,構(gòu)成新的四邊形面片,由此獲得由三角面片和四邊形面片混合顯示的三維模型。分別對(duì)三角面片和四邊形面片進(jìn)行分類和編碼,探索三角面片與四邊形面片混合存儲(chǔ)的方法。實(shí)驗(yàn)結(jié)果表明,該方法能夠在規(guī)格化三角面片存儲(chǔ)方法的基礎(chǔ)上,進(jìn)一步壓縮三維模型的存儲(chǔ)空間,提高存儲(chǔ)效率。
關(guān)鍵詞:體素;三角面片;四邊形面片;規(guī)格化
中圖分類號(hào):TP391.41 文獻(xiàn)標(biāo)識(shí)碼:A DOI:10.3969/j.issn.1003-6970.2016.05.002
本文著錄格式:矯宇鵬,魏巍,劉尚武.一種新的三維模型表示與存儲(chǔ)方法[J].軟件,2016,37(5):07-10
引言
近年來(lái),三維模型應(yīng)用廣泛,對(duì)計(jì)算機(jī)三維模型的表示和存儲(chǔ)方法的研究一直是計(jì)算機(jī)圖形領(lǐng)域的研究熱點(diǎn)。常用的三維模型表示方法有點(diǎn)云模型,網(wǎng)格模型,面片模型等。對(duì)于不同的模型表示方法,存儲(chǔ)空間各不相同。對(duì)于復(fù)雜的三維模型,無(wú)論采用何種現(xiàn)有的模型表示方法,其占用的存儲(chǔ)空間均比較大,這給三維模型的數(shù)據(jù)傳輸和實(shí)時(shí)處理帶來(lái)了很大不便。
本文提出了一種基于體素的三維模型表示方法,可將三維模型基于體素大小構(gòu)建為不同分辨率的面片表示。通過(guò)考察規(guī)格化為體素內(nèi)的三角面片之間的關(guān)系,探討了用規(guī)格化三角面片和規(guī)格化后位于同一平面的兩個(gè)三角面片構(gòu)成的四邊形來(lái)存儲(chǔ)三維模型的方法。實(shí)驗(yàn)結(jié)果表面,這種方法可以有效的壓縮三維模型的存儲(chǔ)空間。
1.三維模型的重新構(gòu)建
1.1三角面片信息提取
目前,多數(shù)三維模型采用的是三角面片模型構(gòu)建的方法。該方法建模的模型中一般包括兩類表信息,分別是點(diǎn)表信息和面表信息。前者存儲(chǔ)了三維模型中所有頂點(diǎn)的三維坐標(biāo),后者給出了組成三角面的三維頂點(diǎn)有哪些。三維模型重建需要把模型中的點(diǎn)、面信息提取出來(lái)。
1.2基于體素的模型表面面片劃分
傳統(tǒng)基于三角面片構(gòu)建的三維模型中,每個(gè)三角面片都毫無(wú)規(guī)律可循。為使其進(jìn)一步規(guī)格化,把所有三角面片劃分為基于體素大小的三角面片。
體素,即在空間坐標(biāo)系中,自定義單位棱長(zhǎng)的立方體。每個(gè)體素中有8個(gè)頂點(diǎn),任意3個(gè)頂點(diǎn)都可以構(gòu)成一個(gè)三角面片,并且總數(shù)是一定的。體素的棱長(zhǎng)為自定義數(shù)值,可以自由控制體素的大小,以便構(gòu)建不同分辨率的三維模型。由于三角面片的大小形狀已知,可以對(duì)每個(gè)三角面片進(jìn)行標(biāo)記,這樣更容易尋找三角面片之間的規(guī)律,同樣對(duì)構(gòu)成三維模型的三角面片也更容易標(biāo)識(shí)和整理。體素的優(yōu)點(diǎn)在于,能夠把不規(guī)則的面片劃分為已知的規(guī)則的三角面片。
1.3三維模型規(guī)格化
三維模型規(guī)格化定義為:把由不規(guī)則三角面片組成的三維模型,沿X、Y和z三個(gè)坐標(biāo)軸方向切分為基于體素的三維模型,即規(guī)格化后的三維模型表面是由一系列位于體素頂點(diǎn)構(gòu)成的三角面片組成。具體規(guī)格化步驟如下:
第一步:分層。對(duì)三維模型進(jìn)行分層處理,每層的寬度即為體素的棱長(zhǎng),可根據(jù)實(shí)際需要來(lái)確定。分層時(shí),首先沿空間坐標(biāo)軸找出三維模型中三個(gè)方向的最邊緣的點(diǎn),并以這三個(gè)點(diǎn)作為起點(diǎn),以體素的棱長(zhǎng)作為寬度對(duì)模型進(jìn)行依次切割。切割完成后,得到的是三維模型基于體素的表示。
第二步:取點(diǎn)。原三角面片模型被基于體素的切割劃分之后,尋找面片與切割線的交集,并按近似值確定新三角面片的各點(diǎn)信息。最后把得到的三角面片各點(diǎn)信息保存為文本格式。
在模型取點(diǎn)的過(guò)程中,為了最大程度還原三維模型的本來(lái)面貌,減少失真率,需要不斷根據(jù)取點(diǎn)的準(zhǔn)確性來(lái)調(diào)整分層的寬度,即體素的大小。圖1給出了單層的三角面片。同時(shí),還要保證每個(gè)點(diǎn)都能取到,沒(méi)有任何分割線上的點(diǎn)剩余。按此方法,最終得到一個(gè)分層次,基于體素的三角面片構(gòu)成的三維模型。對(duì)Bunnv模型進(jìn)行了規(guī)格化,如圖2所示,規(guī)格化后的模型中,所有的三角面片都是已知的,如圖2所示。
規(guī)格化的方法對(duì)于三維模型精度的要求可以通過(guò)調(diào)整體素的大小來(lái)解決。由于體素的棱長(zhǎng)為自定義數(shù)值,其大小可以根據(jù)實(shí)際需求來(lái)設(shè)置。最理想的狀況是整個(gè)模型中體素大小統(tǒng)一。對(duì)于模型中難以表達(dá)的細(xì)節(jié),可以用縮小體素,即用小體素表示。當(dāng)體素細(xì)化到一定程度,顯示三維模型時(shí)的失真率就會(huì)接近最小值。
1.4三角面片合并為四邊形
規(guī)格化后的三角面片大量存在于同一平面內(nèi)。為了方便模型的表達(dá),節(jié)省三維模型點(diǎn)面信息的存儲(chǔ)空間,我們將相鄰兩個(gè)三角面片進(jìn)行合并。將原本6個(gè)點(diǎn)表示的面片,只需4個(gè)點(diǎn)即可。三角面片合并為四邊形的條件如下:
1)兩個(gè)三角面片必須相鄰;
2)兩個(gè)三角面片必須在同一平面內(nèi)。
兩個(gè)三角面片可以構(gòu)成一個(gè)平面平行四邊形。這樣可以盡可能的減少點(diǎn)面信息的存儲(chǔ)空間。對(duì)于不同的三維模型,平面比例越大,則占用的存儲(chǔ)空間越小。圖3給出了規(guī)格化后僅用三角面片表示的三維模型與采用三角面片和四邊形面片混合顯示的三維模型的對(duì)比圖。其中混合模型的表示中,綠色區(qū)域?yàn)槿敲嫫{(lán)色區(qū)域表示的是四邊形。
2.三維模型的數(shù)據(jù)壓縮
2.1壓縮前的準(zhǔn)備
上述模型的規(guī)格化中提到,規(guī)格化后的三角面片全部是已知的三角面片。現(xiàn)在,要對(duì)這些面片進(jìn)行分類整理。在體素中,共有8個(gè)頂點(diǎn),任意3個(gè)頂點(diǎn)構(gòu)成一個(gè)三角面片,也就是一共有56種三角面片。這56種三角面片就是分類整理的對(duì)象。
首先是對(duì)連接邊的分類。體素中8個(gè)頂點(diǎn),任意兩點(diǎn)構(gòu)成一條連接邊。在不考慮重復(fù)和方向的情況下,共有13種連接邊。其次,以每條連接邊為基礎(chǔ),體素中除連接邊兩點(diǎn)外的任意一點(diǎn)為第三點(diǎn)組成三角面片。最終確定每條連接邊下的多個(gè)三角面片。在這中間,不同連接邊下會(huì)有相同的三角面片。對(duì)這種重復(fù)不予考慮,依舊按照原方法進(jìn)行分類。