三角网格数据的布尔运算方法及其系统的制作方法

文档序号:6369671阅读:419来源:国知局
专利名称:三角网格数据的布尔运算方法及其系统的制作方法
技术领域
本发明涉及几何建模技术领域,尤其涉及ー种三角网格数据的布尔运算方法及其系统。
背景技术
几何建模技术是指计算机里组织数据类型和数据结构以表示物体在空间的形状、尺寸及位置信息。目前大量使用在3D游戏和动画,计算机辅助设计,电影特效,数字城市,地质建模,分子生物学,数字医学等领域。三维空间的几何模型简称为三维模型,主要有线框模型、表面模型和实体模型三种表示方法,其中表面模型运用最为广泛,三角网格数据是表面模型的ー种常用形式。几何模型布尔运算是指对两个模型的空间信息进行并、交、差等操作以得到新的模型。在建立和处理复杂模型时,可运用布尔运算对模型进行灵活的加工 和修改。现有的商用几何建模软件有AutoCAD, Solidfforks, Maya, 3dMax, UG等,都集成了三维模型布尔运算功能,但目前的布尔运算方法要求參与布尔运算的模型必须是封闭的,而且在处理大規模的模型数据时速度较慢,存在多次运算导致软件速度下降甚至出错的问题。综上可知,现有的几何建模技术在实际使用上,显然存在不便与缺陷,所以有必要加以改进。

发明内容
针对上述的缺陷,本发明的目的在于提供ー种三角网格数据的布尔运算的方法,以降低了三角网格数据的布尔运算出错的概率,提高了布尔运算的计算速度;为了实现上述目的,本发明提供ー种三角网格数据的布尔运算的方法,所述方法包括如下步骤A、对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;B、提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;C、将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。根据所述的方法,所述步骤A包括Al、分别获取所述三角网格中的每个三角形的顶点数组、三角形数组以及相邻关系数组,并且分别构建两个新的三角网格;A2、顺序访问每个所述三角形的三角形数组的拓扑单元,若已经完成全部所述三角形访问,则执行步骤A5;若没有完成全部所述三角形访问,则取出每个所述三角形的三个顶点索引;若所述三个顶点索引中的两个或者三个顶点索引相同时,则所述拓扑单元为退化単元三角形,丢弃所述退化単元三角形,并重新开始执行所述步骤A2,顺序取出下一个拓扑単元;在所述三个顶点索引中的三个顶点索引均不相同时,则执行步骤A3 ;A3、根据所述三个顶点索引在所述顶点数组获取顶点坐标,并以不重合的方式插入到新构建的顶点数组中;A4、将所述三个顶点索引作为ー个拓扑单元插入新构建的三角形数组中,并且返回所述步骤A2,顺序取出下一个拓扑単元,重新开始执行所述步骤A2 ;A5、顺序访问所述新构建的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;A6、查看所述三角网格中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。
根据所述的方法,所述步骤Al包括All、使用线性浮点型数组保存所述三角网格中的每个三角形的顶点坐标,获得所述三角网格的顶点数组;A12、使用线性整数型数组保存所述三角网格的顶点索引,获得所述三角网格的三角形数组;A13、使用ニ维整型数组保存所述三角网格中的每个三角形的顶点所属的三角形索引,获得所述三角网格的相邻关系数组;A14、根据所述三角网格的顶点数组、三角形数组以及相邻关系数组分别构建两个新的三角网格。根据所述的方法,所述步骤B包括BI、分别查看所述新规整化的两个三角网格的顶点数组,计算所述新规整化的两个三角网格的X、Y、Z坐标的最大值和最小值,构成两个包围盒;B2、分别构建所述新规整化的两个三角网格的局部三角网格的顶点数组、三角形数组和相邻关系数组;B3、分别查看所述新规整化的两个三角网格的局部三角网格的三角形数组,若其中一个所述新规整化的三角网格的三角形有一个顶点处于另一个所述新规整化的三角网格的包围盒范围内,则将所述三角形标记为应删除状态;B4、将在所述包围盒范围内的新规整化的三角网格的三角形的顶点、拓扑单元以及相邻关系写入所述新规整化的两个三角网格的局部三角网格的顶点数据、三角形数组以及相邻关系数组中。根据所述的方法,所述步骤C包括Cl、采用层次包围盒树碰撞检测方法,计算出所述新规整化的两个三角网格的局部三角网格的相交三角形对,以及所述相交三角形对中的每ー个三角形上的交线;C2、将所述相交三角形对标记为应删除状态,对每一个相交三角形使用三角化方法根据其交点和三角形顶点重新生成三角形;C3、动态构建一个或者多个新局部三角网格的顶点数组、三角形数组和相邻关系数组,以所述交线为边界,将未标记为应删除状态的所述新规整化的两个三角网格的局部三角网格数据,以及使用所述三角化方法生成的三角形写入所述新局部三角网格的数组中;
C4、判断每ー个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系;C5、根据判断后的所述每ー个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系和布尔运算类型,标记需要输出的新局部三角网格的组合,并输出对应的三角网格。
根据所述的方法,在所述步骤B4中通过步骤Df D4将在所述包围盒范围内的三角网格的三角形的顶点、拓扑单元以及相邻关系写入所述新规整化的两个三角网格的局部三角网格的顶点数据、三角形数组以及相邻关系数组中;所述步骤DfD4为D1、分别根据在所述包围盒范围内的三角形的顶点的三个顶点索引在所述新规整化的两个三角网格的顶点数组获取顶点坐标,并以不重合的方式插入到所述新规整化的两个三角网格的局部三角网格的顶点数组中;D2、在所述三个顶点索引中的三个顶点索引均不相同吋,将所述三个顶点索引作为ー个拓扑单元插入所述新规整化的两个三角网格的局部三角网格的三角形数组中;并且返回所述步骤D1,顺序取出下一个拓扑単元,重新开始执行所述步骤Dl ;D3、顺序访问所述新规整化的两个三角网格的局部三角网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;D4、查看所述新规整化的两个三角网格的局部三角网格的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态;和/或在所述步骤C3中通过步骤Ef E4将以交线为边界,将未标记为应删除状态的所述新规整化的两个三角网格的局部三角网格数据,以及所述三角化方法生成的三角形写入所述新局部三角网格的数组中;所述步骤EfE4为El、分别根据所述步骤C2中的所述相交三角形对和所述重新生成的三角形的顶点的三个顶点索引在所述ー个或者多个新局部网格的顶点数组获取顶点坐标,并以不重合的方式插入到所述ー个或者多个新局部网格的顶点数组中;E2、在所述三个顶点索引中的三个顶点索引均不相同吋,将所述三个顶点索引作为ー个拓扑单元插入所述ー个或者多个新局部网格的三角形数组中;并且返回所述步骤E1,顺序取出下一个拓扑単元,重新开始执行所述步骤El ;E3、顺序访问所述一个或者多个新局部网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;E4、查看所述ー个或者多个新局部网格的中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态;和/或在所述步骤C5中通过步骤Ff F4输出对应的三角网格;所述步骤Ff F4为F1、分别根据所述标记需要输出的新局部三角网格的三角形的顶点的三个顶点索引在所述顶点数组获取顶点坐标,并以不重合的方式插入到所述标记需要输出的新局部三角网格的顶点数组中;F2、在所述三个顶点索引中的三个顶点索引均不相同吋,将所述三个顶点索引作为ー个拓扑单元插入所述标记需要输出的新局部三角网格的三角形数组中;并且返回所述步骤F1,顺序取出下一个拓扑単元,重新开始执行所述步骤Fl ;F3、顺序访问所述标记需要输出的新局部三角网格的三角形数组,根据每个拓扑単元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;F4、查看所述标记需要输出的新局部三角网格的中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。根据所述的方法,在所述以不重合的方式插入到新构建的顶点数组中的步骤中,首先检测所述顶点数组中是否有重合点,所述检测方式包括查看所有顶点坐标;或者以空间划分或者分叉树的方式查询相邻的顶点。根据所述的方法,在所述步骤Cl中取所述相交三角形对的所有交点中距离最大的两条构成所述交线;或者在所述步骤C2中采用三角化方法的过程中,以所述三角形的边和交线作为约束条件;或者
所述步骤C4中通过射线法或者最近三角形法对所述每ー个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系进行判断。根据所述的方法,在通过所述最近三角形法进行所述内外关系的判断时,提取所述三角形的形心參与计算。为了实现本发明的另ー发明目的,本发明还提供了ー种用于实现上述任意ー项方法的三角网格数据的布尔运算的系统,所述系统包括归并处理模块,用于对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;规整化模块,用于提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;重建模块,用于将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。本发明通过对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型,实现了三角网格数据的快速布尔运算方法,相应的还提供了三角网格数据的布尔运算的系统。该方法及系统在计算过程中始終消除并避免产生悬边、悬点和重合点,从而极大降低了拓扑歧义引发计算出错的概率;局部三角网格提取开发了局部性,有效的提高了三角网格数据的布尔运算速度 ’另夕卜,在采用最近三角形法进行内外关系判断时,提取三角形的形心判断内外关系,可以处理仅有ー个三角形的三角网格;并且采用最近三角形法判断内外关系,消除了对原三角网格封闭性的依赖。


图I是本发明第一实施例提供的三角网格数据的布尔运算的系统结构示意图;图2是本发明第二实施例提供的三角网格数据的布尔运算的方法流程图;图3A是本发明的一个实施例提供的进行三角网格数据的布尔运算中的差运算前的三维模型示意图;图3B是本发明的一个实施例提供的进行三角网格数据的布尔运算中的差运算后的三维模型示意图;图4A是本发明的一个实施例提供的进行三角网格数据的布尔运算中的并运算前的三维模型示意图;图4B是本发明的一个实施例提供的进行三角网格数据的布尔运算中的并运算后的三维模型示意图;图5A是本发明的一个实施例提供的进行三角网格数据的布尔运算中的交运算前的三维模型示意图;
图5B是本发明的一个实施例提供的进行三角网格数据的布尔运算中的交运算后的三维模型示意图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进ー步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。參见图1,在本发明的第一实施例中提供了三角网格数据的布尔运算的系统100,包括归并处理模块10,用于对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;规整化模块20,用于提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;重建模块30,用于将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。在该实施例中,提供了ー种三角网格数据的布尔运算的系统100,通过该系统进行三角网格数据的布尔运算,首先解决了三角网格的悬边、悬点消除和重合点归并问题,接着解决了提取包含相交区域的局部三角网格的问题,最后解决了碰撞检测计算、三角剖分、网格重构、内外关系判断和布尔运算结果三角网格拼接等问题。并且该系统可以是硬件単元或软硬件结合单元。降低了三角网格数据的布尔运算出错的概率,提高了布尔运算的计算速度;同时在进行内外关系判断时消除了对模型封闭性的依赖。參见图2,在本发明的第二实施例中,提供了ー种三角网格数据的布尔运算的方法,所述方法包括如下步骤步骤S201中,归并处理模块10对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;步骤S202中,规整化模块20提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;步骤S203中,重建模块30将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。在该实施例提供的三角网格数据的布尔运算的方法,将悬边、悬点消除和重合点归并很大程度上降低了布尔运算出错的概率;局部三角网格提取有效加快了布尔运算的计算速度;同时提出的内外关系判断方法消除了对模型封闭性的依赖。
在本发明的第三实施例中,所述步骤S201包括步骤Al、分别获取所述三角网格中的每个三角形的顶点数组、三角形数组以及相邻关系数组,并且分别构建两个新的三角网格;在该步骤中,使用线性浮点型数组保存所述三角网格中的每个三角形的顶点坐标,获得所述三角网格的顶点数组;使用线性整数型数组保存所述三角网格的顶点索引,获得所述三角网格的三角形数组;使用ニ维整型数组保存所述三角网格中的每个三角形的顶点所属的三角形索引,获得所述三角网格的相邻关系数组;根据所述三角网格的顶点数组、三角形数组以及相邻关系数组分别构建两个新的三角网格。步骤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包括步骤BI、分别查看所述新规整化的两个三角网格的顶点数组,计算所述新规整化的两个三角网格的X、Y、Z坐标的最大值和最小值,构成两个包围盒;步骤B2、分别构建所述新规整化的两个三角网格的局部三角网格的顶点数组、三角形数组和相邻关系数组;步骤B3、分别查看所述新规整化的两个三角网格的局部三角网格的三角形数组,若其中一个所述新规整化的三角网格的三角形有一个顶点处于另一个所述新规整化的三角网格的包围盒范围内,则将所述三角形标记为应删除状态;步骤B4、将在所述包围盒范围内的三角形的顶点、拓扑单元以及相邻关系写入所述新规整化的两个三角网格的局部三角网格的顶点数据、三角形数组以及相邻关系数组中。在所述步骤B4中通过步骤D1 D4将在所述包围盒范围内的三角形的顶点、拓扑单元以及相邻关系写入所述新规整化的两个三角网格的局部三角网格的顶点数据、三角形数组以及相邻关系数组中;所述步骤DfD4为D1、分别根据在所述包围盒范围内的三角形的顶点的三个顶点索引在所述新规整化的两个三角网格的顶点数组获取顶点坐标,并以不重合的方式插入到所述新规整化的两个三角网格的局部三角网格的顶点数组中;D2、在所述三个顶点索引中的三个顶点索引均不相同吋,将所述三个顶点索引作为ー个拓扑单元插入所述新规整化的两个三角网格的局部三角网格的三角形数组中;并且返回所述步骤D1,顺序取出下一个拓扑単元,重新开始执行所述步骤Dl ;D3、顺序访问所述新规整化的两个三角网格的局部三角网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;D4、查看所述新规整化的两个三角网格的局部三角网格的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。在该实施例中,提取包含相交区域的局部三角网格以參与布尔运算的两个规整化三角网格为输入,执行以下步骤a)分别遍历它们的顶点数组,计算出顶点X、y、z坐标的最大值和最小值,形成两个包围盒。
b)分别构建它们的局部三角网格的顶点数组,三角形数组和相邻关系数组。c)分别遍历它们的三角形数组,若三角形有一个顶点处于对方的包围盒范围内,则把该三角形标记为“应删除状态”,并使用第三实施例中的步骤A3 A6的处理方式将该三角形的顶点、拓扑和相邻关系写入所述局部三角网格的顶点数组、三角形数组、相邻关系数组中。在本发明的第五实施例中,步骤S203包括Cl、采用层次包围盒树碰撞检测方法,计算出所述新规整化的两个三角网格的局部三角网格的相交三角形对,以及所述相交三角形对中的每ー个三角形上的交线;C2、将所述相交三角形对标记为应删除状态,对每一个相交三角形使用三角化方法根据其交点和三角形顶点重新生成三角形;
C3、动态构建一个或者多个新局部三角网格的顶点数组、三角形数组和相邻关系数组,以所述交线为边界,将未标记为应删除状态的所述新规整化的两个三角网格的局部三角网格数据,以及使用所述三角化方法生成的三角形写入所述新局部三角网格的数组中;C4、判断每ー个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系;C5、根据判断后的所述每ー个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系和布尔运算类型,标记需要输出的新局部三角网格的组合,并输出对应的三角网格。在所述C3中通过步骤Ef E4将以交线为边界,将未标记为应删除状态的所述新规整化的两个三角网格的局部三角网格数据,以及所述三角化方法生成的三角形写入所述新局部三角网格的数组中;所述步骤EfE4为El、分别根据所述步骤C2中的所述相交三角形对和所述重新生成的三角形的顶点的三个顶点索引在所述ー个或者多个新局部网格的顶点数组获取顶点坐标,并以不重合的方式插入到所述ー个或者多个新局部网格的顶点数组中;E2、在所述三个顶点索引中的三个顶点索引均不相同吋,将所述三个顶点索引作为ー个拓扑单元插入所述ー个或者多个新局部网格的三角形数组中;并且返回所述步骤E1,顺序取出下一个拓扑単元,重新开始执行所述步骤El ;E3、顺序访问所述一个或者多个新局部网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;E4、查看所述ー个或者多个新局部网格的中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。在所述C5中通过步骤Ff F4输出对应的三角网格;所述步骤Ff F4为F1、分别根据所述标记需要输出的新局部三角网格的三角形的顶点的三个顶点索引在所述顶点数组获取顶点坐标,并以不重合的方式插入到所述标记需要输出的新局部三角网格的顶点数组中;F2、在所述三个顶点索引中的三个顶点索引均不相同吋,将所述三个顶点索引作为ー个拓扑单元插入所述标记需要输出的新局部三角网格的三角形数组中;并且返回所述步骤F1,顺序取出下一个拓扑単元,重新开始执行所述步骤Fl ;
F3、顺序访问所述标记需要输出的新局部三角网格的三角形数组,根据每个拓扑単元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;F4、查看所述标记需要输出的新局部三角网格的中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。并且,在所述步骤Cl中取所述相交三角形对的所有交点中距离最大的两条构成所述交线;在所述步骤C2中采用三 角化方法的过程中,以所述三角形的边和交线作为约束条件;在所述步骤4中通过射线法或者最近三角形法对所述每ー个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系进行判断。在通过所述最近三角形法进行所述内外关系的判断时,提取所述三角形的形心參与计算。在该实施例中,碰撞检测计算、三角剖分、网格重构、内外关系判断和布尔运算结果三角网格拼接以上述两个局部三角网格为输入,执行以下步骤a)采用常见的层次包围盒树碰撞检测方法,计算出相交三角形对,与通常的碰撞检测不同的是这里还要计算出每ー个三角形上的交线,本发明取所有交点中距离最大的两个构成交线。d)将相交三角形对标记为“应删除状态”,对每一个相交三角形,使用Delaunay(三角剖分算法)三角化方法根据交点和三角形顶点重新生成三角形,若交点同时在非相交的三角形上,也应该对其做同样操作。在Delaunay三角化过程中应该以三角形的边和交线作为约束条件,从而不破坏生成三角形和相邻三角形的共享边。e)动态构建ー个或多个新局部三角网格的顶点数组,三角形数组和相邻关系数组,并使用第三实施例中的步骤A3 A6的处理方式以交线为边界,将未标记为“应删除状态”原局部三角网格数据,以及Delaunay三角化生成的三角形写入新数组中。动态构建是因为原三角网格可能被交线分割成数目不确定的新局部三角网格,仅在获得交线后才能动态确定新局部三角网格的个数。f)判断每ー个新局部三角网格的与原局部三角网格的内外关系。并且可使用传统的射线法判断内外关系,也可以使用最近三角形法。而前者要求原三角网格是封闭的,后者没有封闭性要求。在判断内外关系时,为了处理新局部三角网格仅有ー个三角形的情况,可以取三角形的形心而不是顶点參与计算。g)根据内外关系和布尔运算类型标记出要输出的新局部三角网格的组合,使用第三实施例中的步骤A3 A6的处理方式输出结果三角网格。所述布尔运算类型包括了布尔运算中的差运算、并运算以及交运算等。參见图3A和图3B,在本发明的一个实施例中,对于一个米用两个三角网格表不的三维模型,依照下述步骤进行三角网格数据的布尔运算中的差运算I)通过步骤S201获得到两个新的规整化的三角网格;2)分别计算两个规整化三角网格的包围盒,提取处于对方包围盒内的局部三角网格;3)采用常见的层次包围盒树碰撞检测方法计算交线;4)根据交线剖分相交三角形,并以交线为边界,动态重构出ー个或多个局部三角网格;5)判断每ー个新局部三角网格与原局部三角网格的内外关系,实施差运算,取原第一个三角网格之内的部分和原第二个三角网格之外的部分,拼接成要输出的三角网格。參见图4A和图4B,在本发明的一个实施例中,对于一个米用两个三角网格表不的三维模型,依照下述步骤进行三角网格数据的布尔运算中的并运算I)通过步骤S201获得到两个新的规整化的三角网格;2)分别计算两个规整化三角网格的包围盒,提取处于对方包围盒内的局部三角网格;3)采用常见的层次包围盒树碰撞检测方法计算交线;4)根据交线剖分相交三角形,并以交线为边界,动态重构出ー个或多个局部三角网格;5)判断每ー个新局部三角网格与原局部三角网格的内外关系,实施并运算,取原 第一个三角网格之外的部分和原第二个三角网格之外的部分,拼接成要输出的三角网格。參见图5A和图5B,在本发明的一个实施例中,对于一个米用两个三角网格表不的三维模型,依照下述步骤进行三角网格数据的布尔运算中的交运算I)通过步骤S201获得到两个新的规整化的三角网格;2)分别计算两个规整化三角网格的包围盒,提取处于对方包围盒内的局部三角网格;3)采用常见的层次包围盒树碰撞检测方法计算交线;4)根据交线剖分相交三角形,并以交线为边界,动态重构出ー个或多个局部三角网格;5)判断每ー个新局部三角网格与原局部三角网格的内外关系,实施交运算,取原第一个三角网格之内的部分和原第二个三角网格之内的部分,拼接成要输出的三角网格。综上所述,本发明通过对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型,实现了三角网格数据的快速布尔运算方法,相应的还提供了三角网格数据的布尔运算的系统。该方法及系统在计算过程中始終消除并避免产生悬边、悬点和重合点,从而极大降低了拓扑歧义引发计算出错的概率;局部三角网格提取开发了局部性,有效的提高了三角网格数据的布尔运算速度;另外,在采用最近三角形法进行内外关系判断时,提取三角形的形心判断内外关系,可以处理仅有ー个三角形的三角网格;并且采用最近三角形法判断内外关系,消除了对原三角网格封闭性的依赖。当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
权利要求
1.一种三角网格数据的布尔运算的方法,其特征在于,所述方法包括如下步骤 A、对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格; B、提取包含所述新规整化的两个三角网格的相交区域的局部三角网格; C、将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。
2.根据权利要求I所述的方法,其特征在于,所述步骤A包括 Al、分别获取所述三角网格中的每个三角形的顶点数组、三角形数组以及相邻关系数组,并且分别构建两个新的三角网格; A2、顺序访问每个所述三角形的三角形数组的拓扑单元,若已经完成全部所述三角形访问,则执行步骤A5; 若没有完成全部所述三角形访问,则取出每个所述三角形的三个顶点索引;若所述三个顶点索引中的两个或者三个顶点索引相同时,则所述拓扑单元为退化单元三角形,丢弃所述退化单元三角形,并重新开始执行所述步骤A2,顺序取出下一个拓扑单元;在所述三个顶点索引中的三个顶点索引均不相同时,则执行步骤A3 ; A3、根据所述三个顶点索引在所述顶点数组获取顶点坐标,并以不重合的方式插入到新构建的顶点数组中; A4、将所述三个顶点索引作为一个拓扑单元插入新构建的三角形数组中,并且返回所述步骤A2,顺序取出下一个拓扑单元,重新开始执行所述步骤A2 ; A5、顺序访问所述新构建的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中; A6、查看所述三角网格中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。
3.根据权利要求2所述的方法,其特征在于,所述步骤Al包括 All、使用线性浮点型数组保存所述三角网格中的每个三角形的顶点坐标,获得所述三角网格的顶点数组; A12、使用线性整数型数组保存所述三角网格的顶点索引,获得所述三角网格的三角形数组; A13、使用二维整型数组保存所述三角网格中的每个三角形的顶点所属的三角形索引,获得所述三角网格的相邻关系数组; A14、根据所述三角网格的顶点数组、三角形数组以及相邻关系数组分别构建两个新的二角网格。
4.根据权利要求2所述的方法,其特征在于,所述步骤B包括 BI、分别查看所述新规整化的两个三角网格的顶点数组,计算所述新规整化的两个三角网格的X、Y、Z坐标的最大值和最小值,构成两个包围盒; B2、分别构建所述新规整化的两个三角网格的局部三角网格的顶点数组、三角形数组和相邻关系数组; B3、分别查看所述新规整化的两个三角网格的局部三角网格的三角形数组,若其中一个所述新规整化的三角网格的三角形有一个顶点处于另一个所述新规整化的三角网格的包围盒范围内,则将所述三角形标记为应删除状态; B4、将在所述包围盒范围内的三角形的顶点、拓扑单元以及相邻关系写入所述新规整化的两个三角网格的局部三角网格的顶点数据、三角形数组以及相邻关系数组中。
5.根据权利要求4所述的方法,其特征在于,所述步骤C包括 Cl、采用层次包围盒树碰撞检测方法,计算出所述新规整化的两个三角网格的局部三角网格的相交三角形对,以及所述相交三角形对中的每一个三角形上的交线; C2、将所述相交三角形对标记为应删除状态,对每一个相交三角形使用三角化方法根据其交点和三角形顶点重新生成三角形; C3、动态构建一个或者多个新局部三角网格的顶点数组、三角形数组和相邻关系数组,以所述交线为边界,将未标记为应删除状态的所述新规整化的两个三角网格的局部三角网格数据,以及使用所述三角化方法生成的三角形写入所述新局部三角网格的数组中; C4、判断每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内夕卜关系; C5、根据判断后的所述每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系和布尔运算类型,标记需要输出的新局部三角网格的组合,并输出对应的三角网格。
6.根据权利要求5所述的方法,其特征在于,在所述步骤B4中通过步骤DfD4将在所述包围盒范围内的三角形的顶点、拓扑单元以及相邻关系写入所述新规整化的两个三角网格的局部三角网格的顶点数据、三角形数组以及相邻关系数组中;所述步骤DfD4为 D1、分别根据在所述包围盒范围内的三角形的顶点的三个顶点索引在所述新规整化的两个三角网格的顶点数组获取顶点坐标,并以不重合的方式插入到所述新规整化的两个三角网格的局部三角网格的顶点数组中; D2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述新规整化的两个三角网格的局部三角网格的三角形数组中;并且返回所述步骤D1,顺序取出下一个拓扑单元,重新开始执行所述步骤Dl ; D3、顺序访问所述新规整化的两个三角网格的局部三角网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中; D4、查看所述新规整化的两个三角网格的局部三角网格的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态;和/或 在所述步骤C3中通过步骤Ef E4将以交线为边界,将未标记为应删除状态的所述新规整化的两个三角网格的局部三角网格数据,以及所述三角化方法生成的三角形写入所述新局部三角网格的数组中;所述步骤EfE4为 E1、分别根据所述步骤C2中的所述相交三角形对和所述重新生成的三角形的顶点的三个顶点索引在所述一个或者多个新局部网格的顶点数组获取顶点坐标,并以不重合的方式插入到所述一个或者多个新局部网格的顶点数组中; E2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述一个或者多个新局部网格的三角形数组中;并且返回所述步骤E1,顺序取出下一个拓扑单元,重新开始执行所述步骤El ; E3、顺序访问所述一个或者多个新局部网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中; E4、查看所述一个或者多个新局部网格的中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态;和/或 在所述步骤C5中通过步骤Ff F4输出对应的三角网格;所述步骤Ff F4为 F1、分别根据所述标记需要输出的新局部三角网格的三角形的顶点的三个顶点索引在所述顶点数组获取顶点坐标,并以不重合的方式插入到所述标记需要输出的新局部三角网格的顶点数组中; F2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述标记需要输出的新局部三角网格的三角形数组中;并且返回所述步骤F1,顺序取出下一个拓扑单元,重新开始执行所述步骤Fl ; F3、顺序访问所述标记需要输出的新局部三角网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中; F4、查看所述标记需要输出的新局部三角网格的中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。
7.根据权利要求4所述的方法,其特征在于,在所述以不重合的方式插入到新构建的顶点数组中的步骤中,首先检测所述顶点数组中是否有重合点,所述检测方式包括查看所有顶点坐标;或者 以空间划分或者分叉树的方式查询相邻的顶点。
8.根据权利要求5所述的方法,其特征在于,在所述步骤Cl中取所述相交三角形对的所有交点中距离最大的两条构成所述交线;或者 在所述步骤C2中采用三角化方法的过程中,以所述三角形的边和交线作为约束条件;或者 所述步骤C4中通过射线法或者最近三角形法对所述每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系进行判断。
9.根据权利要求7述的方法,其特征在于,在通过所述最近三角形法进行所述内外关系的判断时,提取所述三角形的形心参与计算。
10.一种用于实现权利要求I、任意一项方法的三角网格数据的布尔运算的系统,其特征在于,所述系统包括 归并处理模块,用于对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格; 规整化模块,用于提取包含所述新规整化的两个三角网格的相交区域的局部三角网格; 重建模块,用于将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。
全文摘要
本发明适用于几何建模技术领域,提供了一种三角网格数据的布尔运算的方法,所述方法包括如下步骤A、对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;B、提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;C、将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。借此,本发明降低了三角网格数据的布尔运算出错的概率,提高了布尔运算的计算速度;同时在进行内外关系判断时消除了对模型封闭性的依赖。
文档编号G06T17/00GK102682476SQ20121014990
公开日2012年9月19日 申请日期2012年5月15日 优先权日2012年5月15日
发明者叶建平, 张吉帅, 张磊, 郭李云 申请人:深圳市旭东数字医学影像技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1