掌桥专利:专业的专利平台
掌桥专利
首页

基于Unity引擎的内部结构切面方法、装置、计算机设备

文献发布时间:2023-06-19 09:24:30


基于Unity引擎的内部结构切面方法、装置、计算机设备

技术领域

本发明涉及Unity引擎技术领域,尤其涉及一种基于Unity引擎的内部结构切面方法、装置、计算机设备。

背景技术

近年来,Unity(游戏引擎)引擎得到了越来越广泛的应用,其良好的扩充性和跨平台性,使得许多行业的应用开发更加方便。

然而,现有的基于Unity引擎的内部结构切面方案,一般是使用专业的3D(threedimensional,三维)软件来进行几何体切面计算并作为预先处理好的资源导入到Unity中使用,由于Unity中并没有进行几何体切面计算的这个功能,导致无法实现在Unity引擎中能够进行几何体切面计算和根据该几何体切面计算进行补面。

发明内容

有鉴于此,本发明的目的在于提出一种基于Unity引擎的内部结构切面方法、装置、计算机设备,能够实现使用Unity Compute shader对于切面交点信息进行并行计算,利用图形处理器(GPU,Graphics Processing Unit)的并行计算缩短计算时间,以达到实时几何体切面计算和根据该几何体切面计算进行补面的效果。

根据本发明的一个方面,提供一种基于Unity引擎的内部结构切面方法,包括:获取Unity引擎的内部结构的输入信息和输出信息;其中,所述输入信息为对象空间的点坐标序列,索引序列,对象空间到裁剪面空间的变换矩阵,所述输出信息为交点的坐标序列包括裁切面空间上的二维坐标,被切的边原本两端顶点的索引序列;根据所述获取的Unity引擎的内部结构的输入信息和输出信息,合并相同切点;根据所述合并的相同切点,合并循环边并计算包容关系;根据所述合并的循环边并计算的包容关系,断开环并补面。

其中,所述获取Unity引擎的内部结构的输入信息和输出信息;其中,所述输入信息为对象空间的点坐标序列,索引序列,对象空间到裁剪面空间的变换矩阵,所述输出信息为交点的坐标序列包括裁切面空间上的二维坐标,被切的边原本两端顶点的索引序列,包括:通过先把对象空间的坐标转为以切面为xz平面的坐标系,得到的新坐标的y值正负代表点在切面上方或下方,和当三个点的y值有正有负时代表与切面相交,由y值比例得到交点在被切的边上的位置,由此求出坐标的方式,获取Unity引擎的内部结构的输入信息和输出信息;其中,所述输入信息为对象空间的点坐标序列,索引序列,对象空间到裁剪面空间的变换矩阵,所述输出信息为交点的坐标序列包括裁切面空间上的二维坐标,被切的边原本两端顶点的索引序列。

其中,所述根据所述获取的Unity引擎的内部结构的输入信息和输出信息,合并相同切点,包括:根据所述获取的Unity引擎的内部结构的输入信息和输出信息,基于字典的依靠被切线段原本索引信息合并切点的方式,用一对整数值索引代表一条原有的边,在第一次遍历中遇到未记录的边加入结果集,遇到已被记录的就略过并记录序号合并记录,最后根据合并记录得到不重复的slicePoints数组,并统一修改edgeTopo中的切边序号的方式,合并相同切点。

其中,所述根据所述合并的相同切点,合并循环边并计算包容关系,包括:根据所述合并的相同切点,通过在合并循环边的开始,将循环边索引转为顺时针,以第一点到第二点的方向为前方,以第一条边的中点为起点,垂直方向朝左作射线,根据射线与其余边的交点数量可得知当前遍历为顺时针还是逆时针,当交点数量为奇数时为逆时针,否则为顺时针的方式,合并循环边并计算包容关系。

其中,所述根据所述合并的循环边并计算的包容关系,断开环并补面,包括:根据所述合并的循环边并计算的包容关系,在顺时针的循环边中开始补面,从第一条边起依次遍历相邻边检查角度为锐角还是钝角,当发现钝角时沿当前边作射线求最近交点,然后将原本的循环边切分为两个循环边,各自继续递归直到只剩凸多边形为止,进行凸多边形补面。

根据本发明的另一个方面,提供一种基于Unity引擎的内部结构切面装置,包括:获取模块、合并模块、计算模块和补面模块;所述获取模块,用于获取Unity引擎的内部结构的输入信息和输出信息;其中,所述输入信息为对象空间的点坐标序列,索引序列,对象空间到裁剪面空间的变换矩阵,所述输出信息为交点的坐标序列包括裁切面空间上的二维坐标,被切的边原本两端顶点的索引序列;所述合并模块,用于根据所述获取的Unity引擎的内部结构的输入信息和输出信息,合并相同切点;所述计算模块,用于根据所述合并的相同切点,合并循环边并计算包容关系;所述补面模块,用于根据所述合并的循环边并计算的包容关系,断开环并补面。

其中,所述获取模块,具体用于:通过先把对象空间的坐标转为以切面为xz平面的坐标系,得到的新坐标的y值正负代表点在切面上方或下方,和当三个点的y值有正有负时代表与切面相交,由y值比例得到交点在被切的边上的位置,由此求出坐标的方式,获取Unity引擎的内部结构的输入信息和输出信息;其中,所述输入信息为对象空间的点坐标序列,索引序列,对象空间到裁剪面空间的变换矩阵,所述输出信息为交点的坐标序列包括裁切面空间上的二维坐标,被切的边原本两端顶点的索引序列。

其中,所述合并模块,具体用于:根据所述获取的Unity引擎的内部结构的输入信息和输出信息,基于字典的依靠被切线段原本索引信息合并切点的方式,用一对整数值索引代表一条原有的边,在第一次遍历中遇到未记录的边加入结果集,遇到已被记录的就略过并记录序号合并记录,最后根据合并记录得到不重复的slicePoints数组,并统一修改edgeTopo中的切边序号的方式,合并相同切点。

其中,所述计算模块,具体用于:根据所述合并的相同切点,通过在合并循环边的开始,将循环边索引转为顺时针,以第一点到第二点的方向为前方,以第一条边的中点为起点,垂直方向朝左作射线,根据射线与其余边的交点数量可得知当前遍历为顺时针还是逆时针,当交点数量为奇数时为逆时针,否则为顺时针的方式,合并循环边并计算包容关系。

其中,所述补面模块,具体用于:根据所述合并的循环边并计算的包容关系,在顺时针的循环边中开始补面,从第一条边起依次遍历相邻边检查角度为锐角还是钝角,当发现钝角时沿当前边作射线求最近交点,然后将原本的循环边切分为两个循环边,各自继续递归直到只剩凸多边形为止,进行凸多边形补面。

根据本发明的又一个方面,提供一种计算机设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上述任一项所述的基于Unity引擎的内部结构切面方法。

根据本发明的再一个方面,提供一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一项所述的基于Unity引擎的内部结构切面方法。

可以发现,以上方案,可以获取Unity引擎的内部结构的输入信息和输出信息,其中,该输入信息为对象空间的点坐标序列,索引序列,对象空间到裁剪面空间的变换矩阵,该输出信息为交点的坐标序列包括裁切面空间上的二维坐标,被切的边原本两端顶点的索引序列,和可以根据该获取的Unity引擎的内部结构的输入信息和输出信息,合并相同切点,和可以根据该合并的相同切点,合并循环边并计算包容关系,以及可以根据该合并的循环边并计算的包容关系,断开环并补面,能够实现使用Unity Compute shader对于切面交点信息进行并行计算,利用图形处理器的并行计算缩短计算时间,以达到实时几何体切面计算和根据该几何体切面计算进行补面的效果。

进一步的,以上方案,可以通过先把对象空间的坐标转为以切面为xz平面的坐标系,得到的新坐标的y值正负代表点在切面上方或下方,和当三个点的y值有正有负时代表与切面相交,由y值比例可以得到交点在被切的边上的位置,由此求出坐标的方式,获取Unity引擎的内部结构的输入信息和输出信息;其中,该输入信息为对象空间的点坐标序列,索引序列,对象空间到裁剪面空间的变换矩阵,该输出信息为交点的坐标序列包括裁切面空间上的二维坐标,被切的边原本两端顶点的索引序列,这样的好处是能够实现提高该获取的Unity引擎的内部结构的输入信息和输出信息的准确率。

进一步的,以上方案,可以根据该获取的Unity引擎的内部结构的输入信息和输出信息,基于字典的依靠被切线段原本索引信息合并切点的方式,用一对整数值索引代表一条原有的边,在第一次遍历中遇到未记录的边加入结果集,遇到已被记录的就略过并记录序号合并记录,最后根据合并记录得到不重复的slicePoints数组,并统一修改edgeTopo中的切边序号的方式,合并相同切点,这样的好处是能够实现得到不重复的切边与切点坐标,且转化为二维平面上的多边形的补面问题。

进一步的,以上方案,可以根据该合并的相同切点,通过在合并循环边的开始,将循环边索引转为顺时针,以第一点到第二点的方向为前方,以第一条边的中点为起点,垂直方向朝左作射线,根据射线与其余边的交点数量可得知当前遍历为顺时针还是逆时针,当交点数量为奇数时为逆时针,否则为顺时针的方式,合并循环边并计算包容关系,这样的好处是能够实现在Unity引擎中进行几何体切面计算,能够缩短计算时间,并在处理过程中将每个立体网格的切面补面问题转换为二维空间上的多边形补面问题。

进一步的,以上方案,可以根据该合并的循环边并计算的包容关系,在顺时针的循环边中开始补面,从第一条边起依次遍历相邻边检查角度为锐角还是钝角,当发现钝角时沿当前边作射线求最近交点,然后将原本的循环边切分为两个循环边,各自继续递归直到只剩凸多边形为止,进行凸多边形补面,这样的好处是能够实现达到实时速度生成补面。

附图说明

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

图1是本发明基于Unity引擎的内部结构切面方法一实施例的流程示意图;

图2是本发明基于Unity引擎的内部结构合并相同切点的一举例示意图;

图3是本发明基于合并的相同切点进行合并循环边的一举例示意图;

图4是本发明断开环并补面的一举例示意图;

图5是本发明断开环并补面的另一举例示意图;

图6是本发明基于Unity引擎的内部结构切面装置一实施例的结构示意图;

图7是本发明计算机设备一实施例的结构示意图。

具体实施方式

下面结合附图和实施例,对本发明作进一步的详细描述。特别指出的是,以下实施例仅用于说明本发明,但不对本发明的范围进行限定。同样的,以下实施例仅为本发明的部分实施例而非全部实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

本发明提供一种基于Unity引擎的内部结构切面方法,能够实现使用UnityCompute shader对于切面交点信息进行并行计算,利用图形处理器的并行计算缩短计算时间,以达到实时几何体切面计算和根据该几何体切面计算进行补面的效果。

请参见图1,图1是本发明基于Unity引擎的内部结构切面方法一实施例的流程示意图。需注意的是,若有实质上相同的结果,本发明的方法并不以图1所示的流程顺序为限。如图1所示,该方法包括如下步骤:

S101:获取Unity引擎的内部结构的输入信息和输出信息;其中,该输入信息为对象空间的点坐标序列,索引序列,对象空间到裁剪面空间的变换矩阵,该输出信息为交点的坐标序列包括裁切面空间上的二维坐标,被切的边原本两端顶点的索引序列。

其中,该获取Unity引擎的内部结构的输入信息和输出信息;其中,该输入信息为对象空间的点坐标序列,索引序列,对象空间到裁剪面空间的变换矩阵,该输出信息为交点的坐标序列包括裁切面空间上的二维坐标,被切的边原本两端顶点的索引序列,可以包括:

通过先把对象空间的坐标转为以切面为xz平面的坐标系,得到的新坐标的y值正负代表点在切面上方或下方,和当三个点的y值有正有负时代表与切面相交,由y值比例可以得到交点在被切的边上的位置,由此求出坐标的方式,获取Unity引擎的内部结构的输入信息和输出信息;其中,该输入信息为对象空间的点坐标序列,索引序列,对象空间到裁剪面空间的变换矩阵,该输出信息为交点的坐标序列包括裁切面空间上的二维坐标,被切的边原本两端顶点的索引序列,这样的好处是能够实现提高该获取的Unity引擎的内部结构的输入信息和输出信息的准确率。

在本实施例中,点坐标序列StructuredBuffer,数量可以对应顶点数量,可以用verts表示;索引序列StructuredBuffer,可以由三角面对应的顶点序号数组构成,数量为三角形面数的三倍,此后用indices表示。

在本实施例中,在ComputeShader(计算着色器)中由SV_DispatchThreadID得到当前的线程序号,按照每个线程处理一个三角面的规则获取到对应三角形序号,并得到对应的三个顶点序号在索引序列中的序号(如线程序号为m,则需要处理的三角面序号为m,对应三顶点序号为indices[3m],indices[3m+1],indices[3m+2],对应顶点坐标为verts[indices[3m]],verts[indices[3m+1]],verts[indices[3m+2]])计算三角面是否与切面相交,“三角面与切面相交”等价于“三角面至少各有一个点在切面的两侧”,“两个点存在于切面两侧”等价于“两点到面的垂直向量的点乘结果为负数”,为了简化之后计算交点与坐标输出,这一步中可以先把对象空间的坐标转为以切面为xz平面的坐标系,得到的新坐标的y值正负代表点在切面上方或下方;当三个点的y值有正有负时代表与切面相交,由y值比例可以得到交点在被切的边上的位置,由此求出坐标;切面刚好经过一个顶点的情况视为不相交。

综上,结果可以分为两种:

1、三角形与切面不相交,不输出;

2、或者三角形有两边与切面相交,输出两个切点,以及两个切点在输出的结果数组中的序号。

在本实施例中,交点坐标可以以RWStructuredBuffer的形式输出(因为在切面空间中切点都位于切面上,高度坐标都为0,因此不需要记录,此后称作slicePoints),交点所在的原始边对应的两个端点的序号以RWStructuredBuffer输出可以称作slicedEdges,切点以

RWStructuredBuffer输出可以称作edgeTopo,三者都以

RWStructuredBuffer.IncrementCounter来增加counter数量,但实际序号只由在slicePoints中的序号为准,因为每个三角形片的计算是并行的,最终输出的切边数量与顺序都是不定的,且同一个线程中不同缓存区调用IncrementCounter也并不一定获取到一样的值,尽管最终它们的数量都相同。

在本实施例中,该输出的信息中slicePoints与slicedEdges每个结构数据顺序一一对应,edgeTopo中记录了在前两者中的序号所组成的二元组切边信息,但顺序和前两者并不对应。

S102:根据该获取的Unity引擎的内部结构的输入信息和输出信息,合并相同切点。

其中,该根据该获取的Unity引擎的内部结构的输入信息和输出信息,合并相同切点,可以包括:

根据该获取的Unity引擎的内部结构的输入信息和输出信息,基于字典的依靠被切线段原本索引信息合并切点的方式,用一对整数值索引代表一条原有的边,在第一次遍历中遇到未记录的边加入结果集,遇到已被记录的就略过并记录序号合并记录,最后根据合并记录得到不重复的slicePoints数组,并统一修改edgeTopo中的切边序号的方式,合并相同切点,这样的好处是能够实现得到不重复的切边与切点坐标,且转化为二维平面上的多边形的补面问题。

在本实施例中,当一条边被切割,也就是相邻的两个面被切割时,此边上应该只有一个切点,但数据送入计算的时候每个三角面都会产生全部边上被切的点信息,所以需要对同一条边上的切点进行合并。而不同面在空间转换与投影中浮点数运算存在误差,导致同一切点在不同三角面输出结果中的坐标值不一定一致,虽然可以使用坐标值和阈值的方式直接合并顶点,但考虑到模型细分程度未知,切点数量导致运算量未知,最终使用了基于字典的依靠被切线段原本索引信息合并切点的方式。用一对整数值索引代表一条原有的边,在第一次遍历中遇到未记录的边加入结果集,遇到已被记录的就略过并记录序号合并记录,最后根据合并记录得到不重复的slicePoints数组,并统一修改edgeTopo中的切边序号;由此得到不重复的切边与切点坐标,且转化为二维平面上的多边形的补面问题。

在本实施例中,请参见图2,图2是本发明基于Unity引擎的内部结构合并相同切点的一举例示意图。如图2所示,可以仅关注mn边被切的情况,实际当一个三角形被切时必定会产生两个切点,原三角形索引序列为(p,m,n,n,m,q),切点为s,在计算过程中,可以列表如下:

如图2所示,在该计算过程中,得到的结果可以如下表所示:

如图2所示,在该计算过程中,edgeTopo数组中的序号每一对作为一条切边,但切边内的顺序以及切边在整体数组中的顺序都不一定,可以列表如下:

在本实施例中,其中的index_a与index_b为别的切点在slicePoints数组中的序号。此步中可以预先计算出切边方向向量供后面步骤使用,因为仅需遍历一次,计算复杂度低,也可以使用CPU(中央处理器)进行计算。

在本实施例中,s1与s2理论上坐标相等但因为浮点数计算会存在一定误差;而当n1与n2相等,m1与m2相等时可以确定edge1与edge2是同一条边,并在不需要计算距离的情况下确定了s1与s2是同一个切点。

在本实施例中,在合并相同切点后,得到不重复的切点序列,以及对应新的切点序列的切边索引,将索引代表的边根据切点相连,得到循环边或者链。

S103:根据该合并的相同切点,合并循环边并计算包容关系。

其中,该根据该合并的相同切点,合并循环边并计算包容关系,可以包括:

根据该合并的相同切点,通过在合并循环边的开始,将循环边索引转为顺时针,以第一点到第二点的方向为前方,以第一条边的中点为起点,垂直方向朝左作射线,根据射线与其余边的交点数量可得知当前遍历为顺时针还是逆时针,当交点数量为奇数时为逆时针,否则为顺时针的方式,合并循环边并计算包容关系,这样的好处是能够实现在Unity引擎中进行几何体切面计算,能够缩短计算时间,并在处理过程中将每个立体网格的切面补面问题转换为二维空间上的多边形补面问题。

在本实施例中,请参见图3,图3是本发明基于合并的相同切点进行合并循环边的一举例示意图。如图3,在合并循环边的开始,可以将循环边索引转为顺时针,顺时针的索引可以为(0,1,2,3,4,5,6),逆时针的索引可以为(0,6,5,4,3,2,1),环形数据的开始与结束位置可以任选。如图3所示,以第1点到第2点的方向为前方,以第1条边的中点为起点,垂直方向朝左作射线,根据射线与其余边的交点数量可得知当前遍历为顺时针还是逆时针,当交点数量为奇数时为逆时针,否则为顺时针,对于凹多边形或凸多边形均适用,这样的好处是能够实现在Unity引擎中进行几何体切面计算,能够缩短计算时间,并在处理过程中将每个立体网格的切面补面问题转换为二维空间上的多边形补面问题。

S104:根据该合并的循环边并计算的包容关系,断开环并补面。

其中,该根据该合并的循环边并计算的包容关系,断开环并补面,可以包括:

根据该合并的循环边并计算的包容关系,在顺时针的循环边中开始补面,从第一条边起依次遍历相邻边检查角度为锐角还是钝角,当发现钝角时沿当前边作射线求最近交点,然后将原本的循环边切分为两个循环边,各自继续递归直到只剩凸多边形为止,进行凸多边形补面,这样的好处是能够实现达到实时速度生成补面。

在本实施例中,请参见图4和图5,图4是本发明断开环并补面的一举例示意图,图5是本发明断开环并补面的另一举例示意图。如图4所示,可以将循环边索引转为顺时针,顺时针的索引可以为(0,1,2,3,4,5,6),逆时针的索引可以为(0,6,5,4,3,2,1),可以将原本[0,1,2,3,4,5,6]循环边分为[0,1,2,7,6]与[2,3,4,5,7],其中7为新的交点。如图2所示,可以根据该合并的循环边并计算的包容关系,在顺时针的循环边中开始补面,从第一条边起依次遍历相邻边检查角度为锐角还是钝角,当发现钝角时沿当前边作射线求最近交点,然后将原本的循环边切分为两个循环边,各自继续递归直到只剩凸多边形为止,进行凸多边形补面,这样的好处是能够实现达到实时速度生成补面。如图5所示,可以将循环边索引转为顺时针,顺时针的索引可以为(0,1,2,3,4,5,6),逆时针的索引可以为(0,6,5,4,3,2,1),可以将原本具有包容关系的[0,1,2,3,4,5,6]循环边分为[0,1,2,3,4,5,6]和[7,8,9,10,11]也可以将原本具有包容关系的[0,1,2,3,4,5,6]循环边分为[0,1,2,12,11,10,9,8,7,12,3,4,5,6]。如图5所示,对于有包容关系的循环边,可以以最外部的循环边为待补面的边界,下一层级的为洞,补面时需要留空,用延长内部边与外部边求交点,并剪开的方式可以将内外边界合并为一个边界,转换为一般带凹凸多边形补面问题,这样的好处是能够实现达到实时速度生成补面。

可以发现,在本实施例中,可以获取Unity引擎的内部结构的输入信息和输出信息,其中,该输入信息为对象空间的点坐标序列,索引序列,对象空间到裁剪面空间的变换矩阵,该输出信息为交点的坐标序列包括裁切面空间上的二维坐标,被切的边原本两端顶点的索引序列,和可以根据该获取的Unity引擎的内部结构的输入信息和输出信息,合并相同切点,和可以根据该合并的相同切点,合并循环边并计算包容关系,以及可以根据该合并的循环边并计算的包容关系,断开环并补面,能够实现使用UnityComputeshader对于切面交点信息进行并行计算,利用图形处理器的并行计算缩短计算时间,以达到实时几何体切面计算和根据该几何体切面计算进行补面的效果。

进一步的,在本实施例中,可以通过先把对象空间的坐标转为以切面为xz平面的坐标系,得到的新坐标的y值正负代表点在切面上方或下方,和当三个点的y值有正有负时代表与切面相交,由y值比例可以得到交点在被切的边上的位置,由此求出坐标的方式,获取Unity引擎的内部结构的输入信息和输出信息;其中,该输入信息为对象空间的点坐标序列,索引序列,对象空间到裁剪面空间的变换矩阵,该输出信息为交点的坐标序列包括裁切面空间上的二维坐标,被切的边原本两端顶点的索引序列,这样的好处是能够实现提高该获取的Unity引擎的内部结构的输入信息和输出信息的准确率。

进一步的,在本实施例中,可以根据该获取的Unity引擎的内部结构的输入信息和输出信息,基于字典的依靠被切线段原本索引信息合并切点的方式,用一对整数值索引代表一条原有的边,在第一次遍历中遇到未记录的边加入结果集,遇到已被记录的就略过并记录序号合并记录,最后根据合并记录得到不重复的slicePoints数组,并统一修改edgeTopo中的切边序号的方式,合并相同切点,这样的好处是能够实现得到不重复的切边与切点坐标,且转化为二维平面上的多边形的补面问题。

进一步的,在本实施例中,可以根据该合并的相同切点,通过在合并循环边的开始,将循环边索引转为顺时针,以第一点到第二点的方向为前方,以第一条边的中点为起点,垂直方向朝左作射线,根据射线与其余边的交点数量可得知当前遍历为顺时针还是逆时针,当交点数量为奇数时为逆时针,否则为顺时针的方式,合并循环边并计算包容关系,这样的好处是能够实现在Unity引擎中进行几何体切面计算,能够缩短计算时间,并在处理过程中将每个立体网格的切面补面问题转换为二维空间上的多边形补面问题。

进一步的,在本实施例中,可以根据该合并的循环边并计算的包容关系,在顺时针的循环边中开始补面,从第一条边起依次遍历相邻边检查角度为锐角还是钝角,当发现钝角时沿当前边作射线求最近交点,然后将原本的循环边切分为两个循环边,各自继续递归直到只剩凸多边形为止,进行凸多边形补面,这样的好处是能够实现达到实时速度生成补面。

本发明还提供一种基于Unity引擎的内部结构切面装置,能够实现使用UnityCompute shader对于切面交点信息进行并行计算,利用图形处理器的并行计算缩短计算时间,以达到实时几何体切面计算和根据该几何体切面计算进行补面的效果。

请参见图6,图6是本发明基于Unity引擎的内部结构切面装置一实施例的结构示意图。本实施例中,该基于Unity引擎的内部结构切面装置60包括获取模块61、合并模块62、计算模块63和补面模块64。

该获取模块61,用于获取Unity引擎的内部结构的输入信息和输出信息;其中,该输入信息为对象空间的点坐标序列,索引序列,对象空间到裁剪面空间的变换矩阵,该输出信息为交点的坐标序列包括裁切面空间上的二维坐标,被切的边原本两端顶点的索引序列。

该合并模块62,用于根据该获取的Unity引擎的内部结构的输入信息和输出信息,合并相同切点。

该计算模块63,用于根据该合并的相同切点,合并循环边并计算包容关系。

该补面模块64,用于根据该合并的循环边并计算的包容关系,断开环并补面。

可选地,该获取模块61,可以具体用于:

通过先把对象空间的坐标转为以切面为xz平面的坐标系,得到的新坐标的y值正负代表点在切面上方或下方,和当三个点的y值有正有负时代表与切面相交,由y值比例可以得到交点在被切的边上的位置,由此求出坐标的方式,获取Unity引擎的内部结构的输入信息和输出信息;其中,该输入信息为对象空间的点坐标序列,索引序列,对象空间到裁剪面空间的变换矩阵,该输出信息为交点的坐标序列包括裁切面空间上的二维坐标,被切的边原本两端顶点的索引序列。

可选地,该合并模块62,可以具体用于:

根据该获取的Unity引擎的内部结构的输入信息和输出信息,基于字典的依靠被切线段原本索引信息合并切点的方式,用一对整数值索引代表一条原有的边,在第一次遍历中遇到未记录的边加入结果集,遇到已被记录的就略过并记录序号合并记录,最后根据合并记录得到不重复的slicePoints数组,并统一修改edgeTopo中的切边序号的方式,合并相同切点。

可选地,该计算模块63,可以具体用于:

根据该合并的相同切点,通过在合并循环边的开始,将循环边索引转为顺时针,以第一点到第二点的方向为前方,以第一条边的中点为起点,垂直方向朝左作射线,根据射线与其余边的交点数量可得知当前遍历为顺时针还是逆时针,当交点数量为奇数时为逆时针,否则为顺时针的方式,合并循环边并计算包容关系。

可选地,该补面模块64,可以具体用于:

根据该合并的循环边并计算的包容关系,在顺时针的循环边中开始补面,从第一条边起依次遍历相邻边检查角度为锐角还是钝角,当发现钝角时沿当前边作射线求最近交点,然后将原本的循环边切分为两个循环边,各自继续递归直到只剩凸多边形为止,进行凸多边形补面。

该基于Unity引擎的内部结构切面装置60的各个单元模块可分别执行上述方法实施例中对应步骤,故在此不对各单元模块进行赘述,详细请参见以上对应步骤的说明。

本发明又提供一种计算机设备,如图5所示,包括:至少一个处理器51;以及,与至少一个处理器51通信连接的存储器52;其中,存储器52存储有可被至少一个处理器51执行的指令,指令被至少一个处理器51执行,以使至少一个处理器51能够执行上述的基于Unity引擎的内部结构切面方法。

其中,存储器52和处理器51采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器51和存储器52的各种电路连接在一起。总线还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器51处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器51。

处理器51负责管理总线和通常的处理,还可以提供各种功能,包括定时,外围接口,电压调节、电源管理以及其他控制功能。而存储器52可以被用于存储处理器51在执行操作时所使用的数据。

本发明再提供一种计算机可读存储介质,存储有计算机程序。计算机程序被处理器执行时实现上述方法实施例。

可以发现,以上方案,可以获取Unity引擎的内部结构的输入信息和输出信息,其中,该输入信息为对象空间的点坐标序列,索引序列,对象空间到裁剪面空间的变换矩阵,该输出信息为交点的坐标序列包括裁切面空间上的二维坐标,被切的边原本两端顶点的索引序列,和可以根据该获取的Unity引擎的内部结构的输入信息和输出信息,合并相同切点,和可以根据该合并的相同切点,合并循环边并计算包容关系,以及可以根据该合并的循环边并计算的包容关系,断开环并补面,能够实现使用UnityComputeshader对于切面交点信息进行并行计算,利用图形处理器的并行计算缩短计算时间,以达到实时几何体切面计算和根据该几何体切面计算进行补面的效果。

进一步的,以上方案,可以通过先把对象空间的坐标转为以切面为xz平面的坐标系,得到的新坐标的y值正负代表点在切面上方或下方,和当三个点的y值有正有负时代表与切面相交,由y值比例可以得到交点在被切的边上的位置,由此求出坐标的方式,获取Unity引擎的内部结构的输入信息和输出信息;其中,该输入信息为对象空间的点坐标序列,索引序列,对象空间到裁剪面空间的变换矩阵,该输出信息为交点的坐标序列包括裁切面空间上的二维坐标,被切的边原本两端顶点的索引序列,这样的好处是能够实现提高该获取的Unity引擎的内部结构的输入信息和输出信息的准确率。

进一步的,以上方案,可以根据该获取的Unity引擎的内部结构的输入信息和输出信息,基于字典的依靠被切线段原本索引信息合并切点的方式,用一对整数值索引代表一条原有的边,在第一次遍历中遇到未记录的边加入结果集,遇到已被记录的就略过并记录序号合并记录,最后根据合并记录得到不重复的slicePoints数组,并统一修改edgeTopo中的切边序号的方式,合并相同切点,这样的好处是能够实现得到不重复的切边与切点坐标,且转化为二维平面上的多边形的补面问题。

进一步的,以上方案,可以根据该合并的相同切点,通过在合并循环边的开始,将循环边索引转为顺时针,以第一点到第二点的方向为前方,以第一条边的中点为起点,垂直方向朝左作射线,根据射线与其余边的交点数量可得知当前遍历为顺时针还是逆时针,当交点数量为奇数时为逆时针,否则为顺时针的方式,合并循环边并计算包容关系,这样的好处是能够实现在Unity引擎中进行几何体切面计算,能够缩短计算时间,并在处理过程中将每个立体网格的切面补面问题转换为二维空间上的多边形补面问题。

进一步的,以上方案,可以根据该合并的循环边并计算的包容关系,在顺时针的循环边中开始补面,从第一条边起依次遍历相邻边检查角度为锐角还是钝角,当发现钝角时沿当前边作射线求最近交点,然后将原本的循环边切分为两个循环边,各自继续递归直到只剩凸多边形为止,进行凸多边形补面,这样的好处是能够实现达到实时速度生成补面。

在本发明所提供的几个实施方式中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。

另外,在本发明各个实施方式中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施方式方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

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

相关技术
  • 基于Unity引擎的内部结构切面方法、装置、计算机设备
  • 基于Unity引擎的动态加载方法、装置、计算机设备
技术分类

06120112150970