一种基于BSP树的布尔运算方法及系统与流程

文档序号:32426884发布日期:2022-12-03 00:06阅读:224来源:国知局
一种基于BSP树的布尔运算方法及系统与流程
一种基于bsp树的布尔运算方法及系统
技术领域
1.本发明涉及计算机图形学技术领域,特别是涉及一种基于bsp树的布尔运算方法及系统。


背景技术:

2.在三维设计软件中建立三维模型时,三维模型是由基本体元之间进行交集、并集、差集三种布尔运算得到的,两个三维模型进行布尔运算可以得到一个具有更复杂形状的三维模型,而一个具有实际设计和使用意义的三维模型往往都具有复杂的特征形状。因此,对两个三维模型进行布尔运算是为了得到一个具有更多特征和更复杂形状的三维模型。但是在航空航天领域内,航天器械模型都拥有大量的特征,它们的三维网格模型都拥有庞大的三角面片集,而它们千万甚至亿级的面片集数量降低了运算的效率。在航天器械中,一般会有比较复杂的气体通路,在航天器械的模型中去除气体通路模型来生成气体通路(例如拉瓦尔喷嘴),这就会进行频繁的差集布尔运算。同时三维网格模型的布尔运算对运算的速度和稳定性有比较高的要求,为了加速三维网格模型的布尔运算,现有的技术体系内引入了包围体技术和空间剖分技术,而空间剖分技术加速效果较于前者更易实现。
3.bsp(binary space partitioning,二叉空间分割)树是一种空间划分方法,是对空间按照平面的“前”和“后”进行划分的二分方法。在三维空间内,任意的一个超平面会将它所处的空间区域分割成前(front)和后(back)两个子空间,对于划分后的子空间仍可以重复上述过程,选取超平面后分割空间区域,递归执行,这些超平面集合就组成了原始三维空间的一个bsp树,在三维实体三角模型中,它的表面是三角面片集包络而成,将三角面片所在的平面选为超平面来划分三维空间和实体模型,递归后可得到子空间和子模型。将三维实体的网格模型转化为bsp树后,两个实体模型间进行布尔运算就可以通过对两个实体的bsp树的合并过程来实现。而bsp树的构建过程中,超平面的选取至关重要,合理的超平面可以使建立bsp树的过程快速收敛,能够减少对网格的不必要分割。
4.基于此,亟需一种能够合理选取超平面的基于bsp树的布尔运算方法及系统。


技术实现要素:

5.本发明的目的是提供一种基于bsp树的布尔运算方法及系统,在建立bsp树的过程中合理选取超平面,能够加速bsp树的建立过程,从而进一步提高三维模型的布尔运算速度。
6.为实现上述目的,本发明提供了如下方案:
7.一种基于bsp树的布尔运算方法,所述布尔运算方法包括:
8.根据待设计的目标三维网格模型确定第一三维网格模型、第二三维网格模型和布尔运算方式;所述第一三维网格模型和所述第二三维网格模型通过所述布尔运算方式得到所述目标三维网格模型;所述布尔运算方式包括交集布尔运算、并集布尔运算和差集布尔运算;
9.获取所述第一三维网格模型的第一三角形边界面列表和第一三角形边界顶点列表;获取所述第二三维网格模型的第二三角形边界面列表和第二三角形边界顶点列表;
10.根据所述第一三角形边界面列表和所述第一三角形边界顶点列表建立所述第一三维网格模型的第一bsp树;根据所述第二三角形边界面列表和所述第二三角形边界顶点列表建立所述第二三维网格模型的第二bsp树;在建立所述第一bsp树和所述第二bsp树时,利用obb包围盒空间确定前n个超平面;
11.利用所述第一bsp树的超平面对所述第二三角形边界面列表进行划分,得到第一内面集合和第一外面集合;利用所述第二bsp树的超平面对所述第一三角形边界面列表进行划分,得到第二内面集合和第二外面集合;
12.利用所述布尔运算方式对所述第一内面集合、所述第一外面集合、所述第二内面集合和所述第二外面集合进行处理,得到所述目标三维网格模型。
13.一种基于bsp树的布尔运算系统,所述布尔运算系统包括:
14.确定模块,用于根据待设计的目标三维网格模型确定第一三维网格模型、第二三维网格模型和布尔运算方式;所述第一三维网格模型和所述第二三维网格模型通过所述布尔运算方式得到所述目标三维网格模型;所述布尔运算方式包括交集布尔运算、并集布尔运算和差集布尔运算;
15.数据获取模块,用于获取所述第一三维网格模型的第一三角形边界面列表和第一三角形边界顶点列表;获取所述第二三维网格模型的第二三角形边界面列表和第二三角形边界顶点列表;
16.bsp树建立模块,用于根据所述第一三角形边界面列表和所述第一三角形边界顶点列表建立所述第一三维网格模型的第一bsp树;根据所述第二三角形边界面列表和所述第二三角形边界顶点列表建立所述第二三维网格模型的第二bsp树;在建立所述第一bsp树和所述第二bsp树时,利用obb包围盒空间确定前n个超平面;
17.划分模块,用于利用所述第一bsp树的超平面对所述第二三角形边界面列表进行划分,得到第一内面集合和第一外面集合;利用所述第二bsp树的超平面对所述第一三角形边界面列表进行划分,得到第二内面集合和第二外面集合;
18.布尔运算模块,用于利用所述布尔运算方式对所述第一内面集合、所述第一外面集合、所述第二内面集合和所述第二外面集合进行处理,得到所述目标三维网格模型。
19.根据本发明提供的具体实施例,本发明公开了以下技术效果:
20.本发明用于提供一种基于bsp树的布尔运算方法及系统,先根据待设计的目标三维网格模型确定第一三维网格模型、第二三维网格模型和布尔运算方式,然后根据第一三角形边界面列表和第一三角形边界顶点列表建立第一三维网格模型的第一bsp树,根据第二三角形边界面列表和第二三角形边界顶点列表建立第二三维网格模型的第二bsp树,且在建立第一bsp树和第二bsp树时,利用obb包围盒空间确定前n个超平面,再利用第一bsp树的超平面对第二三角形边界面列表进行划分,得到第一内面集合和第一外面集合,利用第二bsp树的超平面对第一三角形边界面列表进行划分,得到第二内面集合和第二外面集合,最后利用布尔运算方式对第一内面集合、第一外面集合、第二内面集合和第二外面集合进行处理,得到目标三维网格模型,从而在建立bsp树的过程中合理选取超平面,能够加速bsp树的建立过程,从而进一步提高三维模型的布尔运算速度。
附图说明
21.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
22.图1为本发明实施例1所提供的布尔运算方法的方法流程图;
23.图2为本发明实施例1所提供的布尔运算方法的原理框图;
24.图3为本发明实施例1所提供的面顶点网格表示示意图;
25.图4为本发明实施例1所提供的建立bsp树的方法流程图;
26.图5为本发明实施例1所提供的obb包围盒空间的示意图;
27.图6为本发明实施例1所提供的三角形面位于超平面前面的示意图;
28.图7为本发明实施例1所提供的三角形面位于超平面后面的示意图;
29.图8为本发明实施例1所提供的三角形面横跨超平面的示意图;
30.图9为本发明实施例1所提供的超平面划分结果示意图;
31.图10为本发明实施例1所提供的多次划分后节点关系示意图;
32.图11为本发明实施例1所提供的aabb包围盒空间和obb包围盒空间的对比示意图;
33.图12为本发明实施例1所提供的布尔运算方式的示意图;
34.图13为本发明实施例1所提供的拉瓦尔喷嘴的三维网格模型和剖视图;
35.图14为本发明实施例1所提供的拉瓦尔喷嘴模型并集布尔运算的示意图;
36.图15为本发明实施例1所提供的拉瓦尔喷嘴模型差集布尔运算的示意图;
37.图16为本发明实施例2所提供的布尔运算系统的系统框图。
38.符号说明:
39.1-第一空心圆柱;2-第一空心圆台;3-第二空心圆柱;4-第二空心圆台;1-1-第一圆柱;2-1-第一圆台;3-1-第二圆柱;4-1-第二圆台;1-2-第三圆柱;2-2-第三圆台;3-2-第四圆柱;4-2-第四圆台。
具体实施方式
40.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
41.本发明的目的是提供一种基于bsp树的布尔运算方法及系统,在建立bsp树的过程中合理选取超平面,能够加速bsp树的建立过程,从而进一步提高三维模型的布尔运算速度。
42.为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
43.实施例1:
44.本实施例用于提供一种基于bsp树的布尔运算方法,如图1和图2所示,所述布尔运算方法包括:
45.s1:根据待设计的目标三维网格模型确定第一三维网格模型、第二三维网格模型和布尔运算方式;所述第一三维网格模型和所述第二三维网格模型通过所述布尔运算方式得到所述目标三维网格模型;所述布尔运算方式包括交集布尔运算、并集布尔运算和差集布尔运算;
46.s2:获取所述第一三维网格模型的第一三角形边界面列表和第一三角形边界顶点列表;获取所述第二三维网格模型的第二三角形边界面列表和第二三角形边界顶点列表;
47.多边形网格(polygon mesh)是顶点(vertices)的集合,通过边(edges)和面(faces)来定义三维物体的形状。面通常由三角形、四边形或其它的简单凸多边形组成,三角形是最简单的凸多边形,而且许多图形软件和硬件设备可以更有效地处理三角形,所以通常三维网格模型是三角形网格(triangle mesh)。在三维网格模型中,存储顶点的位置和其它(如颜色,法向矢量等)信息,将两顶点连接可组成边,一组闭合的边组成面,三角形有三条边组成面。三维网格模型有多种方式组织存储顶点、边、面的数据,其中面顶点网格(face-vertex mesh)是使用最广泛的网格表示,是现代图形软件通常接受的输入,面顶点网格将三维对象表示为一组面和一组顶点。如图3所示,对一个简单的边长为1且顶点v0位于坐标原点的立方体模型可以建立该物体模型的三角形边界面列表和三角形边界顶点列表,其中v0-v9为选取的顶点,s0-s15为将选取的顶点连线后组成的闭合的三角形面。
48.本实施例读取计算机存储器中的第一三维网格模型数据和第二三维网格模型数据,提取第一三维网格模型的第一三角形边界面列表和第一三角形边界顶点列表,提取第二三维网格模型的第二三角形边界面列表和第二三角形边界顶点列表。三角形边界面列表用于存储该三维网格模型的三角形面以及每一三角形面所包括的顶点,三角形边界顶点列表存储该三维网格模型的所有顶点,每一顶点的坐标以及每一顶点所属的面。
49.s3:根据所述第一三角形边界面列表和所述第一三角形边界顶点列表建立所述第一三维网格模型的第一bsp树;根据所述第二三角形边界面列表和所述第二三角形边界顶点列表建立所述第二三维网格模型的第二bsp树;在建立所述第一bsp树和所述第二bsp树时,利用obb包围盒空间确定前n个超平面;
50.本实施例以建立第一bsp树为例,介绍本实施例建立bsp树的过程,建立第二bsp树的方式与建立第一bsp树的方式完全相同,在此不再赘述。经过s3,可以分别建立两三维网格模型的bsp树。
51.如图4所示,根据第一三角形边界面列表和第一三角形边界顶点列表建立第一三维网格模型的第一bsp树可以包括:
52.(1)以第一三角形边界面列表作为第一初始列表;
53.(2)判断迭代次数是否大于n;
54.(3)若否,则利用obb包围盒空间确定第一初始列表的超平面,计算第一初始列表中的每一个三角形面与超平面的位置关系,并根据位置关系将第一初始列表划分为位于超平面的前面的第一子列表、位于超平面的后面的第二子列表以及与超平面共面的第三子列表;
55.其中,利用obb包围盒空间确定第一初始列表的超平面具体包括:
56.1)求取三维模型的obb包围盒空间,obb包围盒空间是一个恰好能包围三维模型的最小长方体,将待划分的空间限定到包围盒空间,可以大幅减小空间的划分工作。
57.1)可以包括:
58.将第一初始列表中的每一三角形面的顶点坐标按列排列,得到坐标矩阵。具体的,根据第一三角形边界顶点列表确定第一初始列表的所有顶点的坐标pi(xi,yi,zi),将坐标按列排列可以组成3*n的坐标矩阵v=(v1,v2,v3,

,vn),其中v1为第1个顶点的坐标,n为顶点的总个数。
59.对坐标矩阵v进行中心化,得到中心化后矩阵。具体的,对坐标矩阵v中的列向量进行中心化,vi为第i个顶点的坐标,将每个顶点的坐标的每个分量减去该分量的平均值,得到了新的中心化后矩阵v
center

60.计算中心化后矩阵v
center
的协方差矩阵。具体的,将该中心化后矩阵v
center
与它的转置矩阵相乘,并除以顶点的总个数,即可计算得到中心化后矩阵v
center
的协方差矩阵f,
61.对协方差矩阵f进行特征值分解,得到特征向量矩阵。具体的,协方差矩阵f是一个对称矩阵,将该协方差矩阵f进行特征值分解f=qλq
t
,其中λ为主对角线上是特征值的对角阵,q是协方差矩阵f的特征向量作为列向量组成的特征向量矩阵。由于协方差矩阵f是对称矩阵,则经过特征值分解后得到的特征向量矩阵q是正交矩阵。
62.选取特征向量矩阵q中的三个特征向量作为obb包围盒空间的三个坐标轴的单位方向向量。具体的,特征向量矩阵q的三个列向量即为图5所示的obb包围盒空间的三个坐标轴x
new
,y
new
,z
new
的单位方向向量。
63.2)确定超平面。
64.obb包围盒空间是长方体形状的空间,选取它的中间平面,可以很大概率上保证位于超平面两侧的三角形面数量相当,从而得到更加平衡稳定的bsp树。故选取obb包围盒空间的距离最远的两平行平面,求取它们的中间平面,将该平面作为超平面。
65.2)可以包括:
66.将第一初始列表中的所有顶点坐标分别向三个坐标轴的单位方向向量进行投影,即向坐标轴x
new
,y
new
,z
new
方向投影,得到每一顶点在三个坐标轴上的坐标。
67.对于每一坐标轴,选取所有顶点在该坐标轴上的坐标的最大值和最小值,并计算最大值和最小值的差值,得到该坐标轴对应的极差。具体的,根据所有顶点在三个坐标轴上的坐标,可以分别得到在三个坐标轴上长度的最大值与最小值坐标轴对应的极差即为该坐标轴上投影长度的极差,即该坐标轴上长度的最大值减去长度的最小值,以确定obb包围盒空间在该坐标轴上的范围长度。
68.根据三个坐标轴对应的极差计算obb包围盒空间的中心点坐标,并选取极差最大的坐标轴的单位方向向量作为超平面的方向向量,根据中心点坐标和超平面的方向向量确定第一初始列表的超平面。具体的,对于每一坐标轴,计算坐标轴对应的极差与2的比值,并计算比值与坐标轴的单位方向向量的乘积,得到坐标轴对应的坐标值,三个坐标轴对应的
坐标值即组成obb包围盒空间的中心点坐标。中心点坐标的向量表达式如下式:
[0069][0070]
特征向量矩阵q的三个列向量也是obb包围盒空间的平面的方向向量,将三个坐标轴中极差最大的单位方向向量选作超平面的方向向量,将极差除以二取平均再乘以对应坐标轴的单位方向向量,确定obb包围盒空间的中心点坐标,由obb包围盒空间的中心点坐标和超平面的方向向量,可以得到选取超平面的方程的一般式,从而确定超平面。
[0071]
(4)若是,则在第一初始列表中随机选取一三角形面作为第一初始列表的超平面,计算第一初始列表中的每一个三角形面与超平面的位置关系,并根据位置关系将第一初始列表划分为位于超平面的前面的第一子列表、位于超平面的后面的第二子列表以及与超平面共面的第三子列表;
[0072]
其中,在第一初始列表中随机选取一三角形面作为第一初始列表的超平面时,利用下述方法确定超平面的平面方程:
[0073]
在第一初始列表中随机选择一个三角形面s1作为超平面,设三角形面s1上一点坐标为(x,y,z),三角形面s1的三个顶点坐标分别为(x1,y1,z1),(x2,y2,z2),(x3,y3,z3)时,则三角形面s1的三点式方程为:
[0074][0075]
将三角形面s1的三个顶点坐标代入上述三点式方程,则可以求出三角形面s1所在平面的方程,可将其化简改写为形如ax+by+cz+d=0的平面方程一般式,a,b,c,d均为常数,其中该平面的法向量为
[0076]
基于此,无论是利用obb包围盒空间确定超平面,还是随机选取一三角形面作为超平面,均可以得到该超平面的平面方程,在三维空间中,有一个点p(p
x
,py,pz)代入平面的一般式方程,可得到a=ap
x
+bpy+cpz+d,若a》0,此点p位于平面的前面;若a=0,此点p位于该平面上,与该平面共面;若a《0,此点p位于平面的后面。本实施例后续则利用该超平面的平面方程确定三角形面与超平面的位置关系。
[0077]
具体的,计算第一初始列表中的每一个三角形面与超平面的位置关系可以包括:
[0078]
1)对于第一初始列表中的每一个三角形面,将三角形面的三个顶点坐标分别代入超平面的平面方程,得到三个方程值a1,a2,a3,方程值a=ap
x
+bpy+cpz+d,其中,a、b、c、d为超平面的平面方程ax+by+cz+d=0的参数,(p
x
,py,pz)为顶点坐标。
[0079]
2)若三个方程值均大于0,或者,三个方程值两两相乘出现乘积为0且三个方程值中的非零项均大于0,则三角形面位于超平面的前面;
[0080]
具体的,如图6所示,若a1,a2,a3全大于零(此时该三角形面的三个顶点全都位于超平面的前面),或者a1,a2,a3两两相乘出现乘积为零且非零项大于零,则该三角形面位于超平面的前面,后续将该三角形面移动到第一子列表中。
[0081]
3)若三个方程值均小于0,或者,三个方程值两两相乘出现乘积为0且三个方程值
中的非零项均小于0,则三角形面位于超平面的后面;
[0082]
具体的,如图7所示,若a1,a2,a3全小于零(此时该三角形面的三个顶点全都位于超平面的后面),或者a1,a2,a3两两相乘出现乘积为零且非零项小于零,则该三角形面位于超平面的后面,后续将该三角形面移动到第二子列表中。
[0083]
4)若三个方程值两两相乘出现乘积为0且非零项乘积均小于0,或者,三个方程值两两相乘乘积均不为0且有一非零项乘积小于0,则三角形面与超平面存在交线,根据交线将三角形面分为位于超平面的前面的第一三角形面和位于超平面的后面的第二三角形面;
[0084]
具体的,如图8所示,若a1,a2,a3两两相乘出现乘积为零且非零项乘积小于零(如图8左),或者a1,a2,a3两两相乘乘积都不为零且出现有乘积小于零(如图8右),说明该三角形面的顶点位于超平面的两侧,此时该三角形面与超平面存在交线,则需要将其拆分为两个三角形面。对于a1,a2,a3两两相乘出现乘积为零且非零项乘积小于零这一情况,拆分方式为:先求出a的值乘积为负的两顶点所连的边与超平面的交点,连接该交点与在超平面的顶点,即可将三角形面分解为两个新的三角形面,并更新三角形边界面列表。对于a1,a2,a3两两相乘乘积都不为零且出现有乘积小于零这一情况,拆分方式为:先分别求出a的值乘积为负的两顶点所连的边与超平面的交点,连接该交点与另一异边顶点,即可将三角形面分解为两个新的三角形面,并更新三角形边界面列表。经过上述处理,均可以将三角形面拆分为位于超平面的前面的第一三角形面和位于超平面的后面的第二三角形面,后续将第一三角形面移动到第一子列表,将第二三角形面移动到第二子列表。
[0085]
5)若三个方程值均等于0,则三角形面与超平面共面。
[0086]
若a1,a2,a3均为零,该三角形面在超平面中,则将其添加到与当前超平面共面的第三子列表中。
[0087]
按照上述方式划分后,如图9所示,当前的第一初始列表就被分为位于当前超平面前面的第一子列表、位于当前超平面后面的第二子列表和与当前超平面共面的第三子列表。
[0088]
(5)以第一子列表和第二子列表作为下一迭代中的第一初始列表,返回“判断迭代次数是否大于n”的步骤,直至第一子列表只包括一个三角形面时,则结束第一子列表的迭代过程,第二子列表只包括一个三角形面时,则结束第二子列表的迭代过程;
[0089]
经过第一次选取超平面进行划分后,对得到的两个新的第一子列表和第二子列表继续进行划分,迭代循环至最终的第一子列表内只有一个三角形面时停止第一子列表的迭代,最终的第二子列表内只有一个三角形面时停止第二子列表的迭代。
[0090]
(6)以第一三角形边界面列表的超平面作为根节点,将每一迭代中的第一子列表的超平面和第二子列表的超平面作为第一初始列表的超平面的叶节点,按照迭代次序依次连接各个节点得到第一bsp树。
[0091]
以第一次划分时选取的超平面作为n1根节点,而对两个新的三角形边界面表继续进行划分时选取的超平面s2、s3分别建立n2、n3两叶子节点,此次划分结束后,叶子节点进一步作为下一次迭代的根节点,依照这样的策略记录划分时使用的超平面,可以得到一棵记录了各个节点n1、n2、n3的bsp树,如图10所示,各个节点n1、n2、n3则对应着超平面s1、s2、s3,通过节点可以索引到对应的超平面。
[0092]
在建立这棵bsp树的过程中,第一三维网格模型的第一三角形边界面列表被这些
节点划分为多个集合,第一三角形边界顶点列表也被这些节点划分为多个集合。
[0093]
在建立三维网格模型的bsp树的过程中,合理的超平面选取能保证bsp树建树过程尽快的收敛结束,从而得到平衡性好的bsp树。在选取一个平面作为超平面来构造一个bsp树节点时,需要实现最终得到的bsp树左边节点和右边节点数相近才能得到一个平衡性比较好的bsp树,也就是需要保证位于超平面前方和超平面后方的三维网格平面的数量差值在较小的阈值范围内波动。为了保证选取的超平面能使最终建立的bsp树快速收敛,得到平衡的bsp树,在初始的n次超平面中选取以obb(有向包围盒)包围盒平面为基准的平面,后续的选取中则在当前三角形面列表中选择一个三角形面作为超平面。n可为3。
[0094]
现有技术中也有采用三维网格模型的aabb的包围盒平面作为超平面的选取对象,但是obb包围盒空间相比于aabb包围盒空间更加的贴合模型,选取超平面是对当前的空间进行划分,而更小的待划分空间显然更利于空间划分的目标实现。且当模型发生旋转时,旋转前后obb包围盒空间形状不变,可以同模型一起旋转,而旋转前后aabb包围盒空间形状发生了变化,需要重新求解。如图11所示,其为aabb包围盒空间和obb包围盒空间的对比图,采用obb的包围盒平面作为超平面的选取基准可以减少模型划分空间,降低建树的复杂度,模型旋转时,obb的盒空间形状保持不变,可以与模型一起进行旋转,减少了旋转后建树的难度,保持旋转前后树的一致性,采用obb的包围平面中间平面,可以使位于平面两侧的三角面片数量近似,从而使bsp树的建立过程更快的收敛,得到平衡的树。
[0095]
s4:利用所述第一bsp树的超平面对所述第二三角形边界面列表进行划分,得到第一内面集合和第一外面集合;利用所述第二bsp树的超平面对所述第一三角形边界面列表进行划分,得到第二内面集合和第二外面集合;
[0096]
s4利用两个模型的bsp树对模型互相划分,每次选用第一三维网格模型的超平面逐面去对第二三维网格模型的所有三角形边界面列表进行划分,将第二三维网格模型的三角形边界面列表中与第一三维网格模型的划分的三角形边界面列表位于同一超平面同侧的进行合并,将该bsp树的三角形边界面列表中只含有第一三维网格模型的三角形边界面的集合进行剪除,剪除后得到的是第二三维网格模型的三角形面以及第一三维网格模型的三角形面在第二三维网格模型内部的三角形面这两者的和,需要再减去第二三维网格模型的三角形边界面列表,从而得到第一三维网格模型在第二三维网格模型内部的三角形面的集合,以第一三维网格模型为a模型,第二三维网格模型为b模型,则可以记作第一内面集合a in b。在第一三维网格模型的三角形边界面列表中去除掉a in b,则可以得到第一三维网格模型在第二三维网格模型外部的三角形面的集合,记做a out b,此时第一三维网格模型被划分为在第二三维网格模型内部和外部的两部分集合。同理,选用第二三维网格模型的超平面逐面去对第一三维网格模型的三角形边界面列表进行划分、合并和剪除后,可以得到b in a和b out a,此时第二三维网格模型被划分为在第一三维网格模型内部和外部的两部分集合。
[0097]
具体的,s4中,利用第一bsp树的超平面对第二三角形边界面列表进行划分,得到第一内面集合和第一外面集合可以包括:
[0098]
(1)选取第一bsp树的根节点对应的超平面作为初始超平面,以第二三角形边界面列表作为第二初始列表;
[0099]
(2)利用初始超平面对第二初始列表进行划分,得到位于初始超平面的前面的第
四子列表、位于初始超平面的后面的第五子列表以及与初始超平面共面的第六子列表;
[0100]
此时,依照s3的(4)中计算超平面和三角形面的位置关系的方式,进行初始超平面对第二初始列表的划分过程。
[0101]
(3)将第四子列表和利用初始超平面划分得到的第一子列表进行合并,得到第一合并列表;将第五子列表和利用初始超平面划分得到的第二子列表进行合并,得到第二合并列表;
[0102]
(4)判断第一合并列表是否与第一子列表相同,若是,则删除第一合并列表,结束第一合并列表的迭代过程,若否,则以第一合并列表作为下一迭代中的第二初始列表,以第一子列表的超平面作为下一迭代中的初始超平面,返回“利用初始超平面对第二初始列表进行划分”的步骤,直至第一子列表不具有超平面;
[0103]
(5)判断第二合并列表是否与第二子列表相同,若是,则删除第二合并列表,结束第二合并列表的迭代过程,若否,则以第二合并列表作为下一迭代中的第二初始列表,以第二子列表的超平面作为下一迭代中的初始超平面,返回“利用初始超平面对第二初始列表进行划分”的步骤,直至第二子列表不具有超平面;
[0104]
(6)将最后一次迭代得到的第一合并列表和第二合并列表合并,得到合并后列表,并在所述合并后列表中去除所述第二三角形边界面列表,得到第一内面集合;在所述第一三角形边界面列表中去除所述第一内面集合,得到第一外面集合。
[0105]
利用第二bsp树的超平面对第一三角形边界面列表进行划分,得到第二内面集合和第二外面集合的过程与上述过程相同,在此不再赘述。
[0106]
s5:利用所述布尔运算方式对所述第一内面集合、所述第一外面集合、所述第二内面集合和所述第二外面集合进行处理,得到所述目标三维网格模型。
[0107]
利用新的划分合并三角形边界面列表得到最终结果:
[0108][0109]
其中,∩为交集布尔运算符号,∪为并集布尔运算符号,-为差集布尔运算符号,将第一内面集合a in b和第二内面集合b in a合并就可得到a∩b,将第一外面集合a out b和第二外面集合b out a合并可得到a∪b,将第一外面集合a out b和第二内面集合b in a合并可得到a-b。
[0110]
如图12所示,图12的两个部分相交的三维网格球模型分别为第一三维网格模型a和第二三维网格模型b,用两个圆的圆弧来表示第一三维网格模型a和第二三维网格模型b的三角面集合。将第一内面集合a in b和第二内面集合b ina合并就可得到a∩b,将第一外面集合a out b和第二外面集合b out a合并可得到a∪b,将第一外面集合a out b和第二内面集合b in a合并可得到a-b。
[0111]
则s5可以包括:
[0112]
(1)若布尔运算方式为交集布尔运算,则计算第一内面集合和第二内面集合的和,得到目标三维网格模型;
[0113]
(2)若布尔运算方式为并集布尔运算,则计算第一外面集合和第二外面集合的和,
得到目标三维网格模型;
[0114]
(3)若布尔运算方式为差集布尔运算,则计算第一外面集合和第二内面集合的和,得到目标三维网格模型。
[0115]
本实施例的方法可应用但不限于汽车、航天航空等机械设计领域,本实施例选取一航天航空器械作为例子进行具体说明:
[0116]
在三维设计软件中设计航天器械过程中,以火箭发动机中常见的拉瓦尔喷嘴为例,它的原理模型如图13,它是由第一空心圆柱1,第一空心圆台2,第二空心圆柱3,第二空心圆台4这四个部分组成,首先如图14所示,第一圆柱1-1、第一圆台2-1、第二圆柱3-1、第二圆台4-1进行并集布尔运算可以得到拉瓦尔喷嘴外壳模型,第三圆柱1-2、第三圆台2-2、第四圆柱3-2、第四圆台4-2进行并集布尔运算可以得到气体通道模型,将两个模型合成一个模型时就进行并集布尔运算。如图15所示,拉瓦尔喷嘴外壳模型和气体通道模型进行差集布尔运算可以得到拉瓦尔喷嘴模型。
[0117]
在图14的第一圆柱1-1和第一圆台2-1进行并集布尔运算时,需要将两个模型的交面上的三角形去除,从而保证得到的是一个可以通过它们三角形的法向量判断内部和外部的逻辑正确的模型,在第一圆柱1-1在第一圆台2-1外部部分的三角形面列表和第一圆台2-1在第一圆柱1-1外部部分的三角形面列表合并,从而得到第一圆柱1-1和第一圆台2-1并集布尔运算的模型的三角形边界面列表。
[0118]
在图15中的拉瓦尔喷嘴外壳模型和气体通道模型进行差集布尔运算,需要保留边界面的三角形,将拉瓦尔喷嘴外壳模型在气体通道模型中外部的三角形边界面列表和气体通道模型在拉瓦尔喷嘴外壳模型内部的三角形边界面列表合并,就可得到拉瓦尔喷嘴外壳模型和气体通道模型进行差集布尔运算的结果模型的三角形边界面列表。
[0119]
本实施例用于提供一种基于bsp树的布尔运算方法,在建立bsp树的过程中采用obb包围盒进行超平面划分,以此加速模型划分,提高运算速度。
[0120]
实施例2:
[0121]
本实施例用于提供一种基于bsp树的布尔运算系统,如图16所示,所述布尔运算系统包括:
[0122]
确定模块m1,用于根据待设计的目标三维网格模型确定第一三维网格模型、第二三维网格模型和布尔运算方式;所述第一三维网格模型和所述第二三维网格模型通过所述布尔运算方式得到所述目标三维网格模型;所述布尔运算方式包括交集布尔运算、并集布尔运算和差集布尔运算;
[0123]
数据获取模块m2,用于获取所述第一三维网格模型的第一三角形边界面列表和第一三角形边界顶点列表;获取所述第二三维网格模型的第二三角形边界面列表和第二三角形边界顶点列表;
[0124]
bsp树建立模块m3,用于根据所述第一三角形边界面列表和所述第一三角形边界顶点列表建立所述第一三维网格模型的第一bsp树;根据所述第二三角形边界面列表和所述第二三角形边界顶点列表建立所述第二三维网格模型的第二bsp树;在建立所述第一bsp树和所述第二bsp树时,利用obb包围盒空间确定前n个超平面;
[0125]
划分模块m4,用于利用所述第一bsp树的超平面对所述第二三角形边界面列表进行划分,得到第一内面集合和第一外面集合;利用所述第二bsp树的超平面对所述第一三角
形边界面列表进行划分,得到第二内面集合和第二外面集合;
[0126]
布尔运算模块m5,用于利用所述布尔运算方式对所述第一内面集合、所述第一外面集合、所述第二内面集合和所述第二外面集合进行处理,得到所述目标三维网格模型。
[0127]
本说明书中每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0128]
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1