一种生成二维三角形网格的方法及装置与流程

文档序号:15096713发布日期:2018-08-04 14:44阅读:389来源:国知局

本发明涉及计算机技术领域,特别涉及一种生成二维三角形网格的方法及装置。



背景技术:

一般的三维建模软件都提供了构建三角形网格的工具,通常软件提供一个基础的网格,用户在基础的网格上通过画线的方式来添加细节,生成多边形网格,再由软件把多边形网格变成三角形网格。也就是说,首先需要一个基础的网格,然后在这个基础的网格上绘制线条,线条交叉的地方生成点,不断的绘制线条,直到完成,这种技术方案非常像蜘蛛结网的方式,操作复杂,效率低,且生成的网格的均匀程度取决于用户的绘制水平。

大多数二维的动画软件例如:Adobe的AnimationCC,CocosStudio的动画编辑器等并不提供给二维图形增加网格的功能,这样只能控制二维图形的移动旋转缩放斜切属性的变化,没有办法做到更丰富的自由形状变化。部分软件如Midas Creature等,可以给二维图形增加网格,但只能自动添加,用户只能控制网格的疏密程度,不能随意的添加删除网格,这样用户不能按照二维图形本身的纹理来控制网格,在变形时有一定局限性,可能会导致变形的僵硬和瑕疵。



技术实现要素:

本发明的目的是提供一种生成二维三角形网格的方法及装置,用于解决上述现有技术存在的技术问题,能够简单有效的生成二维三角形网格。

根据本发明实施例提供的一种生成二维三角形网格的方法,包括:

在二维笛卡尔坐标系中,通过实时监测鼠标的点击事件和移动事件,得到并保存待生成的二维三角形网格的基本轮廓;

根据线条删除指令将所述基本轮廓的所有线条进行删除处理,得到所述基本轮廓的散点集合;

通过对所得到的散点集合进行Delaunay三角剖分算法处理,得到初始二维三角形网格;

利用所述初始二维三角形网格和所保存的基本轮廓,生成最终二维三角形网格。

优选地,所述通过实时监测鼠标的点击事件和移动事件,得到并保存待生成的二维三角形网格的基本轮廓包括:

通过实时监测鼠标的点击事件和移动事件,得到并保存由首尾相接的直线组成的多边形,并将所述多边形作为待生成的二维三角形网格的基本外部轮廓;

通过实时监测鼠标在所述基本外部轮廓内的点击事件和/或移动事件,得到并保存独立的点和/或直线,并将所述点和/或直线作为待生成的二维三角形网格的基本内部轮廓。

优选地,所述利用所述初始二维三角形网格和所保存的基本轮廓,生成最终二维三角形网格包括:

将所述初始二维三角形网格中的每条直线与所保存的基本外部轮廓进行比较,依次判断所述初始二维三角形网格中是否存在在所述基本外部轮廓外部的直线;

若判断所述初始二维三角形网格中存在在所述基本外部轮廓外部的直线,则删除所述初始二维三角形网格中在所述基本外部轮廓外部的直线;

若判断所述初始二维三角形网格中不存在在所述基本外部轮廓外部的直线,则进一步利用所述初始二维三角形网格和所保存的基本内部轮廓,生成最终二维三角形网格。

优选地,所述利用所述初始二维三角形网格和所保存的基本内部轮廓,生成最终二维三角形网格包括:

将所述初始二维三角形网格中的每条直线与所保存的基本内部轮廓的直线进行比较,判断所述初始二维三角形网格中是否存在与所述基本内部轮廓的直线相交的直线;

若判断所述初始二维三角形网格中存在与所述基本内部轮廓相交的直线,则删除所述初始二维三角形网格中与所述基本内部轮廓的直线相交的直线,并生成包含小基本外部轮廓的其次二维三角形网格;

通过对所述其次二维三角形网格的小基本外部轮廓进行处理,生成最终二维三角形网格。

优选地,所述通过对所述其次二维三角形网格的小基本外部轮廓进行处理,生成最终二维三角形网格包括:

根据线条删除指令将所述其次二维三角形网格的小基本外部轮廓的所有线条进行删除处理,得到所述小基本外部轮廓的小散点集合;

通过对所述小基本外部轮廓的小散点集合进行Delaunay三角剖分算法处理,生成最终二维三角形网格。

根据本发明实施例提供的一种生成二维三角形网格的装置,包括:

获取基本轮廓模块,用于在二维笛卡尔坐标系中,通过实时监测鼠标的点击事件和移动事件,得到并保存待生成的二维三角形网格的基本轮廓;

获取散点集合模块,用于根据线条删除指令将所述基本轮廓的所有线条进行删除处理,得到所述基本轮廓的散点集合;

获取初始二维三角形网格模块,用于通过对所得到的散点集合进行Delaunay三角剖分算法处理,得到初始二维三角形网格;

生成最终二维三角形网格模块,用于利用所述初始二维三角形网格和所保存的基本轮廓,生成最终二维三角形网格。

优选地,所述获取基本轮廓模块包括:

获取基本外部轮廓单元,用于通过实时监测鼠标的点击事件和移动事件,得到并保存由首尾相接的直线组成的多边形,并将所述多边形作为待生成的二维三角形网格的基本外部轮廓;

获取基本内部轮廓单元,用于通过实时监测鼠标在所述基本外部轮廓内的点击事件和/或移动事件,得到并保存独立的点和/或直线,并将所述点和/或直线作为待生成的二维三角形网格的基本内部轮廓。

优选地,所述生成最终二维三角形网格模块包括:

判断单元,用于将所述初始二维三角形网格中的每条直线与所保存的基本外部轮廓进行比较,依次判断所述初始二维三角形网格中是否存在在所述基本外部轮廓外部的直线;

删除单元,用于当判断所述初始二维三角形网格中存在在所述基本外部轮廓外部的直线,则删除所述初始二维三角形网格中在所述基本外部轮廓外部的直线;

生成最终二维三角形网格单元,用于当判断所述初始二维三角形网格中不存在在所述基本外部轮廓外部的直线,则进一步利用所述初始二维三角形网格和所保存的基本内部轮廓,生成最终二维三角形网格。

优选地,所述生成最终二维三角形网格单元包括:

判断子单元,用于将所述初始二维三角形网格中的每条直线与所保存的基本内部轮廓的直线进行比较,判断所述初始二维三角形网格中是否存在与所述基本内部轮廓的直线相交的直线;

删除子单元,用于若判断所述初始二维三角形网格中存在与所述基本内部轮廓相交的直线,则删除所述初始二维三角形网格中与所述基本内部轮廓的直线相交的直线,并生成包含小基本外部轮廓的其次二维三角形网格;

生成最终二维三角形网格子单元,用于通过对所述其次二维三角形网格的小基本外部轮廓进行处理,生成最终二维三角形网格。

优选地,所述生成最终二维三角形网格子单元具体用于根据线条删除指令将所述其次二维三角形网格的小基本外部轮廓的所有线条进行删除处理,得到所述小基本外部轮廓的小散点集合,并通过对所述小基本外部轮廓的小散点集合进行Delaunay三角剖分算法处理,生成最终二维三角形网格。

根据本发明实施例提供的方案,通过一个封闭的多边形和多边形内部的点、线来自动构建二维三角形网格,能够更简单有效的操作方式(画点或者画线)来生成均匀的三角形网格。

附图说明

图1是本发明实施例提供的一种生成二维三角形网格的方法流程图;

图2是本发明实施例提供的一种生成二维三角形网格的装置示意图;

图3是本发明实施例提供的利用鼠标绘制多边形的结果示意图;

图4是本发明实施例提供的利用鼠标绘制多边形内点和直线的结果示意图;

图5是本发明实施例提供的散点集合进行Delaunay三角剖分算法的结果示意图;

图6是本发明实施例提供的散点集合进行Delaunay三角剖分算法的过程示意图;

图7是本发明实施例提供的删除多边形外部直线的示意图;

图8是本发明实施例提供的生成二维三角形网格的过程示意图。

具体实施方式

以下结合附图对本发明的优选实施例进行详细说明,应当理解,以下所说明的优选实施例仅用于说明和解释本发明,并不用于限定本发明。

图1是本发明实施例提供的一种生成二维三角形网格的方法流程图,如图1所示,包括:

步骤S101:在二维笛卡尔坐标系中,通过实时监测鼠标的点击事件和移动事件,得到并保存待生成的二维三角形网格的基本轮廓;

步骤S102:根据线条删除指令将所述基本轮廓的所有线条进行删除处理,得到所述基本轮廓的散点集合;

步骤S103:通过对所得到的散点集合进行Delaunay三角剖分算法处理,得到初始二维三角形网格;

步骤S104:利用所述初始二维三角形网格和所保存的基本轮廓,生成最终二维三角形网格。

其中,所述通过实时监测鼠标的点击事件和移动事件,得到并保存待生成的二维三角形网格的基本轮廓包括:通过实时监测鼠标的点击事件和移动事件,得到并保存由首尾相接的直线组成的多边形,并将所述多边形作为待生成的二维三角形网格的基本外部轮廓;通过实时监测鼠标在所述基本外部轮廓内的点击事件和/或移动事件,得到并保存独立的点和/或直线,并将所述点和/或直线作为待生成的二维三角形网格的基本内部轮廓。

其中,所述利用所述初始二维三角形网格和所保存的基本轮廓,生成最终二维三角形网格包括:将所述初始二维三角形网格中的每条直线与所保存的基本外部轮廓进行比较,依次判断所述初始二维三角形网格中是否存在在所述基本外部轮廓外部的直线;若判断所述初始二维三角形网格中存在在所述基本外部轮廓外部的直线,则删除所述初始二维三角形网格中在所述基本外部轮廓外部的直线;若判断所述初始二维三角形网格中不存在在所述基本外部轮廓外部的直线,则进一步利用所述初始二维三角形网格和所保存的基本内部轮廓,生成最终二维三角形网格。

具体地说,所述利用所述初始二维三角形网格和所保存的基本内部轮廓,生成最终二维三角形网格包括:将所述初始二维三角形网格中的每条直线与所保存的基本内部轮廓的直线进行比较,判断所述初始二维三角形网格中是否存在与所述基本内部轮廓的直线相交的直线;若判断所述初始二维三角形网格中存在与所述基本内部轮廓相交的直线,则删除所述初始二维三角形网格中与所述基本内部轮廓的直线相交的直线,并生成包含小基本外部轮廓的其次二维三角形网格;通过对所述其次二维三角形网格的小基本外部轮廓进行处理,生成最终二维三角形网格。

具体地说,所述通过对所述其次二维三角形网格的小基本外部轮廓进行处理,生成最终二维三角形网格包括:根据线条删除指令将所述其次二维三角形网格的小基本外部轮廓的所有线条进行删除处理,得到所述小基本外部轮廓的小散点集合;通过对所述小基本外部轮廓的小散点集合进行Delaunay三角剖分算法处理,生成最终二维三角形网格。

图2是本发明实施例提供的一种生成二维三角形网格的装置示意图,如图2所示,包括:获取基本轮廓模块201,用于在二维笛卡尔坐标系中,通过实时监测鼠标的点击事件和移动事件,得到并保存待生成的二维三角形网格的基本轮廓;获取散点集合模块202,用于根据线条删除指令将所述基本轮廓的所有线条进行删除处理,得到所述基本轮廓的散点集合;获取初始二维三角形网格模块203,用于通过对所得到的散点集合进行Delaunay三角剖分算法处理,得到初始二维三角形网格;生成最终二维三角形网格模块204,用于利用所述初始二维三角形网格和所保存的基本轮廓,生成最终二维三角形网格。

其中,所述获取基本轮廓模块201包括:获取基本外部轮廓单元,用于通过实时监测鼠标的点击事件和移动事件,得到并保存由首尾相接的直线组成的多边形,并将所述多边形作为待生成的二维三角形网格的基本外部轮廓;获取基本内部轮廓单元,用于通过实时监测鼠标在所述基本外部轮廓内的点击事件和/或移动事件,得到并保存独立的点和/或直线,并将所述点和/或直线作为待生成的二维三角形网格的基本内部轮廓。

其中,所述生成最终二维三角形网格模块204包括:判断单元,用于将所述初始二维三角形网格中的每条直线与所保存的基本外部轮廓进行比较,依次判断所述初始二维三角形网格中是否存在在所述基本外部轮廓外部的直线;删除单元,用于当判断所述初始二维三角形网格中存在在所述基本外部轮廓外部的直线,则删除所述初始二维三角形网格中在所述基本外部轮廓外部的直线;生成最终二维三角形网格单元,用于当判断所述初始二维三角形网格中不存在在所述基本外部轮廓外部的直线,则进一步利用所述初始二维三角形网格和所保存的基本内部轮廓,生成最终二维三角形网格。

具体地说,所述生成最终二维三角形网格单元包括:判断子单元,用于将所述初始二维三角形网格中的每条直线与所保存的基本内部轮廓的直线进行比较,判断所述初始二维三角形网格中是否存在与所述基本内部轮廓的直线相交的直线;删除子单元,用于若判断所述初始二维三角形网格中存在与所述基本内部轮廓相交的直线,则删除所述初始二维三角形网格中与所述基本内部轮廓的直线相交的直线,并生成包含小基本外部轮廓的其次二维三角形网格;生成最终二维三角形网格子单元,用于通过对所述其次二维三角形网格的小基本外部轮廓进行处理,生成最终二维三角形网格。

具体地说,所述生成最终二维三角形网格子单元具体用于根据线条删除指令将所述其次二维三角形网格的小基本外部轮廓的所有线条进行删除处理,得到所述小基本外部轮廓的小散点集合,并通过对所述小基本外部轮廓的小散点集合进行Delaunay三角剖分算法处理,生成最终二维三角形网格。

本发明使用二维笛卡尔坐标系来表述点和线还有网格的位置信息,横坐标表示x轴,纵坐标表示y轴,本方案用鼠标作为创建工具。

(1)、利用鼠标绘制边线(基本外部轮廓),如图3所示,包括:

步骤301:点击鼠标,在二维笛卡尔坐标系中记下点击的位置,在该位置画一个点,记下该点为起点;

步骤302:移动鼠标,再次点击鼠标,在该位置画另一个点,把这个点和上一个绘制的点连接起来,画一条线;

步骤303:不断重复第二步,画出一系列首尾相接的线;

步骤304:在起点的位置点击鼠标,把最后绘制的点和起点连接起来,组成一个封闭的多边形(基本外部轮廓)。

(2)、利用鼠标在多边形内部绘制独立的点或者线(基本内部轮廓),如图4所示,包括:

步骤401:在一个点上点击鼠标不放;

步骤402:拖动鼠标生成连线,随着鼠标的移动,会生成初始点到鼠标位置的连线;

步骤403:移动鼠标到另一个点上,松开鼠标,生成一条从第一个点到这个点上的连线。

使用鼠标在多边形内点击,绘制点,每次绘制一个点都会重新自动生成三角形网格,如果自动生成的三角形网格不能满足需求,可以通过移动点,或者在点与点直线手动连线的办法来改变最终生成三角形网格的形状。

(3)、使用德洛内Delaunay三角剖分的方法,生成初始二维三角形网格,如图5所示。

德洛内(Delaunay)三角剖分的定义:它是一系列相连的但不重叠的三角形的集合,而且这些三角形的外接圆不包含这个面域的其他任何点。它具有两个特有的性质:

性质1、每个德洛内(Delaunay)三角形的外接圆不包含面内的其他任何点,称之为德洛内(Delaunay)三角网的空外接圆性质,这个特征已经作为创建德洛内(Delaunay)三角网的一项判别标准;

性质2、它的另一个性质最大最小角性质:每两个相邻的三角形构成的凸四边形的对角线,在相互交换后,六个内角的最小角不再增大。

Delaunay三角剖分可以把一个离散的点集连接成一个凸多边形,并在多边形连接成三角网。

如图6所示,下面以四个点为例,有四个点ABCD,求四个点的Delaunay三角剖分,构建Delaunay三角剖分的方法包括:

1.构建一个足够大的三角形A1B1C1,能够把所有的散点ABCD包围起来;

2.将这个大三角形放到一个三角开集合[A1B1C1];

3.将所有的点按照从左到右的顺序排序,排序结果为ABCD;

4.从左到右依次取出点,将点和三角开集合内的所有三角形依次比较,如果点在三角形外接圆的内部,则把这个点与三角形的三条边各自组成一个三角形,把新生成的三角形放到三角开集合内,并且删除原来的三角形;

先取点A,依次与开集合里的三角形比较,比较结果为A在三角形A1B1C1的外接圆内部,删除三角形A1B1C1。

把A和A1C1连起来,组成三角形AA1C1

把A和C1B1连起来,组成三角形AC1B1

把A和A1B1连起来,组成三角形AA1B1

新生成的三个三角形放到开集合内,现在开集合内是[AA1C1,AC1B1,AA1B1]。

然后,选择点B,依次与开集合的三个三角形的外接圆比较,比较结果为B点在三角形AA1B1的外接圆内部,也在三角形AC1B1的外接圆内部,删除三角形AA1B1和AC1B1。

把B点和A1B1连起来,组成三角形BA1B1

把B点和A1A连起来,组成三角形BA1A

把B点和AB1连起来,组成三角形BAB1

把B点和AC1连起来,组成三角形BAC1

把B点和B1C1连起来,组成三角形BB1C1

新生成的三角形放到开集合内,现在开集合内是[AA1C,BA1B1,BA1A,BAB1,BAC1,BB1C1]

然后,在分别去C点和D点用同样的上述方法进行处理,处理完毕后,开集合内是[AA1C1,ACC1,AA1B,ABC,BA1B1,BCD,BB1D,CC1D,DC1B1]

因为A1B1C1是后天添加的点,所以把开集合内中包含这三个点的三角形都删除,最后开集合里就剩下[ABC,BCD],这两个三角形就是所要求的Delaunay三角剖分。

下面结合上面的(1)、(2)以及(3),以具体的实施例来说明本发明的技术方案

A、取给定的多边形的每条边线的顶点,多边形内部的自定义的点,多边形内部的自定义的线的顶点,组成一个散点的集合,并对这个散点使用Delaunay三角剖分,得到一个三角形的集合(初始二维三角形网格),这个三角形集合被一个凸的多边形包围,如图5所示。

B、对步骤A中得到的三角形集合的每一个三角形,取三角形内部的一个点,判断这个点是否在给定的多边形的外部,如果点在给定的多边形的外部,则删除该三角形,如图7所示。

C、依次取给定的多边形内部的自定义的线,将该线和三角形集合的每个三角形进行比较,如果该线和某个三角形的某条表重合,则不做任何处理,如果该线和某个三角形的某条边相交,那么找到所有的这样的三角形,删除这些三角形中和自定义线相交的所有的边线,那么这些三角形会变成一个多变形,而自定义的线把这个多边形,分成了两个多边形,依次把这两个多边形作为给定的多边形使用步骤A和步骤B进行处理,得到三角形,如图8所示。

D、所有的自定义的线处理完毕后,三角形网格就生成了。

本发明用在DragonBones动画编辑器中使用,DragonBones动画编辑器是一个基于PC的桌面应用程序,支持动画制作,时间轴编辑等等。

本发明通过给定的多边形,多边形内部的点或者线,来自动生成三角形网格的方法。不管使用什么方法来绘制多边形,点或者线,只要使用本发明的生成三角形网格的方法,都在保护范围内。

根据本发明实施例提供的方案,使用鼠标来完成绘制多边形,绘制点和线的操作来自动构建二维三角形网格,能够更简单有效的操作方式(画点或者画线)来生成均匀的三角形网格。

尽管上文对本发明进行了详细说明,但是本发明不限于此,本技术领域技术人员可以根据本发明的原理进行各种修改。因此,凡按照本发明原理所作的修改,都应当理解为落入本发明的保护范围。

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