一种三角网格模型的处理方法、处理终端及存储介质与流程

文档序号:17071394发布日期:2019-03-08 23:20阅读:217来源:国知局
一种三角网格模型的处理方法、处理终端及存储介质与流程

本发明涉及网格模型技术领域,具体而言涉及一种三角网格模型的处理方法、处理终端及存储介质。



背景技术:

三维几何模型分为线框模型、表面模型和实体模型三种,其中,表面模型运用最为广泛,三角网格数据为表面模型的一种常见形式。三角网格数据属于一种三维数字,其相应的处理包括三维传感、网格配准、网格合并和网格优化。首先,使用三维传感器得到物体多个侧面的扫描网格,这些扫描网格包括物体表面的三维采样点和这点如何连接的拓扑信息,然后再通过网格合并成相对单一的网格模型,进一步,在对合并后的三角网格模型进行优化。

网格简化是网格优化的一种方式,网格简化就是保持原始模型特征的同时尽可能地减少模型的点、边和面的数量,使得模型更简洁。其大致可划分为顶点删除法、边折叠法三角形折叠法和小波分解法这四种。



技术实现要素:

有鉴于此,本发明提供了一种三角网格模型的处理方法、处理终端及存储介质,本发明的三角网格模型的处理方法能够减少三角网格模型包含的三角面的数量。

本发明提供一种三角网格模型的处理方法,所述处理方法包括:

计算模型中包含的所有三角面分别对应的面法线,并通过所述面法线计算所述模型包含的所有的点分别对应的点法线;

获取所述所有三角面分别对应的面信息,利用所述面信息和所述点法线判断所述所有三角面中是否存在符合预设简化条件的三角面;

若是,则利用预设简化规则对符合预设简化条件的三角面进行简化,以对所述模型进行简化。

另一方面,本发明还提供一种三角网格模型的处理终端,所述处理终端包括相互连接的处理器和存储器;

所述存储器存储有用于实现上述的三角网格模型的处理方法的指令;

所述处理器执行所述存储器中的所述指令。

另一方面,本发明还提供一种存储介质,所述存储介质存储有程序数据,所述程序数据能够被执行以实现上述的三角网格模型的处理方法。

有益效果:区别于现有技术,本发明的三角网格模型的处理方法包括计算模型中包含的所有三角面分别对应的面法线,并通过所述面法线计算所述模型包含的所有的点分别对应的点法线;获取所述所有三角面分别对应的面信息,利用所述面信息和所述点法线判断所述所有三角面中是否存在符合预设简化条件的三角面;若是,则利用预设简化规则对符合预设简化条件的三角面进行简化,以对所述模型进行简化。通过上述方法有效判断出三角网格模型中可进行简化的三角面,进而对可简化的三角面进行简化,即可减少三角网格模型中包含的三角面的数量,减少了三角网格模型的数据量,便于三角网格模型的保存以及后续应用。

附图说明

为了更清楚地说明发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的情况下,还可以根据这些附图获得其他的附图,其中:

图1是本发明三角网格模型的处理方法第一实施例的流程示意图;

图2是三角网格模型的部分三角面的模型结构示意图;

图3是本发明三角网格模型的处理方法第二实施例的流程示意图;

图4是图3中步骤s205的一实施方式的流程示意图;

图5a是本发明三角网格模型简化前的结构示意图;

图5b是本发明三角网格模型简化后的结构示意图;

图6是本发明三角网格模型的处理终端一实施例的结构示意图;

图7是本发明存储介质一实施例的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动情况下所获得的所有其他实施例,均属于本发明保护的范围。

需要说明,若本发明实施例中有涉及方向性指示(诸如上、下、左、右、前、后……),则该方向性指示仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。

另外,若本发明实施例中有涉及“第一”、“第二”等的描述,则该“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。

请参阅图1,图1是本发明三角网格模型的处理方法第一实施例的流程示意图。如图1所示,本实施例的三角网格模型的处理方法至少可包括如下步骤:

在步骤s101中,计算模型中包含的所有三角面分别对应的面法线,并通过面法线计算模型包含的所有的点分别对应的点法线。

根据需求,从构建的多个三角网格模型中读取出需要进行简化的三角网格模型。其中,三角网格模型中包含有若干个点,由若干个点构建成若干个三角面,进一步,每个点可被多个三角面共用,将被同一个点共用的三角面的信息作为该点的面信息。本实施例中三角网格模型为三维模型,该三维模型的格式可以为max格式、obj格式、fbx格式或igs格式,本发明不做具体限制。

三角网格模型中的每个三角面各自具有相应的法线,即可根据三角网格模型计算得到每个三角面的面法线。进一步,三角网格模型中,每个点可被多个三角面共用,对于被多个三角面共用点而言,可通过共用该点的三角面的面法线计算得到该点的点法线。本实施例中,将每个三角面的面法线分别累加到构成该三角面的三个点的点法线上,换言之,每个点的点法线有共用该点的多个三角面的面法线累加得到,进一步,可对点法线进行归一化处理,使点法线的向量长度为1。

本实施例中记得到三角网格模型中的每个点的点法线之后,可将每个点的点法线存入三角网格模型的法线数组中。

请参阅图2,图2示出了一个三角网格模型的局部三角面,如图2所示,示出的三角面包括面s1、s2和s3(面s3在背面,图2中用箭头指示),点包括点p1、p2、p3和p4;其中,点p1、p2和p3构成面s1,点p1、p3和p4构成面s2,点p1、p4和p2构成面s3;由此,点p1被面s1、s2和s3所共用,即点p1对应于面s1、s2和s3。进一步,可计算得到面s1、s2和s3各自的面法线,进一步,将面s1、s2和s3各自的面法线分别累加到构成该面的三个点的点法线上,即可得到每个点的点法线。以点p1为例,p1被面s1、s2和s3所共用,则面s1、s2和s3的面法线均会累加到点p1的点法线上,通过面s1、s2和s3的面法线的累加得到点p1的点法线,进一步,对点p1的点法线进行归一化处理,使点法线的向量长度为1。

本实施例中上述计算点法线的步骤流程可通过如下程序实现:

在步骤s102中,获取所有三角面分别对应的面信息,利用面信息和点法线判断所有三角面中是否存在符合预设简化条件的三角面。

进一步,获取三角网格模型中的每个三角面的面信息,进而利用获取的每个三角面的面信息,以及每个三角面对应的三个点的点法线,进而对每个三角面进行判断,以确定三角网格模型的所有三角面中是否存在符合预设简化条件的三角面。若所有三角面中至少一个三角面符合预设简化条件,则三角网格模型的所有三角面中存在符合预设简化条件的三角面,若所有三角面没有一个三角面符合预设简化条件,则三角网格模型的所有三角面中不存在符合预设简化条件的三角面。

本实施例中,可通过记录所有三角面中符合预设简化条件的三角面的数量,进而判断所有三角面中是否存在符合预设简化条件的三角面。具体的,若所有三角面中符合预设简化条件的三角面的数量不为零,则所有三角面中存在符合预设简化条件的三角面;若所有三角面中符合预设简化条件的三角面的数量为零,则不存在。

本实施例中三角面的面信息至少可包括构成该三角面的点的点信息(至少包括点坐标位置和点的序号),以及该三角面是否有效或无效的信息。根据三角面的面信息即可计算得到该三角面的每个角的角度值,以及每个边的边长。进而通过计算得到的每个角的角度值以及每个边的边长对三角面是否符合预设简化条件进行判断。

进一步,本实施例中可通过三角面的面信息知晓该三角面是否为有效三角面或无效三角面,在利用面信息和点法线判断所有三角面中是否存在符合预设简化条件的三角面时,将无效三角面进行删除。

本实施例的预设简化条件可包括构成三角面的三个点中,两个点的点法线之间的夹角小于第一预设角度值,且连接两个点的边的边长小于预设长度,以及边的对角的角度值小于第二预设角度值。本实施例计算得到每个点的点法线之后,即可得到相邻两个点的点法线之间的夹角。可以理解的是,两个点的点法线之间的夹角越小,则说明两个点的点法线越趋近于平行;两个点的边的边长越小,以及边的对角的角度值越小,则对应的三角面越小。进一步,本发明中第一预设角度值和第二预设角度值可以相同也可以不同,本实施例以第二预设角度值大于第一预设角度值为例;在一具体应用例,中第一预设角度值可为1°、3°或5°,第二预设角度值可为15°、30°或45°,本发明不做具体限制。

在另一实施例中,可通过两个点的点法线之间的夹角以及边的对角的角度值的判断可通过设置第一预设余弦值和第二预设余弦值的方式设置预设简化条件,即构成三角面的三个点中,两个点的点法线之间的夹角的余弦值大于第一预设余弦值,且连接两个点的边的边长小于预设长度,以及边的对角的角度值的余弦值大于第二预设余弦值。本实施例中,第一预设余弦值可为0.996、0.998或0.999,第二预设余弦值可为0.965、0.866或0.707,本发明不做具体限制。

本实施例中上述判断三角面是否符合预设简化条件的步骤流程可通过如下程序实现:

在步骤s103中,利用预设简化规则对符合预设简化条件的三角面进行简化,以对模型进行简化。

若步骤s102中的判断结果为所有三角面中存在符合预设简化条件的三角面,则对按照预设简化规则对符合预设简化条件的三角面进行简化。

本实施例中采用的预设简化规则为边折叠精简,即将一条边上的两个点进行合并。本实施例中合并的两个点为步骤s102中记载的点法线之间的夹角满足预设简化条件的两个点。具体的,将该两个点中,一个点作为合并点,另一个点作为被合并点,将被合并点的面信息添加至合并点的面信息中,进而实现该两个点的合并。

进一步,在合并该两个点时还可以通过根据合并点的第一坐标位置和被合并点的第二坐标位置计算得到第三坐标位置;将合并点从第一坐标位置移动至第三坐标位置处。由此,两个点合并后的点在第三坐标位置处。进一步,第三坐标位置为第一坐标位置和第二坐标位置的中间坐标位置。

在一实施方式中,可将经过简化的三角面设置为无效三角面,并在此返回步骤s101,循环执行步骤s101至步骤s103,直至步骤s102的判断结果为所有三角面中不存在符合预设简化条件的三角面为止。

在步骤s104中,停止对模型的简化。

若步骤s102中的判断结果为所有三角面中不存在符合预设简化条件的三角面,则说明该三角网格模型不需要进行简化,由此停止对三角网格模型的简化。

本实施例中步骤s101至步骤s104整体循环执行的流程可通过如下程序实现:

本实施例通过三角网格模型中三角面的面信息和构成三角面的点的点法线对该三角面是否能够简化进行判断,进而将三角网格模型满足预设简化条件的三角面进行简化,进而减少了三角网格模型中的三角面数量,同时不影响三角网格模型的三维形状。

进一步,请参阅图3,图3是本发明三角网格模型的处理方法第二实施例的流程示意图。如图3所示,本实施例的三角网格模型的处理方法至少可包括如下步骤:

在步骤s201中,读取模型中包含的所有的点分别对应的点信息,据点信息对每个点分别创建点结构体,并将点结构体存入模型的点容器中。

容器又称为vector模板,是c++标准模板库的一个数据结构,可以用来存储多个相应类型的数据。本实施例中,面容器即是用来存储三角面的面信息,点所属的面容器存储的即为该点对应的所有三角面的面信息;点容器即是用来存储点的点信息。

读取需要进行处理的三角网格模型,进而获取该三角网格模型中包含的所有的点的点信息,其中,点信息具体可包括每个点的坐标位置(即对应的x、y、z值)。本实施例中,根据读取到的每个点的坐标位置创建相应的点结构体,并将该点结构体存入该三角网格模型的点容器中,即每个模型的点容器中包含有该模型中所有的点的点结构体,即所有的点的点信息。进一步,点结构体中还包含有该点的序号,以及该点所属的面容器(一个点可被多个三角面共有,因此,一个点可属于多个三角面容易,进而可根据点所属的面容器得知该点被哪些三角面共有)。

进一步,对每个点创建点结构体时,会对每个点结构体设置相应的序号,且每个点结构体具有其相应的点结构体指针,点结构体指针是点结构体申明的指针变量,不会随其序号的变化而变化。

在步骤s202中,读取模型中包含的所有三角面分别对应的面信息,根据面信息对每个三角面分别创建面结构体,并将面结构体存入模型的面容器中,以及将每个三角面的面信息分别记录至构成三角面的三个点所属的面容器中。

对于三角网格模型而言,其包含的多个点中每3个点构成一个三角面,即每个三角网格模型由多个三角面构成,每个三角网格模型的面信息即为其包含的所有三角面的面信息的集合。本实施例中,读取的每个三角网格模型所包含的所有三角面的面信息(至少包括该构成该三角面的三个点的序号,以及该三角面的是否有效),进而对每个三角网格模型而言,对其包含的每个三角面分别创建各自的面结构体,即对每个三角网格模型所包含的每个三角面分别创建用于存储该三角面的面信息的数据集合。本实施例中,将三角网格模型的面结构体存入该三角网格模型的面容器中。此外,将每个三角面的面结构体所包含的面信息分别记录至构成该三角面的三个点的面容器中。

以图2所示的三角网格模型的局部三角面为例,点p1、p2以及p3构成三角面s1。本实施例中,通过步骤s201,对三角网格模型中的每个点创建点结构体,例如,对点p1、p2、p3以及p4分别创建各自的点结构体,并将创建的点结构体存入三角网格模型的点容器中。进一步,通过步骤s202对包括三角面s1在内的每个三角面的面信息(至少包括该构成该三角面的三个点的序号,以及该三角面的是否有效)分别创建各自的面结构体,并将创建的每个面结构体存入三角网格模型的面容器中。进一步,将三角面s1的面信息记录到构成三角面s1的点p1、p2以及p3各自的面容器中。

本实施例中上述步骤流程可通过如下程序实现:

在步骤s203中,计算模型中包含的所有三角面分别对应的面法线,并通过面法线计算模型包含的所有的点分别对应的点法线。

在步骤s204中,获取所有三角面分别对应的面信息,利用面信息和点法线判断所有三角面中是否存在符合预设简化条件的三角面。

本实施例中,步骤s203和步骤s204与图1所示的步骤s101和步骤s102相同,此处不再赘述。

进一步,由于本实施例中通过步骤s201和步骤s202创建了三角网格模型的点容器和面容器,由此,在本实施例步骤s203和步骤s204获取点的点信息和三角面的面信息时,可从创建的点容器和面容器中获取。

在步骤s205中,利用预设简化规则对符合预设简化条件的三角面进行简化,以对模型进行简化。

本实施例中采用的预设简化规则为边折叠精简,即将一条边上的两个点进行合并。本实施例中合并的两个点为步骤s204中记载的点法线之间的夹角满足预设简化条件的两个点。具体的,将该两个点中,一个点作为合并点,另一个点作为被合并点;根据步骤s201和步骤s202创建的面结构体、点结构体、以及面容器,将合并点所属的面容器作为第一面容器,被合并点所属的面容器为第二面容器,由此,如图4所示,本实施例中步骤s205可包括如下步骤:

在步骤s2051中,获取合并点所属的第一面容器以及被合并点所属的第二面容器。

根据步骤s201可知,三角网格模型中点所属的面容器包含有共有该点的所有面的面信息,由此,获取合并点所属的第一面容器以及被合并点所属的第二面容器,即相当于获取共有合并点的所有三角面的面信息,以及共有被合并点的所有三角面的面信息。

在步骤s2052中,将第二面容器中包含的被合并点对应的面信息添加至第一面容器中。

将共有被合并点的所有三角面的面信息添加至合并点的第一面容器中,将共有被合并点的所有三角面成为共有合并点的三角面,进而实现合并点和被合并点的合并。

进一步,本实施例在合并该上述合并点和被合并点时,还可以通过根据合并点的第一坐标位置和被合并点的第二坐标位置计算得到第三坐标位置;将合并点从第一坐标位置移动至第三坐标位置处,该移动步骤可在步骤s2051之前执行,也可在步骤s2052之前执行,此外,还可以在步骤s2052之后执行,本发明不做具体限制;由此,两个点合并后的点在第三坐标位置处。进一步,第三坐标位置为第一坐标位置和第二坐标位置的中间坐标位置。

在一实施方式中,可将经过简化的三角面设置为无效三角面,并在此返回步骤s203,循环执行步骤s203至步骤s205,直至步骤s204的判断结果为所有三角面中不存在符合预设简化条件的三角面为止。

本实施例中上述三角面简化流程可通过如下程序实现:

在步骤s206中,将经过简化的三角面设置为无效三角面。

进一步,将经过步骤s205简化后的三角面设置为无效三角面。具体的,三角面的面结构体中设置有该三角面是否有效或无效的指示,一般用“true”表示三角面为有效三角面,“false”表示三角面为无效三角面,当三角面经过步骤s205简化后,则将该三角面对应的指示从“true”改为“false”,即将三角面设置无效三角面。

在步骤s207中,删除无效三角面,并返回步骤s203。

进一步,将步骤s206中设置的无效三角面进行删除,并返回步骤s203,重新计算三角网格模型中包含的剩余的所有三角面各自对应的面法线,并通过面法线计算三角网格模型包含的剩余的所有的点分别对应的点法线;获取所有三角面分别对应的面信息,利用面信息和点法线判断所有三角面中是否存在符合预设简化条件的三角面;利用预设简化规则对符合预设简化条件的三角面进行简化,以对模型进行简化。如此循环执行,直至在再次返回步骤s203后,判断所有三角面中不存在符合预设简化条件的三角面为止。

在步骤s208中,停止对模型的简化。

若步骤s204中的判断结果为所有三角面中不存在符合预设简化条件的三角面,则说明该三角网格模型不需要进行简化,由此停止对三角网格模型的简化。

通过上述的三角网格模型的处理方法,可对需要简化的三角网格模型中的三角面进行简化,在能够完整展示三角网格模型的必要信息的前提下,减少了三角面的数量,即相当于减少了三角网格模型的数据量,减少其占用内存,且便于后续对三角网格模型的应用。如图5a所示,简化前的三角网格模型通过较多的三角面表示了其三维图型,可以看出图5a所示的模型中三角面较多;通过图1至图4所示的三角网格模型的处理方法第一实施例至第二实施例,对图5a中所示的三角网格模型进行简化后,形成图5b所示的图型,图5b所示的图像同样保持了图5a所示的三维形状,但其包含的三角面明显减少,其对应的数据量也相对较少。

请参阅图6,图6是本发明三角网格模型的处理终端一实施例的结构示意图。如图6所示,本实施例的处理终端100包括相互连接的处理器10和存储器11;其中,存储器11存储有相应的程序指令,处理器执行存储器11中存储的该程序指令,以实现图1至图4所示的三角网格模型的处理方法第一实施例至第二实施例。

本实施例中,处理终端100可为台式电脑、平板电脑、服务器、或手机等具有计算处理能力的不同类型的终端设备。此外,台式电脑、平板电脑或手机等处理终端还包括有显示屏12,可对三角网格模型进行显示,由此可令用户对简化前和简化后的三角网格模型进行查看,对于服务器等处理终端,可将相应数据传输至具有显示器12或具有显示屏12的终端上,以使用户对简化前和简化后的三角网格模型进行查看。

进一步,如图6所示,本实施例的处理终端100还可包括传感器、红外扫描仪、太赫兹扫描仪等扫描设备13,扫描设备13用于对要成像的物体进行扫描,得到相应的扫描数据,将扫描数据发送至处理器,由处理器对扫描数据进行处理,进而得到与要成像的物体对应的三角网格模型。

请参阅图7,图7是本发明存储介质一实施例的结构示意图。如图7所示,本实施例中的存储介质200中存储有能够被执行的程序数据201,该程序数据201被执行后能够实现图1至图4所示的三角网格模型的处理方法第一实施例至第二实施例。

本实施例中,该存储介质200可以是智能终端的存储模块、移动存储装置(如移动硬盘、u盘等)、网络云盘、应用存储平台或服务器等具备存储功能的介质。此外,该存储介质200还可以为上述图6中所示的存储器11。

以上仅为本发明的实施方式,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1