CN102682476A - 三角网格数据的布尔运算方法及其系统 - Google Patents
三角网格数据的布尔运算方法及其系统 Download PDFInfo
- Publication number
- CN102682476A CN102682476A CN2012101499075A CN201210149907A CN102682476A CN 102682476 A CN102682476 A CN 102682476A CN 2012101499075 A CN2012101499075 A CN 2012101499075A CN 201210149907 A CN201210149907 A CN 201210149907A CN 102682476 A CN102682476 A CN 102682476A
- Authority
- CN
- China
- Prior art keywords
- triangle
- array
- new
- grid
- local
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000004364 calculation method Methods 0.000 title claims abstract description 63
- 238000000034 method Methods 0.000 claims abstract description 83
- 238000001514 detection method Methods 0.000 claims abstract description 15
- 239000003550 marker Substances 0.000 claims description 16
- 239000000725 suspension Substances 0.000 claims description 16
- 239000000284 extract Substances 0.000 claims description 13
- 238000003491 array Methods 0.000 claims description 12
- 238000012545 processing Methods 0.000 claims description 9
- 230000007850 degeneration Effects 0.000 claims description 7
- 238000010276 construction Methods 0.000 claims description 5
- 230000008030 elimination Effects 0.000 claims description 5
- 238000003379 elimination reaction Methods 0.000 claims description 5
- 238000007667 floating Methods 0.000 claims description 5
- 230000015572 biosynthetic process Effects 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 3
- 238000011960 computer-aided design Methods 0.000 description 2
- 230000002950 deficient Effects 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 238000012797 qualification Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Images
Landscapes
- Image Generation (AREA)
Abstract
本发明适用于几何建模技术领域,提供了一种三角网格数据的布尔运算的方法,所述方法包括如下步骤:A、对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;B、提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;C、将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。借此,本发明降低了三角网格数据的布尔运算出错的概率,提高了布尔运算的计算速度;同时在进行内外关系判断时消除了对模型封闭性的依赖。
Description
技术领域
本发明涉及几何建模技术领域,尤其涉及一种三角网格数据的布尔运算方法及其系统。
背景技术
几何建模技术是指计算机里组织数据类型和数据结构以表示物体在空间的形状、尺寸及位置信息。目前大量使用在3D游戏和动画,计算机辅助设计,电影特效,数字城市,地质建模,分子生物学,数字医学等领域。三维空间的几何模型简称为三维模型,主要有线框模型、表面模型和实体模型三种表示方法,其中表面模型运用最为广泛,三角网格数据是表面模型的一种常用形式。几何模型布尔运算是指对两个模型的空间信息进行并、交、差等操作以得到新的模型。在建立和处理复杂模型时,可运用布尔运算对模型进行灵活的加工和修改。
现有的商用几何建模软件有AutoCAD,SolidWorks,Maya,3dMax,UG等,都集成了三维模型布尔运算功能,但目前的布尔运算方法要求参与布尔运算的模型必须是封闭的,而且在处理大规模的模型数据时速度较慢,存在多次运算导致软件速度下降甚至出错的问题。
综上可知,现有的几何建模技术在实际使用上,显然存在不便与缺陷,所以有必要加以改进。
发明内容
针对上述的缺陷,本发明的目的在于提供一种三角网格数据的布尔运算的方法,以降低了三角网格数据的布尔运算出错的概率,提高了布尔运算的计算速度;
为了实现上述目的,本发明提供一种三角网格数据的布尔运算的方法,所述方法包括如下步骤:
A、对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;
B、提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;
C、将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。
根据所述的方法,所述步骤A包括:
A1、分别获取所述三角网格中的每个三角形的顶点数组、三角形数组以及相邻关系数组,并且分别构建两个新的三角网格;
A2、顺序访问每个所述三角形的三角形数组的拓扑单元,若已经完成全部所述三角形访问,则执行步骤A5;
若没有完成全部所述三角形访问,则取出每个所述三角形的三个顶点索引;若所述三个顶点索引中的两个或者三个顶点索引相同时,则所述拓扑单元为退化单元三角形,丢弃所述退化单元三角形,并重新开始执行所述步骤A2,顺序取出下一个拓扑单元;在所述三个顶点索引中的三个顶点索引均不相同时,则执行步骤A3;
A3、根据所述三个顶点索引在所述顶点数组获取顶点坐标,并以不重合的方式插入到新构建的顶点数组中;
A4、将所述三个顶点索引作为一个拓扑单元插入新构建的三角形数组中,并且返回所述步骤A2,顺序取出下一个拓扑单元,重新开始执行所述步骤A2;
A5、顺序访问所述新构建的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
A6、查看所述三角网格中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。
根据所述的方法,所述步骤A1包括:
A11、使用线性浮点型数组保存所述三角网格中的每个三角形的顶点坐标,获得所述三角网格的顶点数组;
A12、使用线性整数型数组保存所述三角网格的顶点索引,获得所述三角网格的三角形数组;
A13、使用二维整型数组保存所述三角网格中的每个三角形的顶点所属的三角形索引,获得所述三角网格的相邻关系数组;
A14、根据所述三角网格的顶点数组、三角形数组以及相邻关系数组分别构建两个新的三角网格。
根据所述的方法,所述步骤B包括:
B1、分别查看所述新规整化的两个三角网格的顶点数组,计算所述新规整化的两个三角网格的X、Y、Z坐标的最大值和最小值,构成两个包围盒;
B2、分别构建所述新规整化的两个三角网格的局部三角网格的顶点数组、三角形数组和相邻关系数组;
B3、分别查看所述新规整化的两个三角网格的局部三角网格的三角形数组,若其中一个所述新规整化的三角网格的三角形有一个顶点处于另一个所述新规整化的三角网格的包围盒范围内,则将所述三角形标记为应删除状态;
B4、将在所述包围盒范围内的新规整化的三角网格的三角形的顶点、拓扑单元以及相邻关系写入所述新规整化的两个三角网格的局部三角网格的顶点数据、三角形数组以及相邻关系数组中。
根据所述的方法,所述步骤C包括:
C1、采用层次包围盒树碰撞检测方法,计算出所述新规整化的两个三角网格的局部三角网格的相交三角形对,以及所述相交三角形对中的每一个三角形上的交线;
C2、将所述相交三角形对标记为应删除状态,对每一个相交三角形使用三角化方法根据其交点和三角形顶点重新生成三角形;
C3、动态构建一个或者多个新局部三角网格的顶点数组、三角形数组和相邻关系数组,以所述交线为边界,将未标记为应删除状态的所述新规整化的两个三角网格的局部三角网格数据,以及使用所述三角化方法生成的三角形写入所述新局部三角网格的数组中;
C4、判断每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系;
C5、根据判断后的所述每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系和布尔运算类型,标记需要输出的新局部三角网格的组合,并输出对应的三角网格。
根据所述的方法,在所述步骤B4中通过步骤D1~D4将在所述包围盒范围内的三角网格的三角形的顶点、拓扑单元以及相邻关系写入所述新规整化的两个三角网格的局部三角网格的顶点数据、三角形数组以及相邻关系数组中;所述步骤D1~D4为:
D1、分别根据在所述包围盒范围内的三角形的顶点的三个顶点索引在所述新规整化的两个三角网格的顶点数组获取顶点坐标,并以不重合的方式插入到所述新规整化的两个三角网格的局部三角网格的顶点数组中;
D2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述新规整化的两个三角网格的局部三角网格的三角形数组中;并且返回所述步骤D1,顺序取出下一个拓扑单元,重新开始执行所述步骤D1;
D3、顺序访问所述新规整化的两个三角网格的局部三角网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
D4、查看所述新规整化的两个三角网格的局部三角网格的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态;和/或
在所述步骤C3中通过步骤E1~E4将以交线为边界,将未标记为应删除状态的所述新规整化的两个三角网格的局部三角网格数据,以及所述三角化方法生成的三角形写入所述新局部三角网格的数组中;所述步骤E1~E4为:
E1、分别根据所述步骤C2中的所述相交三角形对和所述重新生成的三角形的顶点的三个顶点索引在所述一个或者多个新局部网格的顶点数组获取顶点坐标,并以不重合的方式插入到所述一个或者多个新局部网格的顶点数组中;
E2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述一个或者多个新局部网格的三角形数组中;并且返回所述步骤E1,顺序取出下一个拓扑单元,重新开始执行所述步骤E1;
E3、顺序访问所述一个或者多个新局部网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
E4、查看所述一个或者多个新局部网格的中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态;和/或
在所述步骤C5中通过步骤F1~F4输出对应的三角网格;所述步骤F1~F4为:
F1、分别根据所述标记需要输出的新局部三角网格的三角形的顶点的三个顶点索引在所述顶点数组获取顶点坐标,并以不重合的方式插入到所述标记需要输出的新局部三角网格的顶点数组中;
F2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述标记需要输出的新局部三角网格的三角形数组中;并且返回所述步骤F1,顺序取出下一个拓扑单元,重新开始执行所述步骤F1;
F3、顺序访问所述标记需要输出的新局部三角网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
F4、查看所述标记需要输出的新局部三角网格的中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。
根据所述的方法,在所述以不重合的方式插入到新构建的顶点数组中的步骤中,首先检测所述顶点数组中是否有重合点,所述检测方式包括查看所有顶点坐标;或者
以空间划分或者分叉树的方式查询相邻的顶点。
根据所述的方法,在所述步骤C1中取所述相交三角形对的所有交点中距离最大的两条构成所述交线;或者
在所述步骤C2中采用三角化方法的过程中,以所述三角形的边和交线作为约束条件;或者
所述步骤C4中通过射线法或者最近三角形法对所述每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系进行判断。
根据所述的方法,在通过所述最近三角形法进行所述内外关系的判断时,提取所述三角形的形心参与计算。
为了实现本发明的另一发明目的,本发明还提供了一种用于实现上述任意一项方法的三角网格数据的布尔运算的系统,所述系统包括:
归并处理模块,用于对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;
规整化模块,用于提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;
重建模块,用于将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。
本发明通过对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型,实现了三角网格数据的快速布尔运算方法,相应的还提供了三角网格数据的布尔运算的系统。该方法及系统在计算过程中始终消除并避免产生悬边、悬点和重合点,从而极大降低了拓扑歧义引发计算出错的概率;局部三角网格提取开发了局部性,有效的提高了三角网格数据的布尔运算速度;另外,在采用最近三角形法进行内外关系判断时,提取三角形的形心判断内外关系,可以处理仅有一个三角形的三角网格;并且采用最近三角形法判断内外关系,消除了对原三角网格封闭性的依赖。
附图说明
图1是本发明第一实施例提供的三角网格数据的布尔运算的系统结构示意图;
图2是本发明第二实施例提供的三角网格数据的布尔运算的方法流程图;
图3A是本发明的一个实施例提供的进行三角网格数据的布尔运算中的差运算前的三维模型示意图;
图3B是本发明的一个实施例提供的进行三角网格数据的布尔运算中的差运算后的三维模型示意图;
图4A是本发明的一个实施例提供的进行三角网格数据的布尔运算中的并运算前的三维模型示意图;
图4B是本发明的一个实施例提供的进行三角网格数据的布尔运算中的并运算后的三维模型示意图;
图5A是本发明的一个实施例提供的进行三角网格数据的布尔运算中的交运算前的三维模型示意图;
图5B是本发明的一个实施例提供的进行三角网格数据的布尔运算中的交运算后的三维模型示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
参见图1,在本发明的第一实施例中提供了三角网格数据的布尔运算的系统100,包括:
归并处理模块10,用于对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;
规整化模块20,用于提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;
重建模块30,用于将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。
在该实施例中,提供了一种三角网格数据的布尔运算的系统100,通过该系统进行三角网格数据的布尔运算,首先解决了三角网格的悬边、悬点消除和重合点归并问题,接着解决了提取包含相交区域的局部三角网格的问题,最后解决了碰撞检测计算、三角剖分、网格重构、内外关系判断和布尔运算结果三角网格拼接等问题。并且该系统可以是硬件单元或软硬件结合单元。降低了三角网格数据的布尔运算出错的概率,提高了布尔运算的计算速度;同时在进行内外关系判断时消除了对模型封闭性的依赖。
参见图2,在本发明的第二实施例中,提供了一种三角网格数据的布尔运算的方法,所述方法包括如下步骤:
步骤S201中,归并处理模块10对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;
步骤S202中,规整化模块20提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;
步骤S203中,重建模块30将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。
在该实施例提供的三角网格数据的布尔运算的方法,将悬边、悬点消除和重合点归并很大程度上降低了布尔运算出错的概率;局部三角网格提取有效加快了布尔运算的计算速度;同时提出的内外关系判断方法消除了对模型封闭性的依赖。
在本发明的第三实施例中,所述步骤S201包括:
步骤A1、分别获取所述三角网格中的每个三角形的顶点数组、三角形数组以及相邻关系数组,并且分别构建两个新的三角网格;
在该步骤中,使用线性浮点型数组保存所述三角网格中的每个三角形的顶点坐标,获得所述三角网格的顶点数组;使用线性整数型数组保存所述三角网格的顶点索引,获得所述三角网格的三角形数组;使用二维整型数组保存所述三角网格中的每个三角形的顶点所属的三角形索引,获得所述三角网格的相邻关系数组;根据所述三角网格的顶点数组、三角形数组以及相邻关系数组分别构建两个新的三角网格。
步骤A2、顺序访问每个所述三角形的三角形数组的拓扑单元,若已经完成全部所述三角形访问,则执行步骤A5;
若没有完成全部所述三角形访问,则取出每个所述三角形的三个顶点索引;若所述三个顶点索引中的两个或者三个顶点索引相同时,则所述拓扑单元为退化单元三角形,丢弃所述退化单元三角形,并重新开始执行所述步骤A2,顺序取出下一个拓扑单元;在所述三个顶点索引中的三个顶点索引均不相同时,则执行步骤A3;
步骤A3、根据所述三个顶点索引在所述顶点数组获取顶点坐标,并以不重合的方式插入到新构建的顶点数组中;在所述以不重合的方式插入到新构建的顶点数组中的步骤中,首先检测所述顶点数组中是否有重合点,所述检测方式包括查看所有顶点坐标;或者以空间划分或者分叉树的方式查询相邻的顶点。
步骤A4、将所述三个顶点索引作为一个拓扑单元插入新构建的三角形数组中,并且返回所述步骤A2,顺序取出下一个拓扑单元,重新开始执行所述步骤A2;
步骤A5、顺序访问所述新构建的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
步骤A6、查看所述三角网格中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。
在该实施例中,悬边、悬点和重合点是几何模型中常见的拓扑歧义形式。在三角网格数据中,两点构成边,三条边按统一的顺时针或逆时针次序首尾相连构成三角形,相邻三角形以共享边的形式展开成为网格。悬边是指不属于任何三角形的一条边或多条相连的边,悬点是指不属于任何边的顶点,重合点是指顶点坐标相同或坐标间的欧氏距离小于某特定值的一个或多个顶点。具体的归并处理模块10对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格的实现方法如下:
a)使用线性浮点型数组保存三角形的顶点坐标,每个顶点的x、y、z坐标分别占用连续的三个浮点数,该数组称为顶点数组;使用线性整型数组保存三角网格的顶点索引,每个三角形的顶点分别占用连续的三个整型数,成为一个拓扑单元,该数组称为三角形数组;使用二维整型数组保存顶点所属的三角形索引,其中每一行对于一个顶点的相应索引信息,该数组称为相邻关系数组。构建新的顶点数组,三角形数组和相邻关系数组,以表示一个新规整的三角网格数据。
b)顺序访问输入三角形数组的拓扑单元,若已经全部访问完成,则转e步骤。取出三个顶点索引,若其中两个或三个索引相同,则该单元保存的是退化三角形,不作处理转步骤b,否则转c步骤。
c)根据三个顶点索引去输入顶点数组获取顶点坐标,并以不重合的方式插入到新构建的顶点数组中,即先检查数组中是否存在重合点,若存在则返回该顶点索引,若不存在则作为新坐标插入。检查的方法既可以是遍历所有顶点坐标,也可以空间划分或分叉树的方式来快速查询相邻顶点。
d)若这三个顶点在新顶点数组中的索引互不相同,则把三个索引作为一个拓扑单元插入新的三角形数组中。转回步骤b,取出下一个拓扑单元重新执行,否则丢弃这三个顶点,转回步骤b,取出下一个拓扑单元重新执行该步骤b。
e)顺序访问新构建的三角形数组,根据每个拓扑单元的三个顶点索引,将三角形索引写入顶点对应的相邻关系数组行中。
f)遍历相邻关系数组,若某行没有数据,则该行对应的顶点为悬点,标记为“不可用状态”。上述步骤完成后得到两个新规整化的三角网格。
在本发明的第四实施例中,步骤S202包括:
步骤B1、分别查看所述新规整化的两个三角网格的顶点数组,计算所述新规整化的两个三角网格的X、Y、Z坐标的最大值和最小值,构成两个包围盒;
步骤B2、分别构建所述新规整化的两个三角网格的局部三角网格的顶点数组、三角形数组和相邻关系数组;
步骤B3、分别查看所述新规整化的两个三角网格的局部三角网格的三角形数组,若其中一个所述新规整化的三角网格的三角形有一个顶点处于另一个所述新规整化的三角网格的包围盒范围内,则将所述三角形标记为应删除状态;
步骤B4、将在所述包围盒范围内的三角形的顶点、拓扑单元以及相邻关系写入所述新规整化的两个三角网格的局部三角网格的顶点数据、三角形数组以及相邻关系数组中。
在所述步骤B4中通过步骤D1~D4将在所述包围盒范围内的三角形的顶点、拓扑单元以及相邻关系写入所述新规整化的两个三角网格的局部三角网格的顶点数据、三角形数组以及相邻关系数组中;所述步骤D1~D4为:
D1、分别根据在所述包围盒范围内的三角形的顶点的三个顶点索引在所述新规整化的两个三角网格的顶点数组获取顶点坐标,并以不重合的方式插入到所述新规整化的两个三角网格的局部三角网格的顶点数组中;
D2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述新规整化的两个三角网格的局部三角网格的三角形数组中;并且返回所述步骤D1,顺序取出下一个拓扑单元,重新开始执行所述步骤D1;
D3、顺序访问所述新规整化的两个三角网格的局部三角网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
D4、查看所述新规整化的两个三角网格的局部三角网格的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。
在该实施例中,提取包含相交区域的局部三角网格以参与布尔运算的两个规整化三角网格为输入,执行以下步骤:
a)分别遍历它们的顶点数组,计算出顶点x、y、z坐标的最大值和最小值,形成两个包围盒。
b)分别构建它们的局部三角网格的顶点数组,三角形数组和相邻关系数组。
c)分别遍历它们的三角形数组,若三角形有一个顶点处于对方的包围盒范围内,则把该三角形标记为“应删除状态”,并使用第三实施例中的步骤A3~A6的处理方式将该三角形的顶点、拓扑和相邻关系写入所述局部三角网格的顶点数组、三角形数组、相邻关系数组中。
在本发明的第五实施例中,步骤S203包括:
C1、采用层次包围盒树碰撞检测方法,计算出所述新规整化的两个三角网格的局部三角网格的相交三角形对,以及所述相交三角形对中的每一个三角形上的交线;
C2、将所述相交三角形对标记为应删除状态,对每一个相交三角形使用三角化方法根据其交点和三角形顶点重新生成三角形;
C3、动态构建一个或者多个新局部三角网格的顶点数组、三角形数组和相邻关系数组,以所述交线为边界,将未标记为应删除状态的所述新规整化的两个三角网格的局部三角网格数据,以及使用所述三角化方法生成的三角形写入所述新局部三角网格的数组中;
C4、判断每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系;
C5、根据判断后的所述每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系和布尔运算类型,标记需要输出的新局部三角网格的组合,并输出对应的三角网格。
在所述C3中通过步骤E1~E4将以交线为边界,将未标记为应删除状态的所述新规整化的两个三角网格的局部三角网格数据,以及所述三角化方法生成的三角形写入所述新局部三角网格的数组中;所述步骤E1~E4为:
E1、分别根据所述步骤C2中的所述相交三角形对和所述重新生成的三角形的顶点的三个顶点索引在所述一个或者多个新局部网格的顶点数组获取顶点坐标,并以不重合的方式插入到所述一个或者多个新局部网格的顶点数组中;
E2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述一个或者多个新局部网格的三角形数组中;并且返回所述步骤E1,顺序取出下一个拓扑单元,重新开始执行所述步骤E1;
E3、顺序访问所述一个或者多个新局部网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
E4、查看所述一个或者多个新局部网格的中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。
在所述C5中通过步骤F1~F4输出对应的三角网格;所述步骤F1~F4为:
F1、分别根据所述标记需要输出的新局部三角网格的三角形的顶点的三个顶点索引在所述顶点数组获取顶点坐标,并以不重合的方式插入到所述标记需要输出的新局部三角网格的顶点数组中;
F2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述标记需要输出的新局部三角网格的三角形数组中;并且返回所述步骤F1,顺序取出下一个拓扑单元,重新开始执行所述步骤F1;
F3、顺序访问所述标记需要输出的新局部三角网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
F4、查看所述标记需要输出的新局部三角网格的中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。
并且,在所述步骤C1中取所述相交三角形对的所有交点中距离最大的两条构成所述交线;在所述步骤C2中采用三角化方法的过程中,以所述三角形的边和交线作为约束条件;在所述步骤4中通过射线法或者最近三角形法对所述每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系进行判断。在通过所述最近三角形法进行所述内外关系的判断时,提取所述三角形的形心参与计算。
在该实施例中,碰撞检测计算、三角剖分、网格重构、内外关系判断和布尔运算结果三角网格拼接以上述两个局部三角网格为输入,执行以下步骤:
a)采用常见的层次包围盒树碰撞检测方法,计算出相交三角形对,与通常的碰撞检测不同的是这里还要计算出每一个三角形上的交线,本发明取所有交点中距离最大的两个构成交线。
d)将相交三角形对标记为“应删除状态”,对每一个相交三角形,使用Delaunay(三角剖分算法)三角化方法根据交点和三角形顶点重新生成三角形,若交点同时在非相交的三角形上,也应该对其做同样操作。在Delaunay三角化过程中应该以三角形的边和交线作为约束条件,从而不破坏生成三角形和相邻三角形的共享边。
e)动态构建一个或多个新局部三角网格的顶点数组,三角形数组和相邻关系数组,并使用第三实施例中的步骤A3~A6的处理方式以交线为边界,将未标记为“应删除状态”原局部三角网格数据,以及Delaunay三角化生成的三角形写入新数组中。动态构建是因为原三角网格可能被交线分割成数目不确定的新局部三角网格,仅在获得交线后才能动态确定新局部三角网格的个数。
f)判断每一个新局部三角网格的与原局部三角网格的内外关系。并且可使用传统的射线法判断内外关系,也可以使用最近三角形法。而前者要求原三角网格是封闭的,后者没有封闭性要求。在判断内外关系时,为了处理新局部三角网格仅有一个三角形的情况,可以取三角形的形心而不是顶点参与计算。
g)根据内外关系和布尔运算类型标记出要输出的新局部三角网格的组合,使用第三实施例中的步骤A3~A6的处理方式输出结果三角网格。所述布尔运算类型包括了布尔运算中的差运算、并运算以及交运算等。
参见图3A和图3B,在本发明的一个实施例中,对于一个采用两个三角网格表示的三维模型,依照下述步骤进行三角网格数据的布尔运算中的差运算:
1)通过步骤S201获得到两个新的规整化的三角网格;
2)分别计算两个规整化三角网格的包围盒,提取处于对方包围盒内的局部三角网格;
3)采用常见的层次包围盒树碰撞检测方法计算交线;
4)根据交线剖分相交三角形,并以交线为边界,动态重构出一个或多个局部三角网格;
5)判断每一个新局部三角网格与原局部三角网格的内外关系,实施差运算,取原第一个三角网格之内的部分和原第二个三角网格之外的部分,拼接成要输出的三角网格。
参见图4A和图4B,在本发明的一个实施例中,对于一个采用两个三角网格表示的三维模型,依照下述步骤进行三角网格数据的布尔运算中的并运算:
1)通过步骤S201获得到两个新的规整化的三角网格;
2)分别计算两个规整化三角网格的包围盒,提取处于对方包围盒内的局部三角网格;
3)采用常见的层次包围盒树碰撞检测方法计算交线;
4)根据交线剖分相交三角形,并以交线为边界,动态重构出一个或多个局部三角网格;
5)判断每一个新局部三角网格与原局部三角网格的内外关系,实施并运算,取原第一个三角网格之外的部分和原第二个三角网格之外的部分,拼接成要输出的三角网格。
参见图5A和图5B,在本发明的一个实施例中,对于一个采用两个三角网格表示的三维模型,依照下述步骤进行三角网格数据的布尔运算中的交运算:
1)通过步骤S201获得到两个新的规整化的三角网格;
2)分别计算两个规整化三角网格的包围盒,提取处于对方包围盒内的局部三角网格;
3)采用常见的层次包围盒树碰撞检测方法计算交线;
4)根据交线剖分相交三角形,并以交线为边界,动态重构出一个或多个局部三角网格;
5)判断每一个新局部三角网格与原局部三角网格的内外关系,实施交运算,取原第一个三角网格之内的部分和原第二个三角网格之内的部分,拼接成要输出的三角网格。
综上所述,本发明通过对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型,实现了三角网格数据的快速布尔运算方法,相应的还提供了三角网格数据的布尔运算的系统。该方法及系统在计算过程中始终消除并避免产生悬边、悬点和重合点,从而极大降低了拓扑歧义引发计算出错的概率;局部三角网格提取开发了局部性,有效的提高了三角网格数据的布尔运算速度;另外,在采用最近三角形法进行内外关系判断时,提取三角形的形心判断内外关系,可以处理仅有一个三角形的三角网格;并且采用最近三角形法判断内外关系,消除了对原三角网格封闭性的依赖。
当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
Claims (10)
1.一种三角网格数据的布尔运算的方法,其特征在于,所述方法包括如下步骤:
A、对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;
B、提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;
C、将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。
2.根据权利要求1所述的方法,其特征在于,所述步骤A包括:
A1、分别获取所述三角网格中的每个三角形的顶点数组、三角形数组以及相邻关系数组,并且分别构建两个新的三角网格;
A2、顺序访问每个所述三角形的三角形数组的拓扑单元,若已经完成全部所述三角形访问,则执行步骤A5;
若没有完成全部所述三角形访问,则取出每个所述三角形的三个顶点索引;若所述三个顶点索引中的两个或者三个顶点索引相同时,则所述拓扑单元为退化单元三角形,丢弃所述退化单元三角形,并重新开始执行所述步骤A2,顺序取出下一个拓扑单元;在所述三个顶点索引中的三个顶点索引均不相同时,则执行步骤A3;
A3、根据所述三个顶点索引在所述顶点数组获取顶点坐标,并以不重合的方式插入到新构建的顶点数组中;
A4、将所述三个顶点索引作为一个拓扑单元插入新构建的三角形数组中,并且返回所述步骤A2,顺序取出下一个拓扑单元,重新开始执行所述步骤A2;
A5、顺序访问所述新构建的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
A6、查看所述三角网格中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。
3.根据权利要求2所述的方法,其特征在于,所述步骤A1包括:
A11、使用线性浮点型数组保存所述三角网格中的每个三角形的顶点坐标,获得所述三角网格的顶点数组;
A12、使用线性整数型数组保存所述三角网格的顶点索引,获得所述三角网格的三角形数组;
A13、使用二维整型数组保存所述三角网格中的每个三角形的顶点所属的三角形索引,获得所述三角网格的相邻关系数组;
A14、根据所述三角网格的顶点数组、三角形数组以及相邻关系数组分别构建两个新的三角网格。
4.根据权利要求2所述的方法,其特征在于,所述步骤B包括:
B1、分别查看所述新规整化的两个三角网格的顶点数组,计算所述新规整化的两个三角网格的X、Y、Z坐标的最大值和最小值,构成两个包围盒;
B2、分别构建所述新规整化的两个三角网格的局部三角网格的顶点数组、三角形数组和相邻关系数组;
B3、分别查看所述新规整化的两个三角网格的局部三角网格的三角形数组,若其中一个所述新规整化的三角网格的三角形有一个顶点处于另一个所述新规整化的三角网格的包围盒范围内,则将所述三角形标记为应删除状态;
B4、将在所述包围盒范围内的三角形的顶点、拓扑单元以及相邻关系写入所述新规整化的两个三角网格的局部三角网格的顶点数据、三角形数组以及相邻关系数组中。
5.根据权利要求4所述的方法,其特征在于,所述步骤C包括:
C1、采用层次包围盒树碰撞检测方法,计算出所述新规整化的两个三角网格的局部三角网格的相交三角形对,以及所述相交三角形对中的每一个三角形上的交线;
C2、将所述相交三角形对标记为应删除状态,对每一个相交三角形使用三角化方法根据其交点和三角形顶点重新生成三角形;
C3、动态构建一个或者多个新局部三角网格的顶点数组、三角形数组和相邻关系数组,以所述交线为边界,将未标记为应删除状态的所述新规整化的两个三角网格的局部三角网格数据,以及使用所述三角化方法生成的三角形写入所述新局部三角网格的数组中;
C4、判断每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系;
C5、根据判断后的所述每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系和布尔运算类型,标记需要输出的新局部三角网格的组合,并输出对应的三角网格。
6.根据权利要求5所述的方法,其特征在于,在所述步骤B4中通过步骤D1~D4将在所述包围盒范围内的三角形的顶点、拓扑单元以及相邻关系写入所述新规整化的两个三角网格的局部三角网格的顶点数据、三角形数组以及相邻关系数组中;所述步骤D1~D4为:
D1、分别根据在所述包围盒范围内的三角形的顶点的三个顶点索引在所述新规整化的两个三角网格的顶点数组获取顶点坐标,并以不重合的方式插入到所述新规整化的两个三角网格的局部三角网格的顶点数组中;
D2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述新规整化的两个三角网格的局部三角网格的三角形数组中;并且返回所述步骤D1,顺序取出下一个拓扑单元,重新开始执行所述步骤D1;
D3、顺序访问所述新规整化的两个三角网格的局部三角网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
D4、查看所述新规整化的两个三角网格的局部三角网格的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态;和/或
在所述步骤C3中通过步骤E1~E4将以交线为边界,将未标记为应删除状态的所述新规整化的两个三角网格的局部三角网格数据,以及所述三角化方法生成的三角形写入所述新局部三角网格的数组中;所述步骤E1~E4为:
E1、分别根据所述步骤C2中的所述相交三角形对和所述重新生成的三角形的顶点的三个顶点索引在所述一个或者多个新局部网格的顶点数组获取顶点坐标,并以不重合的方式插入到所述一个或者多个新局部网格的顶点数组中;
E2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述一个或者多个新局部网格的三角形数组中;并且返回所述步骤E1,顺序取出下一个拓扑单元,重新开始执行所述步骤E1;
E3、顺序访问所述一个或者多个新局部网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
E4、查看所述一个或者多个新局部网格的中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态;和/或
在所述步骤C5中通过步骤F1~F4输出对应的三角网格;所述步骤F1~F4为:
F1、分别根据所述标记需要输出的新局部三角网格的三角形的顶点的三个顶点索引在所述顶点数组获取顶点坐标,并以不重合的方式插入到所述标记需要输出的新局部三角网格的顶点数组中;
F2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述标记需要输出的新局部三角网格的三角形数组中;并且返回所述步骤F1,顺序取出下一个拓扑单元,重新开始执行所述步骤F1;
F3、顺序访问所述标记需要输出的新局部三角网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
F4、查看所述标记需要输出的新局部三角网格的中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。
7.根据权利要求4所述的方法,其特征在于,在所述以不重合的方式插入到新构建的顶点数组中的步骤中,首先检测所述顶点数组中是否有重合点,所述检测方式包括查看所有顶点坐标;或者
以空间划分或者分叉树的方式查询相邻的顶点。
8.根据权利要求5所述的方法,其特征在于,在所述步骤C1中取所述相交三角形对的所有交点中距离最大的两条构成所述交线;或者
在所述步骤C2中采用三角化方法的过程中,以所述三角形的边和交线作为约束条件;或者
所述步骤C4中通过射线法或者最近三角形法对所述每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系进行判断。
9.根据权利要求7述的方法,其特征在于,在通过所述最近三角形法进行所述内外关系的判断时,提取所述三角形的形心参与计算。
10.一种用于实现权利要求1~9任意一项方法的三角网格数据的布尔运算的系统,其特征在于,所述系统包括:
归并处理模块,用于对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;
规整化模块,用于提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;
重建模块,用于将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210149907.5A CN102682476B (zh) | 2012-05-15 | 2012-05-15 | 三角网格数据的布尔运算方法及其系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210149907.5A CN102682476B (zh) | 2012-05-15 | 2012-05-15 | 三角网格数据的布尔运算方法及其系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102682476A true CN102682476A (zh) | 2012-09-19 |
CN102682476B CN102682476B (zh) | 2015-11-25 |
Family
ID=46814339
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210149907.5A Active CN102682476B (zh) | 2012-05-15 | 2012-05-15 | 三角网格数据的布尔运算方法及其系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102682476B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105022865A (zh) * | 2015-06-30 | 2015-11-04 | 西安交通大学 | 一种基于stl模型布尔运算的飞机油箱内表面模型提取方法 |
CN106325211A (zh) * | 2016-11-16 | 2017-01-11 | 清华大学 | 一种基于stl模型交线环的材料去除算法 |
CN106649992A (zh) * | 2016-11-17 | 2017-05-10 | 复旦大学 | 舰船与尾迹的网格模型的融合与优化方法 |
CN108171793A (zh) * | 2018-01-19 | 2018-06-15 | 北京建筑大学 | 一种探查层叠区域三角网格的方法 |
CN109983509A (zh) * | 2016-07-12 | 2019-07-05 | 曹尚稳 | 一种使用几何面的即时布尔运算方法 |
CN110544255A (zh) * | 2019-07-26 | 2019-12-06 | 山东大学 | 面向3d打印的三角网格孔洞的分割方法及系统 |
CN113345091A (zh) * | 2020-02-18 | 2021-09-03 | 广东博智林机器人有限公司 | 一种重叠工作面的面积统计方法及装置 |
CN118967987A (zh) * | 2024-10-15 | 2024-11-15 | 山东捷瑞信息技术产业研究院有限公司 | 一种用于单一复杂模型重合点的检测方法及系统 |
CN119359960A (zh) * | 2023-11-21 | 2025-01-24 | 安徽海登堡智能科技有限公司 | 一种基于Unity3D的三维模型墙体动态处理方法、设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101510225A (zh) * | 2009-03-26 | 2009-08-19 | 山东理工大学 | 产品stl模型布尔运算方法 |
CN100583084C (zh) * | 2005-06-30 | 2010-01-20 | 微软公司 | 对程序几何对象进行三角剖分 |
-
2012
- 2012-05-15 CN CN201210149907.5A patent/CN102682476B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100583084C (zh) * | 2005-06-30 | 2010-01-20 | 微软公司 | 对程序几何对象进行三角剖分 |
CN101510225A (zh) * | 2009-03-26 | 2009-08-19 | 山东理工大学 | 产品stl模型布尔运算方法 |
Non-Patent Citations (1)
Title |
---|
兰向荣等: "基于TIN的体布尔算法及其地质应用", 《地理与地理信息科学》 * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105022865B (zh) * | 2015-06-30 | 2018-04-17 | 西安交通大学 | 一种基于stl模型布尔运算的飞机油箱内表面模型提取方法 |
CN105022865A (zh) * | 2015-06-30 | 2015-11-04 | 西安交通大学 | 一种基于stl模型布尔运算的飞机油箱内表面模型提取方法 |
CN109983509B (zh) * | 2016-07-12 | 2021-10-15 | 曹尚稳 | 一种使用几何面的即时布尔运算方法 |
CN109983509A (zh) * | 2016-07-12 | 2019-07-05 | 曹尚稳 | 一种使用几何面的即时布尔运算方法 |
CN106325211A (zh) * | 2016-11-16 | 2017-01-11 | 清华大学 | 一种基于stl模型交线环的材料去除算法 |
CN106649992B (zh) * | 2016-11-17 | 2020-05-12 | 复旦大学 | 舰船与尾迹的网格模型的融合与优化方法 |
CN106649992A (zh) * | 2016-11-17 | 2017-05-10 | 复旦大学 | 舰船与尾迹的网格模型的融合与优化方法 |
CN108171793B (zh) * | 2018-01-19 | 2021-10-15 | 北京建筑大学 | 一种探查层叠区域三角网格的方法 |
CN108171793A (zh) * | 2018-01-19 | 2018-06-15 | 北京建筑大学 | 一种探查层叠区域三角网格的方法 |
CN110544255A (zh) * | 2019-07-26 | 2019-12-06 | 山东大学 | 面向3d打印的三角网格孔洞的分割方法及系统 |
CN113345091A (zh) * | 2020-02-18 | 2021-09-03 | 广东博智林机器人有限公司 | 一种重叠工作面的面积统计方法及装置 |
CN119359960A (zh) * | 2023-11-21 | 2025-01-24 | 安徽海登堡智能科技有限公司 | 一种基于Unity3D的三维模型墙体动态处理方法、设备及存储介质 |
CN118967987A (zh) * | 2024-10-15 | 2024-11-15 | 山东捷瑞信息技术产业研究院有限公司 | 一种用于单一复杂模型重合点的检测方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102682476B (zh) | 2015-11-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102682476A (zh) | 三角网格数据的布尔运算方法及其系统 | |
US12260488B2 (en) | Methods and graphics processing units for determining differential data for rays of a ray bundle | |
JP6513914B2 (ja) | 3次元シーンにおいて第1のポイントと第2のポイントとを結ぶパス設計 | |
CN102298795B (zh) | 一种快速成型工艺中零件的stl三角网格模型的三维分段方法 | |
Kim et al. | Quasi-triangulation and interworld data structure in three dimensions | |
CN101976468B (zh) | 一种多分辨率动态地形可视化方法及系统 | |
CN102609982B (zh) | 空间地质数据非结构化模式的拓扑发现方法 | |
Zhao et al. | Mathematical morphology-based generalization of complex 3D building models incorporating semantic relationships | |
US8600713B2 (en) | Method of online building-model reconstruction using photogrammetric mapping system | |
CN103413297A (zh) | 基于一体化三维gis模型的切割方法 | |
CN103440683B (zh) | 一种基于三维散乱稠密点云的三角网格重构方法 | |
CN102737407A (zh) | 三角网格数据的拟合优化的方法及其系统 | |
CN104574505A (zh) | 一种三维管线自动连通建模方法 | |
CN114359226B (zh) | 基于分层叠加和区域增长的三维模型组可视面积提取方法 | |
CN108717729A (zh) | 一种面向虚拟地球的地形多尺度tin在线可视化方法 | |
CN104809760B (zh) | 基于深度优先策略的地理空间三维外轮廓自动构建方法 | |
CN104182571A (zh) | 基于Delaunay和GPU的Kriging插值方法 | |
Xie et al. | A semantics-constrained profiling approach to complex 3D city models | |
CN105468375A (zh) | 一种面向面结构光点云数据的对应点搜索结构的构建方法 | |
Guo et al. | Line-based 3d building abstraction and polygonal surface reconstruction from images | |
CN105469355A (zh) | 基于城市三维模型提取2.5维地图建筑物轮廓的方法 | |
CN103425806A (zh) | 三次元编程产品模拟系统及方法 | |
CN104090945A (zh) | 一种地理空间实体构建方法及系统 | |
CN113971718B (zh) | 一种对三维点云模型进行布尔运算的方法 | |
CN101609565A (zh) | 基于L-Rep模型的三维实体布尔运算方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |