OpenCASCADE Incremental Mesh
eryar@163.com
Abstract. OpenCASCADE IncrementalMesh is used to build the mesh of a shape with respect of their correctly triangulated parts. The blog focus on the deflection control of the algorithm.
Key Words. Mesh, Visualization
1. Introduction
Mesh是生成三維模型顯示數(shù)據(jù)的關(guān)鍵算法。OpenCASCADE的TKMesh提供了網(wǎng)格剖分算法,用于生成BREP體的顯示數(shù)據(jù)。原來的一些文章對網(wǎng)格剖分的算法及其用法進(jìn)行過說明,本文主要對網(wǎng)格剖分的核心部分進(jìn)行深入挖掘,理解其剖分精度控制原理。感興趣的讀者可以結(jié)合源碼,學(xué)習(xí)其實(shí)現(xiàn)方法。當(dāng)理解其算法原理后,也可以自己實(shí)現(xiàn)一套結(jié)合實(shí)際需求的高性能網(wǎng)格剖分庫。
網(wǎng)格剖分的主要流程如下:
遍歷TopoDS_Shape的TopoDS_Face,對于每個TopoDS_Face,遍歷其TopoDS_Wire,對于每個TopoDS_Wire遍歷其TopoDS_Edge,在根據(jù)Edge和Face得到PCurve。因?yàn)?/span>TopoDS_Wire是閉合的,所以Wire的PCurve是在參數(shù)空間閉合區(qū)域。對PCurve圍成的參數(shù)區(qū)域進(jìn)行三角剖分,將三角剖分的結(jié)果映射到三維空間,最終生成每個Face的網(wǎng)格剖分。這個流程很好理解,但是如何對網(wǎng)格剖分的質(zhì)量進(jìn)行控制呢?即用相對少的三角網(wǎng)格來更好地表示三維模型呢?
2. Mesh Deflection Control
OpenCASCADE對BRep體進(jìn)行三角剖分網(wǎng)格化的類是BRepMesh_IncrementalMesh,此類有兩個主要的選項來控制三角網(wǎng)格化:線性偏差Linear deflection和角度偏差Angular deflection。
三角網(wǎng)格剖分第一步是將所有的邊Edge進(jìn)行離散,即根據(jù)一定的精度生成多段線;
線性偏差限制離散的多段線與曲線之間的距離;角度偏差限制每段線段端部切線的夾角。
第二步是對面進(jìn)行三角剖分。線性偏差也限制離散的三角形中點(diǎn)到曲線的距離。
應(yīng)用程序應(yīng)該提供適當(dāng)?shù)钠顓?shù)以達(dá)到生成滿意的三角網(wǎng)格。角度偏差Angular deflection比較簡單且允許使用一個默認(rèn)值(12~20度)。線性偏差Linear deflection有絕對的含義,需要由程序來給定正確的值。給一個很小的線性偏差值會導(dǎo)致網(wǎng)格剖分過密,消耗大量內(nèi)存及影響顯示效率;但是值太大得到的網(wǎng)格效果就是顯示失真。所以對于LOD的網(wǎng)格來說,需要根據(jù)模型尺寸來設(shè)置相應(yīng)的線性偏差值。
上面對網(wǎng)格剖分的參數(shù)設(shè)置進(jìn)行了介紹,下面對網(wǎng)格剖分的實(shí)現(xiàn)原理進(jìn)行說明。因?yàn)榍€曲面是三維的,而對曲面進(jìn)行剖分的底層三角剖功能是個二維三角剖分庫,所以網(wǎng)格剖分總的思路是對曲線在二維參數(shù)空間進(jìn)行剖分,將參數(shù)空間剖分的結(jié)果通過曲面參數(shù)方程映射回到三維空間。通過對pcurve圍成的參數(shù)空間閉合區(qū)域進(jìn)行二維三角剖分,即可對三維曲面進(jìn)行剖分。類BRepMesh_FastDiscretFace是對每個TopoDS_Face進(jìn)行離散,其中函數(shù)control()是用來控制生成網(wǎng)格的質(zhì)量的。
最多迭代次數(shù)是11次。在每一次迭代過程中,檢查生成的所有三角形在參數(shù)空間中心點(diǎn)處與曲面的距離是否滿足線性偏差,如果不滿足,則插入新的點(diǎn)以便下次迭代。
從上面的代碼可以看出其實(shí)現(xiàn)思路與其類名Incremental還是很貼切的,即增量法。
3. Conclusion
OpenCASCADE的網(wǎng)格剖分中網(wǎng)格質(zhì)量控制是相對重要的核心功能。在理解其原理后,可以自己實(shí)現(xiàn)一個更清晰的網(wǎng)格剖分庫。
2018年就過結(jié)束了,這一年收獲頗豐,其中最大的收獲就是有了自己的小寶寶。
分享創(chuàng)建價值。雖然OpenCASCADE不是完美的,但是她是目前世界上唯一一款功能相對完善的開放的幾何造型庫。OpenCASCADE的開放分享,給她帶來生機(jī)。當(dāng)他人因?yàn)槲业?/span>blog的分享的文章或代碼聯(lián)系我時,他們的一聲感謝,我都會覺得很高興。
2019年馬上就要到來,希望大家在新的一年里,創(chuàng)造、創(chuàng)新,突破自我,更上一層樓!
為了方便大家在移動端也能看到我的博文和討論交流,現(xiàn)已注冊微信公眾號,歡迎大家掃描下方二維碼關(guān)注。