1.前言
三维布尔运算是几何内核的核心算法之一,博主前述文章中提到过布尔算法有多种,可以根据几何数据表达方式分为Brep布尔运算、CSG布尔运算、网格布尔运算等,而网格布尔运算又又多种,如BSP方式、八叉树方式,详细可参考博主文章。
2.特点比较
不同方式的布尔运算有其特点,其适应的几何数据表达方式不一样,同时带来的效果也不一样,当然也有优缺点。
2.1 Brep布尔运算
比较轻量,数据结构轻量,运算逻辑简便,结果数据简便,是一种使用范围较广的算法方案,但其也有我们不能忽略的特点:
- 轻量,无论是数据还是算法效率;
- 专业性强,对应处理Brep方式表达的几何数据,而实际工程中往往有很多网格化的数据或CSG方式数据,则无法处理。如OCC库不能进行网格化几何数据的布尔运算;
- 技术难度较高,对于曲面构件(如Nurbs曲面)需要进行曲面相交等复杂计算,计算方式可以采用统一nurbs表达的或转化为nurbs数据结构进行计算,也可以枚举曲面类型进行组合算法实现,不论采用哪种方式,其技术难度较高;
2.2 CSG布尔运算
数据比较重,CSG方式表达数据结构本身就比较重,因为要存储实体产生过程的中间实体信息;但其计算方式相对简单,基本的几何实体类型数量有限,且可以对应实现,
- 数据较重,由于计算方式的简单特点,导致复杂造型的实体布尔操作要较多的组合串联基本运算来实现,这种方式有重(数据重、计算过程逻辑组合串联重)有轻(实现基本的实体类型运算),特点明显;
- 同Brep方式一样,专业性较强;
2.3 网格布尔运算
2.3.1 BSP方式
BSP方式逻辑简单暴力,效率较低,会产生大量的零碎三角面,且对数据规范性要求较高,适用性较差,实际工程数据来源多,很难保证完全提供符合其要求的数据,不建议采用这种方式;
2.3.2 八叉树(OctTree)方式
逻辑简便,可以针对数据情况来调整八叉树的深度,以便提高效率;这种方式适用性较强,因为不论是何种方式表达的几何数据均可以转为网格数据,进而进行网格布尔运算;
- 逻辑简便,比较轻量;可以通过自适应八叉树深度来优化效率,同时结果数据的数据量不会庞大,注意也没有BSP方式的轻;
- 适用性强,可以处理各种来源和表达方式的几何数据(通过处理为网格方式);
- 由于结果数据是网格化的,难以还原原始的参数化信息,是其明显的特点,需要根据实际场景进行分析;
3. 总结
可以根据实际场景进行布尔运算方式的选择,需要考虑效果、效率、适应性、技术难度、几何数据表达方式等因素。当然也可以直接采用已有的几何内核,专注于应用开发,将应用做好做广,也是一种很好的选择。