博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Boolean operations between triangle meshes
阅读量:6629 次
发布时间:2019-06-25

本文共 1831 字,大约阅读时间需要 6 分钟。

Boolean operations between triangle meshes

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等。本文主要就来介绍一下这两个库中的基于三角网格的布尔运算功能。

Figure 1. Boolean Operation cut between Cylinder and Torus mesh

基于网格有布尔运算主要应用于没有几何信息的模型,如游戏、3D打印中的网格模型。

2.MeshLab CSG

MeshLab中提供了网格的布尔运算功能,源码在filter_csg中。程序界面如下图所示:

Figure 2. CSG Operation in MeshLab

下图所示为两个网格球的公共部分Intersection的结果:

Figure 3. Intersection between sphere meshes

由上图可以看出,经过布尔运算后,网格变密了。

Figure 4. Union between sphere meshes

上图所示为两个网格球的合并union结果。合并后的网格也变密了。

Figure 5. Difference between sphere meshes

3.Cork 

Cork是一个小巧的用于网格布尔运算的开源库(LGPL),可以从如下地址下载:

下面使用cork编译出来的程序来测试下前面两个球的网格。在Windows中可以编译一个测试的应用程序,可以输入命令来测试效果:

Figure 6. Cork help info

将测试文件ballA.off和ballB.off复制到编译出来的程序wincork相同的文件夹中,分别输入以下命令来得到相应的布尔运算结果:

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

然后将生成的union.off、diff.off和isct.off在MeshLab中打开如下图所示:

Figure 7. Union between two sphere meshes

Figure 8. Difference between two sphere meshes

Figure 9. Intersection between two sphere meshes

从上面结果可以看出cork库得到的结果网格效果好,没有加密。

4. Conclusion

基于网格的布尔运算也是三维建模中一个基本功能,一些开源库提供了对网格进行布尔运算的支持。如MeshLab, Cork, CGAL等。

本文通过在MeshLab和Cork中对两个球的网格进行布尔运算,对比运算的结果,发现使用Cork得到的网格没有加密,数据量会小一些。

由于OpenCASCADE目前的版本不支持基于网格的布尔运算,在其官网上提供了一个功能请求:

转载于:https://www.cnblogs.com/opencascade/p/Boolean_Operations_Mesh.html

你可能感兴趣的文章
如何关闭ReSharper中的[ Use 'var' ]提示
查看>>
作用域题
查看>>
面试题9:斐波那契数列
查看>>
HDU 1695 GCD(莫比乌斯反演)
查看>>
大道至简读后感
查看>>
Openstack的nova-network的vlan模式扩展2
查看>>
Google Analytics新增页面加载时间统计功能
查看>>
动态测试
查看>>
Python学习笔记<list和tuple>
查看>>
hadoop-hdfs-整合ZK-联邦机制
查看>>
学术休假-破译密码
查看>>
IE浏览器表格内外边框不显示问题
查看>>
克利夫兰将保留詹姆斯巨幅海报 它已成总冠军象征
查看>>
PHP微信模板消息发送
查看>>
14.抽象类
查看>>
vue-pos : 子组件与子组件通讯
查看>>
停止冒泡
查看>>
Guid的生成和数据修整(去除空格和小写字符)
查看>>
3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二
查看>>
关于NSMutableDictionary setValue:value forKey:key 以及 setobject:value forkey:key 的理解
查看>>