一种3D模型的网格化处理方法及系统转让专利

申请号 : CN201910661546.4

文献号 : CN110443891B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈旋吕成云黄书贤

申请人 : 江苏艾佳家居用品有限公司

摘要 :

本发明公开一种obj3D模型的网格化表示方法。该方法首先将obj模型的多边形面片进行网格剖分,得到obj模型的表面网格;其次,由于对于实心物体obj模型只有表面,因此再对生成的表面网格模型进行内部网格填充,使其能准确地表达一个物体所属的空间。本发明生成的网格模型可以简单地运用于物体之间的碰撞检测等。

权利要求 :

1.一种3D模型的网格化处理方法,其特征在于,包括如下步骤:

第1步,获取三维模型的obj模型数据,所述的obj模型数据是以三角面片方式表达的,所述的模型数据至少包括顶点集合坐标v以及面f;

第2步,构建三维模型的包围立方体,并在三维坐标系中分别从x,y,z三个方向作出多个平行面进行剖切,将最小包围立方体剖切为若干个次级立方体;

第3步,依次对第1步中的三角面片进行网格化处理,所述的网格化处理的步骤包括:选取三角形的最长的一条边,并在三角面片所在的平面上将这条边向着三角形的另一个顶点方向平移,将平移得到的线段与所述的最长的一条边构建一个矩形,并且这个矩形能够至少能够包围住所述的三角形;再对得到的矩形分别沿着其两条相邻的边作多条平行线,对这个矩形进行切割,形成若干个次级矩形;

第4步,遍历全部的次级矩形上的顶点,判定其是否位于次级立方体的内部,并将包含有任意一个顶点的次级立方体归类为网格化处理后的三维模型的表面。

2.根据权利要求1所述的3D模型的网格化处理方法,其特征在于,还包括:第5步,对于第4步中未被归类为三维模型的表面的次级立方体依次进行遍历,从未归类的次级立方体上任取一个点,向任意一个能够通过线段相连接的三角面片作出射线,以射线方向作为观察方向,如果三角面片的三个顶点的数据编号依次按顺时针方向,则判定未归类的次级立方体处于物体外部,如果三角面片的三个顶点的数据编号依次按逆时间方向,则判定未归类的次级立方体处于物体内部。

3.根据权利要求1所述的3D模型的网格化处理方法,其特征在于,还包括:第6步,将处于物体内部的次级立方体和第4步判定为三维模型的表面的次级立方体合并归为3D模型的空间形状集合。

4.根据权利要求1所述的3D模型的网格化处理方法,其特征在于,获取三维模型的最小包围盒,并且使第2步中的包围立方体的体积大于最小包围盒的体积;执行第5步和第6步,当3D模型的空间形状集合的体积之和大于最小包围盒的体积时,则判定所述的三维模型存在着表面缺陷,并且将第5步和第6步的操作结果取消。

5.根据权利要求1所述的3D模型的网格化处理方法,其特征在于,还包括对网格化处理的三维模型的内部进行合并立方体来达到压缩存储空间的操作。

6.一种3D模型的网格化处理系统,其特征在于,包括:

三维模型的obj模型数据模块,用于获取三维模型的obj模型数据,所述的obj模型数据是以三角面片方式表达的,所述的模型数据至少包括顶点集合坐标v以及面f;

次级立方体生成模块,用于构建三维模型的包围立方体,并在三维坐标系中分别从x,y,z三个方向作出多个平行面进行剖切,将最小包围立方体剖切为若干个次级立方体;

次级矩形构建模块,用于对三维模型的obj模型数据模块中的三角面片进行网格化处理,所述的网格化处理的步骤包括:选取三角形的最长的一条边,并在三角面片所在的平面上将这条边向着三角形的另一个顶点方向平移,将平移得到的线段与所述的最长的一条边构建一个矩形,并且这个矩形能够至少能够包围住所述的三角形;再对得到的矩形分别沿着其两条相邻的边作多条平行线,对这个矩形进行切割,形成若干个次级矩形;

三维模型的表面生成模块,用于遍历全部的次级矩形上的顶点,判定其是否位于次级立方体的内部,并将包含有任意一个顶点的次级立方体归类为网格化处理后的三维模型的表面。

7.根据权利要求6所述的3D模型的网格化处理系统,其特征在于,还包括内外部立方体判定模块,用于对于三维模型的表面生成模块中未被归类为三维模型的表面的次级立方体依次进行遍历,从未归类的次级立方体上任取一个点,向任意一个能够通过线段相连接的三角面片作出射线,以射线方向作为观察方向,如果三角面片的三个顶点的数据编号依次按顺时针方向,则判定未归类的次级立方体处于物体外部,如果三角面片的三个顶点的数据编号依次按逆时间方向,则判定未归类的次级立方体处于物体内部。

8.根据权利要求6所述的3D模型的网格化处理系统,其特征在于,还包括三维物体形成生成模块,用于将处于物体内部的次级立方体和内外部立方体判定模块判定为三维模型的表面的次级立方体合并归为3D模型的空间形状集合。

9.根据权利要求6所述的3D模型的网格化处理系统,其特征在于,模型表面缺陷判定模块,用于获取三维模型的最小包围盒,并且使次级矩形构建模块中的包围立方体的体积大于最小包围盒的体积;并将结果输入内外部立方体判定模块和三维物体形成生成模块中进行操作,当3D模型的空间形状集合的体积之和大于最小包围盒的体积时,则判定所述的三维模型存在着表面缺陷,并且将内外部立方体判定模块和三维物体形成生成模块中的操作结果取消。

10.一种计算机存储介质,其记载有可以运行权利要求1所述的3D模型的网格化处理方法的计算机程序。

说明书 :

一种3D模型的网格化处理方法及系统

技术领域

[0001] 本发明涉及一种obj3D模型的网格化表示方法,设计图形学,3D模型表示等领域。

背景技术

[0002] Obj文件是由Alias/Wavefront公司开发的三维动画软件Maya的一种数据输出类型,它定义了对象的几何和其他的一些特性。由于它的文件结构非常简单,适合在应用程序中存储和读取3D物体。
[0003] 在各种三维应用场景中,需要对三维物体做许多操作,很多时候仅依赖于obj文件等表面模型是不可行的,如在3D游戏中在物体之间进行碰撞检测操作等。
[0004] obj3D模型是一种标准的3D模型,它保存的是一些多边形的信息,如定点几何坐标、点与点如何组成线、面等,通过拼合多个多边形面片就可以构造出3D物体。尽管所述的obj模型支持三个点以上的面,但在obj模型中仅使用三角面就能准确地表达物体信息,因此本发明针对的是三角面构成的obj模型。
[0005] obj文件由文本行组成,每一行由一个关键字开头,代表该行描述的具体含义。表1中列出了obj文件中主要用到的关键字及其含义。
[0006] 表1 Obj文件的关键及其含义
[0007]
[0008] 在一个实例中,obj文件的内容如下所示:
[0009]
[0010] 以上可以看出,直接采用原始的obj3D数据会导致图像处理过程中的大量运算,对系统要求高、处理量大。因此,需要提供一种对原始obj3D模型重新进行网格化和数据压缩的方法。
[0011] 另外,在3D空间的应用中,经常需要存储3D模型来进行碰撞检测。Obj文件是一种标准的3D对象的存储格式,它通过一系列的多边形(其中使用三角面居多)表示3D对象的形状、表面特征等信息。在实际的操作过程中,为了降低存储obj文件所需的存储空间,往往只存储使用到或看得到得三角面信息,导致obj模型没有形成封闭的表面,从而在对其进行网格化过程中发生错误,最终导致碰撞检测的失败。

发明内容

[0012] 本发明的目的是:为了解决现有技术中obj3D模型中的数据量大、对系统配置要求高的问题,提供了一种基于obj3D模型数据的3D模型网格化处理方法,本方法有效地使原有的模型得到了简化并压缩了数据量。
[0013] 第一个方面,本发明对obj表面模型网格化,来适用于3D物体在空间中进行更多操作的需求。具体来说,首先将组成obj模型的三角面进行平面网格剖分以确定其所占的网格;其次,基于生成的表面网格模型对实心的物体进行内部网格填充,生成最终的网格模型。
[0014] 第二个方面,本发明还提出了一种对于缺失表面多边形的obj模型网格生成及压缩的方法。首先,将obj3D模型表达成空间网格模型,即用立方体堆砌成3D模型的表面和内部信息;其次,将堆砌的立方体的体积与原obj模型占的体积比较,判断该obj模型是否存在表面缺失的问题;最后,对于内部填充为实心的网格对象模型,在其内部寻找由多个网格立方体单元组成的最大长方体,仅保存长方体的顶点坐标已达到压缩存储空间的目的。
[0015] 技术方案是:
[0016] 一种3D模型的网格化处理方法,包括如下步骤:
[0017] 第1步,获取三维模型的obj模型数据,所述的obj模型数据是以三角面片方式表达的,所述的模型数据至少包括顶点集合坐标(v)以及面(f);
[0018] 第2步,构建三维模型的包围立方体,并在三维坐标系中分别从x,y,z三个方向作出多个平行面进行剖切,将最小包围立方体剖切为若干个次级立方体;
[0019] 第3步,依次对第1步中的三角面片进行网格化处理,所述的网格化处理的步骤包括:选取三角形的最长的一条边,并在三角面片所在的平面上将这条边向着三角形的另一个顶点方向平移,将平移得到的线段与所述的最长的一条边构建一个矩形,并且这个矩形能够至少能够包围住所述的三角形;再对得到的矩形分别沿着其两条相邻的边作多条平行线,对这个矩形进行切割,形成若干个次级矩形;
[0020] 第4步,遍历全部的次级矩形上的顶点,判定其是否位于次级立方体的内部,并将包含有任意一个顶点的次级立方体归类为网格化处理后的三维模型的表面。
[0021] 在一个实施方式中,还包括:第5步,对于第4步中未被归类为三维模型的表面的次级立方体依次进行遍历,从未归类的次级立方体上任取一个点,向任意一个能够通过线段相连接的三角面片作出射线,以射线方向作为观察方向,如果三角面片的三个顶点的数据编号依次按顺时针方向,则判定未归类的次级立方体处于物体外部,如果三角面片的三个顶点的数据编号依次按逆时间方向,则判定未归类的次级立方体处于物体内部。
[0022] 在一个实施方式中,还包括:第6步,将处于物体内部的次级立方体和第4步判定为三维模型的表面的次级立方体合并归为3D模型的空间形状集合。
[0023] 在一个实施方式中,获取三维模型的最小包围盒,并且使第2步中的包围立方体的体积大于最小包围盒的体积;执行第5步和第6步,当3D模型的空间形状集合的体积之和大于最小包围盒的体积时,则判定所述的三维模型存在着表面缺陷,并且将第5步和第6步的操作结果取消。
[0024] 在一个实施方式中,还包括对网格化处理的三维模型的内部进行合并立方体来达到压缩存储空间的操作。
[0025] 一种3D模型的网格化处理系统,包括:
[0026] 三维模型的obj模型数据模块,用于获取三维模型的obj模型数据,所述的obj模型数据是以三角面片方式表达的,所述的模型数据至少包括顶点集合坐标(v)以及面(f);
[0027] 次级立方体生成模块,用于构建三维模型的包围立方体,并在三维坐标系中分别从x,y,z三个方向作出多个平行面进行剖切,将最小包围立方体剖切为若干个次级立方体;
[0028] 次级矩形构建模块,用于对三维模型的obj模型数据模块中的三角面片进行网格化处理,所述的网格化处理的步骤包括:选取三角形的最长的一条边,并在三角面片所在的平面上将这条边向着三角形的另一个顶点方向平移,将平移得到的线段与所述的最长的一条边构建一个矩形,并且这个矩形能够至少能够包围住所述的三角形;再对得到的矩形分别沿着其两条相邻的边作多条平行线,对这个矩形进行切割,形成若干个次级矩形;
[0029] 三维模型的表面生成模块,用于遍历全部的次级矩形上的顶点,判定其是否位于次级立方体的内部,并将包含有任意一个顶点的次级立方体归类为网格化处理后的三维模型的表面。
[0030] 在一个实施方式中,还包括内外部立方体判定模块,用于对于三维模型的表面生成模块中未被归类为三维模型的表面的次级立方体依次进行遍历,从未归类的次级立方体上任取一个点,向任意一个能够通过线段相连接的三角面片作出射线,以射线方向作为观察方向,如果三角面片的三个顶点的数据编号依次按顺时针方向,则判定未归类的次级立方体处于物体外部,如果三角面片的三个顶点的数据编号依次按逆时间方向,则判定未归类的次级立方体处于物体内部。
[0031] 在一个实施方式中,还包括三维物体形成生成模块,用于将处于物体内部的次级立方体和内外部立方体判定模块判定为三维模型的表面的次级立方体合并归为3D模型的空间形状集合。
[0032] 在一个实施方式中,模型表面缺陷判定模块,用于获取三维模型的最小包围盒,并且使次级矩形构建模块中的包围立方体的体积大于最小包围盒的体积;并将结果输入内外部立方体判定模块和三维物体形成生成模块中进行操作,当3D模型的空间形状集合的体积之和大于最小包围盒的体积时,则判定所述的三维模型存在着表面缺陷,并且将内外部立方体判定模块和三维物体形成生成模块中的操作结果取消。
[0033] 一种计算机存储介质,其记载有可以运行上述的3D模型的网格化处理方法的计算机程序。
[0034] 有益效果
[0035] 本发明为表面缺失的非标准obj3D模型生成网格对象,并通过寻找内部立方体压缩网格对象的存储空间。该方法使得能够在特定的应用场景下使用非正规的obj模型完成碰撞检测等任务。本发明为表面缺失的非标准obj3D模型生成网格对象,并通过寻找内部立方体压缩网格对象的存储空间。该方法使得能够在特定的应用场景下使用非正规的obj模型完成碰撞检测等任务。

附图说明

[0036] 图1是网格化处理流程图。
[0037] 图2是玩具猫三维模型的网格化处理效果图。
[0038] 图3是最小包围立方体的网格化示意图。
[0039] 图4是三角面片的剖切示意图。
[0040] 图5是内外部判定方法示意图。
[0041] 图6是表面缺失区域处理流程图。
[0042] 图7是表面缺失的椅子的三维模型图。
[0043] 图8是物体的最小包围盒和立方体的示意图。

具体实施方式

[0044] 为了更清楚地说明本申请的实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本申请的一些示例或实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图将本申请应用于其他类似情景。应当理解,给出这些示例性实施例仅是为了使相关领域的技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。
[0045] 如本申请和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其他的步骤或元素。
[0046] 虽然本申请对根据本申请的实施例的系统中的某些系统、模块或单元做出了各种引用,然而,任何数量的不同模块可以被使用并运行在客户端和/或服务器上。所述模块仅是说明性的,并且所述系统和方法的不同方面可以使用不同模块。
[0047] 同时,本申请使用了特定词语来描述本申请的实施例。如“一个实施例”、“一实施例”、和/或“一些实施例”意指与本申请至少一个实施例相关的某一特征、结构或特点。因此,应强调并注意的是,本说明书中在不同位置两次或多次提及的“一实施例”或“一个实施例”或“一替代性实施例”并不一定是指同一实施例。此外,本申请的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。
[0048] 在本发明中,主要用到了三角面的顶点集合坐标(v)以及面(f)。
[0049] 假设obj模型的长度单位为厘米(cm),根据需求可以选择合适的网格模型粒度,如1cm为3D空间中网格(立方体)的单位边长,对于体积较大的物体,也可以选择10cm或者更大的长度作为空间中立方体的单位边长。
[0050] 如图2所示,在左侧的3D模型中,是由众多三角面片所构成,需要对这些obj文件的三角面片进行网格化处理。
[0051] 第1步,首先,需要对这个3D模型进行初步的网格处理,对这个3D模型求出其最小外接立方体(最小包围盒),然后将这个外接立方体分别从x,y,z三个方向作出多个平行面进行剖切,将这个立方体剖切为若干个小的立方体,如图3所示。相当于在图3的立方体集合的内部为图2左边的3D猫模型的三角面片集合。
[0052] 第2步,接下来,对于这个3D猫模型的每个三角面,选取其最长边,如图4所示,为这个三角形的底边为最长,沿着这个三角形的最长边进行平行移动,并得到一个矩形,使这个矩形能够至少包围住这个三角面片;然后再在这个三角面片所在的平面内,对得到的这个矩形分别沿着其两条相邻的边作多条平行线,对这个矩形进行切割,形成若干个小的矩形,得到一系列三维空间的网格点;最后,判断这些点属于哪些立方体网格(第1步得到的),则这些立方体网格的组合就能表示这个obj模型的表面模型(即这个过程相当于:将最小外包立方体进行网格划分,得到规整的立方体网格并将其标记置为0;然后通过判断三角形上的点是否属于某个小立方体网格,将其置1,所有为1的立方体网格即为我们要求的表面;本步骤的目的,就实现了将三角面片进行表面离散之后,转化为最小包围盒的小立方体的数据集合,对空间复杂数据实现了压缩和简化)。对于每个三角面,首先找出三角形的最长边,在该平面上以此边为基准在水平和垂直方向上对三角形进行网格剖分,与三角面有重叠的网格的中心点所属的立方体网格即属于物体的表面。网格粒度大小可根据物体的大小进行调整以生成特定应用场景下不同粒度的网格模型。其中网格单位长度的设置应比网格模型的粒度稍小一些。依次对所有的三角面重复上述步骤,就能得到属于obj模型的所有空间表面网格。通过对三角面片沿长边进行切割成小矩形之后,可以进一步地利用矩形的顶点归属于哪些立方体来对这个三角面片进行简化,使得三角面片的三维空间数据特征转化为由立方体的空间坐标系的数据特征,避开了复杂的三维数据集,只通过一部分立方体数据进行表达,并且最终得到的这些立方体能够有效地表达出原三角面片的整体空间形状,在保留原始形状的基础上简化了数据。
[0053] 第3步,通过判断obj模型的内部是否为实心,对第2步生成的表面网格模型进行内部填充,生成最终obj网格化模型。
[0054] 由于一些模型中,位于内部区域也存在着三角面片,而进行第1步的最小外形立方体的构建时,无法区分出这些三角面片附近的区域是否构成3D模型的内部或者外部,就例如在图2中的猫的3D模型的尾巴处,在外接立方体的构建并进行了网格化处理后,仍然无法区分出这一部分的是属于模型的内部或者外部。
[0055] 由于obj模型是表面模型,因此若物体的内部应为实心,需要对模型的内部进行网格填充,进而更准确使用网格表示物体信息。Obj模型实际上就是一个表面模型,如果模型的内部是实心的,那其内部的点就属于模型的内部;若其是空心的,则内部点实际上是模型的外部。分别从obj模型的内部和外部的点看三角面的顶点的排列顺序是不同方向的。由此可以判断模型是实心还是空心的。
[0056] 更具体地说,如图5所示,对于标准的obj模型,构成三角面的定点顺序有着一致的要求。由于obj模型三角面连接点的顺序决定了面的正反(法线的方向),三角面的点的顺序可以从obj模型的文本文件中直接读取到,而obj模型的三角面的法线均指向外部,则可以根据obj文件中三角面顶点的排列顺序确定obj模型的内部,进而进行内部填充。如图5所示,对于obj模型的同一个三角面,假设P点在obj模型的内部,则从P点看到的三角形ABC三个顶点的排列顺序A‑B‑C是顺时针的;同理,假设P’点为obj模型外部的一个点,则从该点看到的三角形顶点的排列顺序是逆时针的。因此,基于三角形顶点排列顺序的特性,根据第1步生成的表面网格模型寻找是否存在属于obj模型内部的点,如果存在,则从该点开始进行内部填充,直到内部填满为止。例如:在第1步中将最小包围盒切割为小立方体之后,并全部置0,再经过三角面片切割后的离散点位置判定之后,得到了3D模型界面处的小立方体,并将其全部置1,然后再将上述的剩余的标记为0的小立方体中进行遍历,任意取其中的一个点,从这个点向任意一个可以看见的三角面片看去,并通过三角面片的顶点排序方向,就可以实现将剩余的标记为0的小立方体判定出位置模型的内部或者是外部,并将位于内部的小立方体也全部置1;这样,通过以上的步骤就实现了将这个3D模型的内部以及表面用小立方体来进行表示,简化和压缩了数据量。
[0057] 在一个特殊的情况下,获取的obj3D模型中会存在着一部分空间缺失的情况。
[0058] 另外,本发明还提供了对表面缺失的obj3D模型网格生成及其压缩的方法。
[0059] 如图7所示,展示了表面缺失的obj3D模型的示意图。由于在obj模型的实际应用过程中,椅子坐垫的底面不会使用到且不会被看到,因此在设计该椅子的obj模型时,坐垫背面的三角面并没有完整地表示出来(换句话说,这些物件的一些区域上并没有生成三角面片,使得表面存在着缺陷;而在常规的设计中,这些表面缺陷并不会影响到视角效果,因此,在先前的设计中则被忽视),因此,采用上述的方法对这类有缺陷的模型进行网格化处理时,容易导致生成网格对象时认为椅子坐垫的底面及其延伸的空间都为obj模型的内部,从而将整个空间使用立方体进行了填充,以图中的椅子为例,填充算法会直接将椅子底面的大区域都视为内部空间进而进行了填充处理。
[0060] 因此,在本发明的改进的实施方式中,首先使用立方体将obj模型表示生成空间网格对象模型;其次,根据生成的网格对象的体积与obj模型所占体积的大小关系判断该obj模型是否存在表面缺失的情况,若存在,则只保留生成的表面网格模型以保证其有效性;最后,对于内部填充了的网格对象,在其内部寻找由立方体组成的体积较大的长方体,只保存长方体的相应顶点以达到压缩存储空间的目的。方法如图6所示。
[0061] 初步的步骤仍然如上文所述。首先,使用立方体将obj模型表示生成空间网格对象;网格立方体的边长可以根据obj模型的大小进行相应的设置,假设obj模型的长度单位为厘米(cm),则立方体的边长可以设置为2cm或者更大。
[0062] 接下来,根据生成的网格对象的体积与obj模型所占体积的大小关系判断该obj模型是否存在表面缺失的情况,若存在,则只保留生成的表面网格模型以保证其有效性;
[0063] 具体的步骤是:
[0064] 物件的体积是通过其在三维坐标系中x,y,z三个方向的最大最小值确定的。首先,对需要处理的3D模型构建出最小包围盒,然后在x,y,z三个方向上用最大值减去最小值,得到物体的最小包围盒的长宽高,并且近似定义3D模型物体的体积为最小包围盒的体积。在实际填充中,我们将物体所在的长方体的长宽高定义为比物体的最小包围盒的稍大一点,一旦存在缺陷区域,那么在进行内部空间的识别中,算法会将椅子底部的空间全部判定为是内部空间(由于底部的小立方体向上部的椅垫看去时,只能看见椅垫的内表面),算法就会将整个长方体空间全部填满,总体积自然超过了原物体的体积大小。如图8所示是最小包围盒和比最小包围盒稍大的长方体的示意图。这时利用体积大小的差异就能得知该obj模型是存在缺失的。特别的,一旦内部填充的立方体的相对位置超出了原obj模型所能到达的位置,则立刻停止内部填充,只保留表面网格对象。
[0065] 第3步,对于内部填充了的网格对象,在其内部寻找由立方体组成的体积较大的长方体,只保存长方体的相应顶点以达到压缩存储空间的目的。
[0066] 在寻找实心物体的内部长方体时,我们取物体内部靠中心的某一点,然后向前后左右四个方向扩展长方体,当遇到属于表面的立方体,则终止。
[0067] 基于以上的方法,本发明还提供了一种3D模型的网格化处理系统,包括:
[0068] 三维模型的obj模型数据模块,用于获取三维模型的obj模型数据,所述的obj模型数据是以三角面片方式表达的,所述的模型数据至少包括顶点集合坐标(v)以及面(f);
[0069] 次级立方体生成模块,用于构建三维模型的包围立方体,并在三维坐标系中分别从x,y,z三个方向作出多个平行面进行剖切,将最小包围立方体剖切为若干个次级立方体;
[0070] 次级矩形构建模块,用于对三维模型的obj模型数据模块中的三角面片进行网格化处理,所述的网格化处理的步骤包括:选取三角形的最长的一条边,并在三角面片所在的平面上将这条边向着三角形的另一个顶点方向平移,将平移得到的线段与所述的最长的一条边构建一个矩形,并且这个矩形能够至少能够包围住所述的三角形;再对得到的矩形分别沿着其两条相邻的边作多条平行线,对这个矩形进行切割,形成若干个次级矩形;
[0071] 三维模型的表面生成模块,用于遍历全部的次级矩形上的顶点,判定其是否位于次级立方体的内部,并将包含有任意一个顶点的次级立方体归类为网格化处理后的三维模型的表面。
[0072] 在一个实施方式中,还包括内外部立方体判定模块,用于对于三维模型的表面生成模块中未被归类为三维模型的表面的次级立方体依次进行遍历,从未归类的次级立方体上任取一个点,向任意一个能够通过线段相连接的三角面片作出射线,以射线方向作为观察方向,如果三角面片的三个顶点的数据编号依次按顺时针方向,则判定未归类的次级立方体处于物体外部,如果三角面片的三个顶点的数据编号依次按逆时间方向,则判定未归类的次级立方体处于物体内部。
[0073] 在一个实施方式中,还包括三维物体形成生成模块,用于将处于物体内部的次级立方体和内外部立方体判定模块判定为三维模型的表面的次级立方体合并归为3D模型的空间形状集合。
[0074] 在一个实施方式中,模型表面缺陷判定模块,用于获取三维模型的最小包围盒,并且使次级矩形构建模块中的包围立方体的体积大于最小包围盒的体积;并将结果输入内外部立方体判定模块和三维物体形成生成模块中进行操作,当3D模型的空间形状集合的体积之和大于最小包围盒的体积时,则判定所述的三维模型存在着表面缺陷,并且将内外部立方体判定模块和三维物体形成生成模块中的操作结果取消。
[0075] 本发明还提供了:一种计算机存储介质,其记载有可以运行上述的3D模型的网格化处理方法的计算机程序。
[0076] 此外,本领域技术人员可以理解,本申请的各方面可以通过若干具有可专利性的种类或情况进行说明和描述,包括任何新的和有用的工序、机器、产品或物质的组合,或对他们的任何新的和有用的改进。相应地,本申请的各个方面可以完全由硬件执行、可以完全由软件(包括固件、常驻软件、微码等)执行、也可以由硬件和软件组合执行。以上硬件或软件均可被称为“数据块”、“模块”、“引擎”、“单元”、“组件”或“系统”。此外,本申请的各方面可能表现为位于一个或多个计算机可读介质中的计算机产品,该产品包括计算机可读程序编码。
[0077] 计算机可读信号介质可能包含一个内含有计算机程序编码的传播数据信号,例如在基带上或作为载波的一部分。该传播信号可能有多种表现形式,包括电磁形式、光形式等等、或合适的组合形式。计算机可读信号介质可以是除计算机可读存储介质之外的任何计算机可读介质,该介质可以通过连接至一个指令执行系统、装置或设备以实现通讯、传播或传输供使用的程序。位于计算机可读信号介质上的程序编码可以通过任何合适的介质进行传播,包括无线电、电缆、光纤电缆、射频信号、或类似介质、或任何上述介质的组合。
[0078] 本申请各部分操作所需的计算机程序编码可以用任意一种或多种程序语言编写,包括面向对象编程语言如Java、Scala、Smalltalk、Eiffel、JADE、Emerald、C++、C#、VB.NET、Python等,常规程序化编程语言如C语言、Visual Basic、Fortran 2003、Perl、COBOL 2002、PHP、ABAP,动态编程语言如Python、Ruby和Groovy,或其他编程语言等。该程序编码可以完全在用户计算机上运行、或作为独立的软件包在用户计算机上运行、或部分在用户计算机上运行部分在远程计算机运行、或完全在远程计算机或服务器上运行。在后种情况下,远程计算机可以通过任何网络形式与用户计算机连接,比如局域网(LAN)或广域网(WAN),或连接至外部计算机(例如通过因特网),或在云计算环境中,或作为服务使用如软件即服务(SaaS)。
[0079] 此外,除非权利要求中明确说明,本申请所述处理元素和序列的顺序、数字字母的使用、或其他名称的使用,并非用于限定本申请流程和方法的顺序。尽管上述披露中通过各种示例讨论了一些目前认为有用的发明实施例,但应当理解的是,该类细节仅起到说明的目的,附加的权利要求并不仅限于披露的实施例,相反,权利要求旨在覆盖所有符合本申请实施例实质和范围的修正和等价组合。例如,虽然以上所描述的系统组件可以通过硬件设备实现,但是也可以只通过软件的解决方案得以实现,如在现有的服务器或移动设备上安装所描述的系统。