Marching Cubes算法是三維離散數(shù)據(jù)場(chǎng)中提取等值面的經(jīng)典算法燃乍,其主要應(yīng)用于醫(yī)學(xué)領(lǐng)域的可視化場(chǎng)景楞卡,例如CT掃描和MRI掃描的3D重建霜运,這里是用于游戲中體素地形的生成以及破壞。
原理推演
在一個(gè)空間內(nèi)蒋腮,使用f(x,y,z) -> v 函數(shù)生成均勻排列的點(diǎn)淘捡。該函數(shù)生成的最大值是16,設(shè)置為白色池摧,最小值為-34焦除,設(shè)置為黑色。此時(shí)我們?cè)O(shè)定一個(gè)基準(zhǔn)(Surface/物體表面閾值)作彤,在這個(gè)范圍內(nèi)調(diào)節(jié)膘魄,高于基準(zhǔn)的顯示,低于基準(zhǔn)的消失
image.png
高于基準(zhǔn)值的點(diǎn)可以認(rèn)為在某個(gè)體的表面或內(nèi)部竭讳,后續(xù)生成的三角形Mesh會(huì)包起來(lái)這個(gè)點(diǎn)创葡;Marching Cube 算法的目標(biāo)是生成一個(gè)由三角形組成的表面,這樣我們就可以用mesh的方式將該物體展示出來(lái)
image.png
上述空間中最基礎(chǔ)的配置是由8個(gè)點(diǎn)組成的立方體
image.png
當(dāng)這些點(diǎn)有一個(gè)或者多個(gè)在物體內(nèi)部時(shí)绢慢,可以算出此時(shí)的對(duì)應(yīng)三角面
image.png
image.png
image.png
總共有2^8=256種組合灿渴,但是通過(guò)鏡像和變換,只需要14個(gè)特殊組合就可以表示所有的組合了胰舆,如果加上全空骚露,就是15種組合,可以以此建立一個(gè)配置表缚窿。這些全是前人手動(dòng)統(tǒng)計(jì)出來(lái)的棘幸,網(wǎng)上也有現(xiàn)成的配置表可以用
image.png
使用舉例:當(dāng)1,5倦零,7號(hào)點(diǎn)激活時(shí)误续,也就是1,5扫茅,7點(diǎn)在物體內(nèi)部時(shí)女嘲,從76543210映射到2進(jìn)制10100010,換成10進(jìn)制就是162诞帐,我們?nèi)ヅ渲帽碇姓业?62號(hào)配置欣尼,就可以拿到該狀態(tài)下的三角面的頂點(diǎn)坐標(biāo)
image.png
接下來(lái)要做的就是在大空間中遍歷所有的小立方體,繪制Mesh
image.png