首页> 中国专利> 三角网格数据的布尔运算方法及其系统

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

摘要

本发明适用于几何建模技术领域,提供了一种三角网格数据的布尔运算的方法,所述方法包括如下步骤:A、对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;B、提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;C、将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。借此,本发明降低了三角网格数据的布尔运算出错的概率,提高了布尔运算的计算速度;同时在进行内外关系判断时消除了对模型封闭性的依赖。

著录项

  • 公开/公告号CN102682476A

    专利类型发明专利

  • 公开/公告日2012-09-19

    原文格式PDF

  • 申请/专利号CN201210149907.5

  • 发明设计人 叶建平;张吉帅;郭李云;张磊;

    申请日2012-05-15

  • 分类号G06T17/00;

  • 代理机构北京律诚同业知识产权代理有限公司;

  • 代理人黄韧敏

  • 地址 518000 广东省深圳市福田区福华一路98号卓越大厦九楼907

  • 入库时间 2023-12-18 08:00:51

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-11-25

    授权

    授权

  • 2013-04-17

    实质审查的生效 IPC(主分类):G06T17/00 申请日:20120515

    实质审查的生效

  • 2012-09-19

    公开

    公开

说明书

技术领域

本发明涉及几何建模技术领域,尤其涉及一种三角网格数据的布尔运算方 法及其系统。

背景技术

几何建模技术是指计算机里组织数据类型和数据结构以表示物体在空间的 形状、尺寸及位置信息。目前大量使用在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)判断每一个新局部三角网格与原局部三角网格的内外关系,实施交运算, 取原第一个三角网格之内的部分和原第二个三角网格之内的部分,拼接成要输 出的三角网格。

综上所述,本发明通过对采用三角网格表示的三维模型进行悬边、悬点消 除和重合点归并处理,获得新规整化的两个三角网格;提取包含所述新规整化 的两个三角网格的相交区域的局部三角网格;将所述局部三角网格进行碰撞检 测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的 三角网格表示的三维模型,实现了三角网格数据的快速布尔运算方法,相应的 还提供了三角网格数据的布尔运算的系统。该方法及系统在计算过程中始终消 除并避免产生悬边、悬点和重合点,从而极大降低了拓扑歧义引发计算出错的 概率;局部三角网格提取开发了局部性,有效的提高了三角网格数据的布尔运 算速度;另外,在采用最近三角形法进行内外关系判断时,提取三角形的形心 判断内外关系,可以处理仅有一个三角形的三角网格;并且采用最近三角形法 判断内外关系,消除了对原三角网格封闭性的依赖。

当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情 况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但 这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号