Boolean operations between triangle meshes


Boolean operations between triangle meshes

eryar@163.com

Abstract. Boolean operations is one of basic and well known on 3D models. The operations are widely used in computer graphics, game, CAD, EDA. The blog introduce the function in some open source program. 

Key Words. Boolean Operations, Mesh, Triangle Mesh Boolean Operations,

1.Introduction

OpenCASCADE提供了基於BREP體的Boolean Operations,但是如果Topo體中只包含三角網格信息的話,是不支持布爾運算的。典型的例子就是由STL導入生成的模型在OpenCASCADE中是不能進行布爾運算。

有一些開源庫提供了基於三角網格的布爾運算的功能。如MeshLab、Cork等。本文主要就來介紹一下這兩個庫中的基於三角網格的布爾運算功能。

wps_clip_image-6945

Figure 1. Boolean Operation cut between Cylinder and Torus mesh

基於網格有布爾運算主要應用於沒有幾何信息的模型,如游戲、3D打印中的網格模型。

2.MeshLab CSG

MeshLab中提供了網格的布爾運算功能,源碼在filter_csg中。程序界面如下圖所示:

wps_clip_image-25211

Figure 2. CSG Operation in MeshLab

下圖所示為兩個網格球的公共部分Intersection的結果:

wps_clip_image-31437

Figure 3. Intersection between sphere meshes

由上圖可以看出,經過布爾運算后,網格變密了。

wps_clip_image-5546

Figure 4. Union between sphere meshes

上圖所示為兩個網格球的合並union結果。合並后的網格也變密了。

wps_clip_image-19657

Figure 5. Difference between sphere meshes

3.Cork 

Cork是一個小巧的用於網格布爾運算的開源庫(LGPL),可以從如下地址下載:

https://github.com/gilbo/cork

下面使用cork編譯出來的程序來測試下前面兩個球的網格。在Windows中可以編譯一個測試的應用程序,可以輸入命令來測試效果:

wps_clip_image-14008

Figure 6. Cork help info

將測試文件ballA.off和ballB.off復制到編譯出來的程序wincork相同的文件夾中,分別輸入以下命令來得到相應的布爾運算結果:

F:\Mesh\cork\win\wincork\>wincork -union balla.off ballb.off union.off

F:\Mesh\cork\win\wincork\>wincork -diff balla.off ballb.off diff.off

F:\Mesh\cork\win\wincork\>wincork -isct balla.off ballb.off isct.off

然后將生成的union.off、diff.off和isct.off在MeshLab中打開如下圖所示:

wps_clip_image-6071

Figure 7. Union between two sphere meshes

wps_clip_image-29249

Figure 8. Difference between two sphere meshes

wps_clip_image-7233

Figure 9. Intersection between two sphere meshes

從上面結果可以看出cork庫得到的結果網格效果好,沒有加密。

4. Conclusion

基於網格的布爾運算也是三維建模中一個基本功能,一些開源庫提供了對網格進行布爾運算的支持。如MeshLab, Cork, CGAL等。

本文通過在MeshLab和Cork中對兩個球的網格進行布爾運算,對比運算的結果,發現使用Cork得到的網格沒有加密,數據量會小一些。

由於OpenCASCADE目前的版本不支持基於網格的布爾運算,在其官網上提供了一個功能請求:https://tracker.dev.opencascade.org/view.php?id=29776

wps_clip_image-7484


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM