基于物体表面网格特征生成特征多面体有向距离场的方法与流程

文档序号:32003319发布日期:2022-11-02 12:05阅读:43来源:国知局

1.本发明涉及一种基于物体表面网格特征生成特征多面体的窄带三维有向距离场的方法,可运用于计算机图形学领域和数值建模领域中的三维物体变形、纹理映射、碰撞检测等。


背景技术:

2.距离场是一个标量场,表示一个给定物体的相近表面内的一定区域中所有点给到定物体的最小距离。有向距离场就是给距离带上正、负号,表示物体的外部或内部。如果点在物体的外部,则距离场的场值为正;如果点在物体的内部,则距离场的场值为负;如果点在物体表面,则距离场的场值则为0。
3.在一个给定物体的离散3d网格上想要生成一个距离场,通常可以利用蛮力算法(brtue-force algorithm)直接计算点到特定物体的最短距离:该算法逐步计算网格的每个体素到给定物体的所有距离,通过比较所有的距离值,储存其中最小的值即可。蛮力算法的缺陷在于计算时间过长、计算量过大、计算效率低,尤其当遇到复杂几何和高分辨率域情况。


技术实现要素:

4.本发明要解决的技术问题是:现有用于生成距离场的蛮力算法计算时间过长、计算量过大、计算效率低。
5.为了解决上述技术问题,本发明的技术方案是提供了一种基于物体的表面网格生成特征多面体的三维有向距离场的方法,其特征在于,包括以下步骤:第一步:从物体的stl表面网格文件三角形元素衍生的表面特征中构建特征多面体,包括以下步骤:步骤1、读取结构化的stl表面网格文件,该stl表面网格文件以逆时针方向列出了每个三角形单元面的顶点和一个向外的法向量;步骤2、基于每个三角形单元面的顶点和一个向外的法向量构建一个面对象、三个边对象和三个顶点对象,面对象、边对象和顶点对象是特征的顶点和法线的空间坐标的集合;步骤3、对面对象、边对象和顶点对象进一步处理以生成特征多面体,其中:将一个面沿法向量方向拉伸产生棱柱形状的特征多面体,同时获得对应的三维立方轴对称的边界体;将一个边对象沿与该边对象的两个顶点相邻的两个面的法向量方向拉伸产生棱柱形状的特征多面体,同时获得对应的三维立方轴对称的边界体;将一个顶点对象沿与该顶点对象相邻的所有面的法向量方向拉伸产生棱锥,并用指定的圆锥体或半球来简化该棱锥从而获得特征多面体,同时获得对应的三维立方轴对称的边界体;
第二步:从特征多面体生成窄带有向距离场采用以下两种方法中的任意一种生成窄带有向距离场,且只对边界体内的单元起作用,其中,单元为网格的每个体素:第一种方法:同时检查边界体中的每个单元,线程根据边界体的大小启动,每个线程的域坐标从边界体的极限中确定;所有的线程都平行地检查它们是否在边界体的挤压范围内,并且跟踪每个线程的坐标是否在特征多面体的拉伸面的同一侧,进而计算出在拉伸面内侧的线程与拉伸面的表面特征的距离,对于距离幅值比前一个小的线程,将结果写入内存;第二种方法、对特征多面体的表面特征进行并行化处理每个特征多面体都有一个线程,该线程在对应的边界体内的每个单元的位置进行循环浏览,决定是否将距离值写入内存;当多个线程在处理相同的域坐标时,引入串行化,若当前内存地址的记录值具有更大的幅度值,使用atomiccas方法来将一个浮点数值写入内存,一直持续到本地值被成功写入内存,或者被另一个线程写入一个更小量级的值。
6.优选地,将所有面对象、边对象和顶点对象列为数组结构。
7.优选地,步骤3中,将一个面沿法向量方向拉伸产生一个棱柱形状的特征多面同时获得对应的三维立方轴对称边界体进一步包括以下步骤:步骤101、将三角形单元三个角的顶点按用户指定的法线方向拉伸,得到一个棱柱对象;步骤102、找到棱柱对象的侧面法线,该侧面法线是由从棱柱对象内部看时,顶点的逆时针排序的交叉积所定义的,三个侧面法线和侧面的点能够用来描述棱柱对象侧面的平面;步骤103、使用两个原始顶点作为棱柱对象侧面的平面上的点;步骤104、保存原始顶点和拉伸顶点的最小坐标值和最大坐标值,这就产生了一个三维立方轴对称的边界体,其中,原始顶点为步骤1中所述顶点;步骤105、重复步骤101至步骤104,对原始顶点在翻转面法线方向的负向拉伸;步骤106、得到两个棱柱对象和与这两个棱柱对象所对应的两个三维立方轴对称的边界体。
8.优选地,步骤3中,将一个边对象沿与该边对象的两个顶点相邻的两个面的法向量方向拉伸产生棱柱形状的特征多面体,同时获得对应的三维立方轴对称的边界体包括以下步骤:步骤201、确定当前边对象是凸的、凹的还是平的:设当前三角形单元中顶点a和顶点b之间的边对用ab和ba表示,其法线分别为n1和n2,则定义一个判别式d=(ab*n1)

n2:当d》0时,当前边对象是凸的,定义为凸形边;当d《0时,当前边对象是凹的,定义为凹形边;当d=0时,当前边对象是平的,定义为平边;步骤202、对于凸形边或平边,将凸形边或平边的两个端点沿两个相邻面的原始法线方向上按指定距离拉伸,从而产生一个棱柱;棱柱的四个面由端点和向内的法线描述,同时,一个包含棱柱的三维立方轴对称的边界体也被构造出来;对于凹形边,则首先需要翻转原始法线,原始法线为步骤1中所述法向量,将凹形边的两个端点在翻转后的原始法线方向上按指定距离拉伸,从而产生一个棱柱,棱柱的四
个面由端点和向内的法线描述,同时,一个包含棱柱的三维立方轴对称的边界体也被构造出来。
9.优选地,步骤3中,对顶点对象进行处理以生成特征多面体时,基于当前顶点v的法线集合生成一个平均伪法线n
α
,对当前顶点v的所有相邻顶点vn进行测试,定义一个判别式d=vvn∙nα
,式中,vvn表示连接相邻顶点vn与当前顶点v的线:若对于所有相邻顶点vn而言,d》0,则当前顶点v是凸的,即凸形顶点;若对于所有相邻顶点vn而言,d《0,则当前顶点v是凹的,即凹形顶点;若对于所有相邻顶点vn而言,d=0,则当前顶点v是平的;在其他情况下,则当前顶点v为鞍形顶点;对于凸形顶点、凹形顶点和鞍形顶点,存储顶点坐标、伪法线和最发散的正指向法线。
10.优选地,在构造圆锥体时,圆锥体高度是自定义的最大距离。
11.优选地,步骤3中,获得由顶点对象拉伸产生的特征多面体的三维立方轴对称的边界体时,若特征多面体为圆锥体,则取圆锥体的边界体和以顶点为中心的最大距离半径的球体的交点来生成边界体。
12.优选地,在第二步中所述的第一种方法中,为每个边界体启动一个内核,且除本地坐标数据和计算的距离数据之外,每个线程都用相同的数据工作。
13.优选地,在第二步中所述的第二种方法中,在每个特征多面体上启动一个线程来循环处理所述单元,或者在每个特征多面体上启动一个线程,然后由该线程为每个单元动态地启动一个线程。
14.本发明提供的方法能够不被限制于物体几何的复杂程度和域的分辨率,利用物体的stl表面网格文件以节省计算资源,提高计算效率,缩短计算时间的方式实现有向距离场的生成。与现有技术相比,本发明具有如下优点:(1)可以通过stl表面网格文件三角形元素的表面特征构建用于生成有向距离场的特征多面体及其边界体积,可以直接使用建模文件,缩短工序;(2)通过特定算法处理特征多面体及其边界体积数据,以高效节约计算资源的方法实现窄带有向距离场的准确生成,实现存储空间和生成时间的优化并降低计算难度。
附图说明
15.图1示意了由面对象拉伸出的棱柱;图2示意了由边对象拉伸出的棱柱;图3示意了由顶点对象拉伸出的棱锥;图4示意了围脖式的情况。
具体实施方式
16.本说明书中附图所显示的大小、比例等只是示意性的,用以配合说明书所描述的内容,并非用以限定本发明的实施条件,不影响本发明所产生的功效。本说明书中所述的“上”、“下”、“内”、“外”等位置关系仅是为了方便描述,而非用以限定本发明的可实施范围,其相对关系的改变,在无实质变更技术内容下亦视为本发明的可实施范畴。
17.本发明公开的一种基于物体的表面网格生成特征多面体的三维有向距离场的方法包括以下步骤:
第一步:从物体的stl表面网格文件三角形元素衍生的表面特征中构建特征多面体。
18.步骤101、读取结构化的stl表面网格文件,该stl表面网格文件以逆时针方向列出了每个三角形单元面的顶点和一个向外的法向量,将每个顶点定义为原始顶点,法向量定义为原始法线。
19.步骤102、基于每个三角形单元面的顶点和一个向外的法向量构建一个面(face)对象、三个边(edge)对象和三个顶点(vertice)对象。面对象、边对象和顶点对象是特征的顶点和法线的空间坐标的集合。
20.步骤103、将所有面对象、边对象和顶点对象列为数组结构,数组结构中所有的x坐标后面都有所有的y坐标,依此类推。
21.步骤104、对面对象、边对象和顶点对象进一步处理以生成特征多面体。
22.特征多面体是根据底层几何的位置、极限和法向量通过拉伸来构造的。将一个面沿法向量方向拉伸会产生一个棱柱,如图1所示。边的拉伸是由两个顶点之间的线沿两个相邻面的方向拉伸出来的一个棱柱,如图2所示。顶点拉伸是由在顶点处相交的相邻面的法线而定义的一个棱锥,如图3所示。虽然由面对象和边对象拉伸出来的棱柱有已知数量的面,但由顶点拉伸形成的棱柱可以有任意的复杂性,这使得实施和工作量评估变得困难。因此,本发明实现顶点拉伸通过指定一个锥体或半球来简化。
23.棱柱是由6个点和五个面定义的。然而,为了判断一个点是否在我们想要的区域内,只需要四个侧面法线和两个点(一个面上的两个顶点或一条边的端点)。圆锥体需要一个点、一个轴向量和其侧面最偏离的法线。半球只需要一个点和一个剪裁平面。
24.下面详细描述三种对象的特征多面体拉伸方法:构建一个由面对象拉伸的特征多面体时,采用以下方法:步骤1、将三角形单元三个角的顶点按用户指定的法线方向拉伸,得到一个棱柱对象。
25.步骤2、找到棱柱对象的侧面法线,该侧面法线是由从棱柱对象内部看时,顶点的逆时针排序的交叉积所定义的。三个侧面法线和侧面的点可以用来描述棱柱对象侧面的平面。
26.步骤3、使用两个原始顶点作为棱柱对象侧面的平面上的点。
27.步骤4、保存原始顶点和拉伸顶点的最小坐标值和最大坐标值,这就产生了一个三维立方轴对称边界体,其中包含了我们希望测试是否包含在棱柱中的单元中心。
28.步骤5、重复步骤1至步骤4,对原始顶点在翻转面法线方向的负向拉伸。
29.步骤6、得到两个棱柱对象和与这两个棱柱对象所对应的两个三维立方轴对称边界体。
30.构建一个由边对象拉伸的特征多面体(通过边对象拉伸出的特征多面体是一个从线拉伸出的棱柱)时,采用以下方法:步骤1、确定当前边对象是凸的、凹的还是平的:设当前三角形单元中顶点a和顶点b之间的边对用ab和ba表示,其法线分别为n1和n2,则定义一个判别式d=(ab*n1)

n2:当d》0时,当前边对象是凸的,定义为凸形边;当d《0时,当前边对象是凹的,定义为凹形边;当d=0时,当前边对象是平的,定义为平边。
31.步骤2、对于凸形边或平边,将凸形边或平边的两个端点沿两个相邻面的原始法线方向上按指定距离拉伸,从而产生一个棱柱。棱柱的四个面由端点和向内的法线描述,其构造与由面对象拉伸出的棱柱类似。一个包含棱柱的轴对称边界体同时也被构造出来。
32.对于凹形边,则首先需要翻转原始法线,将凹形边的两个端点在翻转后的原始法线方向上按指定距离拉伸,从而产生一个棱柱。棱柱的四个面由端点和向内的法线描述,其构造与由面对象拉伸出的棱柱类似。一个包含棱柱的轴对称边界体同时也被构造出来。
33.构建一个由顶点对象拉伸的特征多面体时,采用以下方法步骤1、将顶点对象的法线按其角度进行构建。
34.步骤2、基于同一个顶点的法线集合生成一个平均伪法线n
α
,找到平均伪法线与原始法线之间的最大角度,基于最大角度来生成特征多面体的边界体。
35.步骤3、对当前顶点v的所有相邻顶点vn进行测试,看它们是否在当前顶点v和平均伪法线n
α
定义的平面的上方或下方。本发明定义一个判别式d=vvn∙nα
,式中,vvn表示连接相邻顶点vn与当前顶点v的线:若对于所有相邻顶点vn而言,d》0,则当前顶点v是凸的,即凸形顶点;若对于所有相邻顶点vn而言,d《0,则当前顶点v是凹的,即凹形顶点;若对于所有相邻顶点vn而言,d=0,则当前顶点v是平的。其他情况,则当前顶点v为鞍形顶点。
36.对于凸形顶点、凹形顶点和鞍形顶点,需要存储顶点坐标、平均伪法线和最发散的正指向法线,用于构建特征多面体的边界体。构建特征多面体的边界体时,获得最发散的正指向法线与平均伪法线的最大角度。
37.通过指定一个圆锥体或半球来简化顶点拉伸。在构造圆锥体时,圆锥体高度是自定义的最大距离。顶点的负向拉伸是由一个翻转的平均伪法线以同样的方式构建的,其中,对于鞍形顶点的负向拉伸使用一个反射的正向拉伸。
38.与拉伸出棱柱形状的特征多面体的情况类似,需要定义一个边界体。对于尖锐的拐角,可能会产生圆底非常大的锥体,如果在域的对角线上定位,则将需要一个远远超出最接近顶点的区域的大的边界体。为了避免测试不必要的许多单元,本发明取圆锥体的边界体和以顶点为中心的最大距离半径的球体的交点来生成包含圆锥体的轴对称边界体,这可以保证生成更小的边界体和以更少的单元来计算有向距离场。
39.由顶点对象拉伸形成的如图4所示的围脖形状的特征多面体,其是一个有效的可定向三角曲面,其中具有几乎相反指向法线的面在一个顶点相遇。由于所有相邻的点最终都在伪法线平面的同一侧,所以顶点被归类为凸面。然而,面法线之和所包围的空间在顶点处延伸到伪法线平面以下。同样地,鞍点经常(但不总是)具有跨越半空间以上的法线集合。
40.对于这些情况,一个简单的解决方案是只考虑指向伪法线平面同一侧的法线,作为平均法线本身。这些正向法线所约束的体积将严格小于伪正态平面上方的半空间,而伪正态平面是可以用一个圆锥体来覆盖的,由该圆锥体简化围脖形状的特征多面体。对于本发明的测试案例,这个策略填补了粗糙形状的区域,并产生了与输入表面一致的有符号的距离场。然而,一个只包括正向法线的圆锥体有可能不足以覆盖面和边缘挤压之间的空间。在这种情况下,可以在假法线方向构建一个半球体,以覆盖顶点上方的整个半空间,由该半球体简化围脖形状的特征多面体。
41.第二步:从特征多面体生成窄带有向距离场在所有的特征多面体都生成之后,就需要解决如何生成窄带有向距离场的问题。
为了获得最佳性能,本发明通过限制计算和内存事务的数量,并尽可能多地以并行方式完成计算。本发明的主要变量是域的分辨率、所需的窄带有向距离场的最大带宽和表面特征的数量。无论计算域的范围有多大,只计算所有特征多面体内单元集合的有向距离场。但这些拉伸出的特征多面体往往是重叠的。因此,为了限制哪些单元被包含在哪些特征多面体中,本发明只对边界体内的单元起作用。因此,本发明只对最有可能在任意特征多面体内的单元起作用,而测试的单元和配对的特征多面体是被限制的。本发明提出两种可实现的并行方法,如下文所述:第一种方法是同时检查边界体中的每个边界体单元。边界体的起点和终点x、y、z坐标以及域的分辨率被存储在特征多面体的数据中。边界体覆盖的边界体单元的单元数是已知的,线程根据边界体的大小启动,每个线程的域坐标可以从边界体的极限中确定。所有的线程都平行地检查它们是否在边界体的挤压范围内。声明一个布尔类型的标志变量,基于该标志变量,跟踪一个线程的坐标是否在所有特征多面体的拉伸面的同一侧。计算出在拉伸面内侧的线程与拉伸面表面特征的距离,对于距离幅值比前一个小的线程,将结果写入内存。这导致了翘曲发散,但由于对其他情况不采取任何行动,所以不会有性能上的损失。这种实现方式将为每个边界体启动一个内核,每个线程都用相同的数据工作,但他们的本地坐标数据和他们计算的距离除外。对于具有统一特征尺寸的窄带有向距离场生成对象,边界体很可能很小;对于高特征数的内核启动将占据运行时间的主要部分,导致扩展性差。
42.第二种方法是对表面特征进行并行化处理。每个拉伸形成的特征多面体都有一个线程,它在边界体内的每个边界体单元的位置进行循环浏览,决定是否将距离值写入内存。对于窄带和高特征数,边界体单元的串行遍历是相对轻量和快速的。然而,因为许多拉伸形成的特征多面体是重叠的,实现时必须确保找到最小的幅度值。对于并行计算,写入必须是原子性的,当多个线程在处理相同的域坐标时,这将引入一些串行化。如果该地址的记录值具有更大的幅度值,本发明使用atomiccas方法来将一个浮点数值写入内存。这种尝试一直持续到本地值被成功写入内存,或者被另一个线程写入一个更小的量级的值。序列化的效果取决于输入几何和线程调度,但与整体工作量相比,对运行时间的影响很小。
43.然而,考虑到在高分辨率域中具有少数特征的几何体的情况。当挤压物内的单元格数量明显高于特征数量时,在边界体内的单元格上进行循环就会影响运行时间。现提出一种通过使用上述两种方法的混合的动态并行的方法来改进性能,并提出两种选择:在每个特征多面体上启动一个线程来循环处理单元,或者在每个特征多面体上启动一个线程,然后它自己为每个单元动态地启动一个线程。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1