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

一种多纹理合并方法及系统

文献发布时间:2024-01-17 01:15:20


一种多纹理合并方法及系统

技术领域

本发明涉及三维重建技术领域,更具体地,涉及一种多纹理合并方法及系统。

背景技术

三维模型是物体的多边形表示,通常用计算机或者其它视频设备进行显示。三维模型的构成通常是由多个三角形组成的三角网和其对应的纹理图片,每个三角形的纹理可来自一张小纹理图片或者多张甚至一张大纹理图片中的特定区域,如利用无人机航测建模产生的模型,模型中的每个三角形的纹理来源于航测过程中拍摄的影像,而通常大型的模型的三角形数量达几十万以上,导致模型的纹理数据量远超过模型的几何数据量,纹理数据占了大量的存储和渲染绘制时的资源,其中有效的解决方法就是将众多小纹理合并成一个大纹理。

投影三角形是三维模型中在三维世界坐标系下的三角形投影到影像上得到的三个纹理坐标构成的三角形,纹理坐标即二维的像素坐标。现有常规的多纹理合并方法是将来自于同一张影像的投影三角形形成一组,计算出该组包含其所有投影三角形的外包正矩形,再根据其外包正矩形从影像中裁剪出来得到相应的一个纹理块,接着将这些一个个纹理块按照一定的规则合并成一个大纹理。而这样的做法有一个明显的弊端就是纹理数据量有大量多余部分,如两个模型中的三角形(三维世界坐标系下的三角形)选取的最佳影像是同一张影像,倘若其投影三角形分别对应影像的左上角部分和右下角部分,这样的情况下将会把整张影像的数据量保留下来,造成最后形成的大纹理图过大。

现有技术公开了一种快速三维模型纹理切割重组的方法,该方法通过快速排序法,按照纹理矩形的高从大到小进行排序;根据所有矩形面积计算用于粘贴纹理矩形的最小正方形,采用二叉树方法将所有纹理矩形按照排序依次粘贴到最小正方形内,生成新的三维模型图片;再根据旧的纹理坐标、纹理矩形的起点坐标、原始三维模型图片数据宽和高、新的三维模型图片的宽和高以及纹理矩形贴在新图的起点坐标计算出新的纹理坐标。该方法的缺陷是,完成大矩形的纹理排列得到的纹理数据量有多余部分,合并时间长,合并得到的纹理图过大。

为此,结合以上需求和现有技术缺陷,本申请提出了一种多纹理合并方法及系统。

发明内容

本发明提供了一种多纹理合并方法及系统,能够减少多纹理合并过程中产生的多余或冗余的数据量,减少模型的存储大小和提高模型渲染时的效率,并降低合并处理时长。

本发明的首要目的是为解决上述技术问题,本发明的技术方案如下:

本发明第一方面提供了一种多纹理合并方法,本方法包括以下步骤:

S1、记录三维模型所有投影三角形的纹理坐标值和每个投影三角形的边长,排序后将数据记录至投影三角形列表。

S2、从投影三角形列表中读取一个数据X,与投影三角形列表中其余数据逐一计算形态大小相近值;判断最小的形态大小相近值与设定的投影三角形相近阈值的数值关系,将投影三角形列表的所有数据处理后,将投影三角形以三角形独立标记或三角形合并标记记录至小矩形纹理列表中。

S3、执行投影三角形合并子流程,得到小矩形纹理列表中每个数据对应的小纹理图片。

S4、将小矩形纹理列表中每个数据和其小纹理图片的宽、高及相对偏移位置作为一个小矩形纹理数据记录至候选大矩形纹理列表中,执行小矩形纹理合并子流程,将处理后得到的大矩形纹理数据记录至大矩形纹理列表中。

S5、执行大矩形纹理排列子流程,根据剩余最短边长原则对大矩形纹理列表中的每个数据进行排列得到大纹理图片,记录每个数据在大纹理图片中的偏移位置,根据记录的偏移位置计算大纹理矩形在大纹理图中的真正纹理偏移位置,对大矩形纹理进行调整,输出最终的大纹理图片。

进一步的,步骤S2具体为:从投影三角形列表中读取一个数据X,与投影三角形列表中其余数据逐一计算形态大小相近值,若最小的形态大小相近值大于设定的投影三角形相近阈值,则将数据X从列表中删去,并作为三角形独立标记记录至小矩形纹理列表中;若存在一个数据Y,使得最小形态大小相近值小于等于设定的投影三角形相近阈值,则将数据X和数据Y从列表中删去,并将数据X和数据Y作为三角形合并标记记录至小矩形纹理列表中。

其中,投影三角形为三维模型在三维世界坐标系下的三角形投影到平面影像上得到的三个纹理坐标构成的三角形,投影三角形的形态大小各异,因此两两合并的投影三角形需要形态大小相近,才能得到合理的外包矩形,即两个投影三角形的面积之和占其外包矩形面积的比例最大;而形态大小相近的判断标准是两个投影三角形边长的最长边、次长边和最短边的边长大小值都分别接近。

进一步的,步骤S3中,所述投影三角形合并子流程为:将带有三角形独立标记的投影三角形旋转后裁剪出最小外包矩形的小纹理图片;将带有三角形合并标记的投影三角形各自旋转角度后合并,再进行旋转后裁剪出最小外包矩形的小纹理图片;更新小矩形纹理列表中的纹理坐标值。

进一步的,所述投影三角形合并子流程具体包括以下步骤:

S31、从小矩形纹理列表中提取一个数据,若该数据为带有三角形独立标记的数据,则执行步骤S32,若该数据为带有三角形合并标记的数据,则执行步骤S33。

S32、根据所提取数据中投影三角形的纹理坐标值,计算其包含该投影三角形的正矩形区域大小和其最小外包矩形相对于投影三角形的角度,裁剪出该正矩形区域大小的纹理块图片,再根据计算的角度值对纹理块图片进行旋转和裁剪出该投影三角形的正矩形区域,得到面积最小的纹理块图片作为该数据的纹理块图片,更新该数据中投影三角形的纹理坐标值在面积最小的纹理块图片上的正确位置;执行步骤S35。

S33、根据所提取数据中两个投影三角形的纹理坐标值,分别计算包含所述两个投影三角形的正矩形区域大小和其旋转角度,其中旋转后投影三角形的最长边要与x轴平行;分别裁剪出两个投影三角形正矩形区域大小的纹理块图片,根据计算的角度值对纹理块图片进行旋转和裁剪出所述两个投影三角形的正矩形区域,得到两个面积最小的纹理块图片,分别更新该数据中两个投影三角形的纹理坐标值在此两个面积最小的纹理块图片上的正确位置。

S34、将步骤S33得到的两个纹理块图片进行合并,将两个投影三角形的最长边作为融合边,次长边和最短边均分别相对,计算出合并后最小外包矩形的角度,根据该角度对合并后的矩形纹理块图片进行旋转,裁剪得到面积最小的纹理块图片作为该数据的小矩形纹理块图片,更新该数据中两个投影三角形的纹理坐标值在所述小矩形纹理块图片上的正确位置,执行步骤S35。

S35、重复步骤S31直到小矩形纹理列表中所有数据都处理完成。

进一步的,步骤S4中小矩形纹理合并子流程具体为:从候选大矩形纹理列表中读取一个数据A,与候选大矩形纹理列表中其余数据进行逐一计算大小相近值及合并后的矩形面积之和;判断合并后的矩形长边是否大于设定的边长阈值,并判断小矩形面积之和与合并后矩形面积的差是否大于设定的矩形面积阈值,将符合上述判断条件的数据A从候选大矩形纹理列表中删除并记录至大矩形纹理列表;若存在一个数据B,使得合并后的矩形长边小于设定的边长阈值,同时数据A和数据B的小矩形面积之和与合并后矩形面积的差小于设定的矩形面积阈值,且数据A和数据B之间的大小相近值最小,则将数据A和数据B从候选大矩形纹理列表中删除,合并后得到数据C,并记录至大矩形纹理列表;重复小矩形纹理合并子流程直到候选大纹理矩形列表为空。

进一步的,所述小矩形纹理合并子流程包括以下步骤:

S41、从候选大矩形纹理列表中读取一个数据A,将数据A与候选大矩形纹理列表中其余的每一个数据计算大小相近值及合并后的矩形面积之和;若存在一个数据B,使得合并后的矩形长边小于设定的边长阈值,同时小矩形的面积之和与合并后矩形面积的差小于设定的矩形面积阈值,同时符合大小相近值最小,则将数据A和数据B从候选大矩形纹理列表中删除,执行步骤S42进行合并;若不存在符合上述条件的数据B,则单独将数据A从候选大矩形纹理列表中删除并记录至大矩形纹理列表中,执行步骤S43。

S42、将数据A记录的高和宽与数据B记录的高和宽作比较,将数据B的高宽值对调,更新相对偏移位置后,与数据A的高或宽的值进行合并,并保存为新的数据C,将数据C保存至候选大矩形纹理列表中。

S43、重复步骤S41直到候选大矩形纹理列表为空。

进一步的,步骤S2中,所述形态大小相近值的数学公式为:

distance=d1*d1+d2*d2+d3*d3

其中,d1为两个投影三角形的最长边的差值,d2为两个投影三角形的次长边的差值,d3为两个投影三角形的最短边的差值。

步骤S41中,所述计算大小相近值的数学公式具体为:

Distance=m1*m1+m2*m2

其中m1为小矩形纹理块图片长边的差值,m2为小矩形纹理块图片短边的差值。

进一步的,所述步骤S42具体包括以下两种情况:

若数据A记录的高比宽的值大,且数据B记录的高比宽的值小,则将数据B记录的高和宽值对调,同时将数据B包含的所有小矩形纹理数据中的高和宽值对调,并更新相对偏移位置;更新数据B:将数据B包含的所有小矩形纹理数据的相对偏移位置加上数据A记录的宽值;将数据A和更新后的数据B的所有数据保存为新数据C,使得新数据C的高为数据A和更新后的数据B记录的高的最大值,新数据C的宽为数据A和更新后的数据B的宽的和;将新数据C记录至候选大矩形纹理列表中。

若数据A记录的宽比高的值大,且数据B记录的宽比高的值小,则将数据B记录的高和宽值对调,同时将数据B包含的所有小矩形纹理数据中的高和宽值对调,并更新相对偏移位置;更新数据B:将数据B包含的所有小矩形纹理数据的相对偏移位置加上数据A记录的高值;将数据A和更新后的数据B的所有数据保存为新数据C,使得新数据C的高为数据A和更新后的数据B记录的宽的最大值,新数据C的宽为数据A和更新后的数据B的高的和;将新数据C记录至候选大矩形纹理列表中。

其中,将数据B记录的高和宽值对调的方法为:绕自身中心顺时针旋转90度;新的相对偏移位置为:绕自身中心顺时针旋转90度后矩形四个顶点中的最小值。

进一步的,步骤S5包括以下步骤:

S51、根据大矩形纹理列表所记录的每个矩形大小估算其最终大纹理图片的大小,初始化估算大小的一个条带纹理空间,将条带纹理空间记录到条带纹理空间列表中。

S52、从大矩形纹理列表中读取一个数据,计算所有的条带纹理空间列表中能够填充该大矩形纹理的条带纹理空间,根据剩余最短边长原则选择出填充后该条带纹理空间后剩余的边长最短的条带纹理空间,记录该数据在估算的最终大纹理图片中的偏移位置,并将该条带纹理空间分割成不包含该数据记录的矩形大小范围的三个条带纹理空间,从条带纹理空间列表中删除该条带纹理空间数据,并将新增的三个条带纹理空间记录到条带纹理空间列表中。

S53、重复步骤S52直至所有大矩形纹理列表内的数据都完成处理。

S54、根据大矩形纹理列表记录的每个矩形的大小和其在估算的大纹理图片中的偏移位置,计算包含所有大矩形纹理数据的最大范围,对估算的大纹理图片进行裁剪得到最终的大纹理图片,并且更新各个数据在最终的大纹理图片的偏移位置。

本发明第二方面提供了一种多纹理合并系统,包括存储器、处理器,所述存储器中包括多纹理合并程序,所述多纹理合并程序被所述处理器执行时实现如下步骤:

S1、记录三维模型所有投影三角形的纹理坐标值和每个投影三角形的边长,排序后将数据记录至投影三角形列表。

S2、从投影三角形列表中读取一个数据X,与投影三角形列表中其余数据逐一计算形态大小相近值;判断最小的形态大小相近值与设定的投影三角形相近阈值的数值关系,将投影三角形列表的所有数据处理后,将投影三角形以三角形独立标记或三角形合并标记记录至小矩形纹理列表中。

S3、执行投影三角形合并子流程,得到小矩形纹理列表中每个数据对应的小纹理图片。

S4、将小矩形纹理列表中每个数据和其小纹理图片的宽、高及相对偏移位置作为一个小矩形纹理数据记录至候选大矩形纹理列表中,执行小矩形纹理合并子流程,将处理后得到的大矩形纹理数据记录至大矩形纹理列表中。

S5、执行大矩形纹理排列子流程,根据剩余最短边长原则对大矩形纹理列表中的每个数据进行排列得到大纹理图片,记录每个数据在大纹理图片中的偏移位置。

S6、根据记录的偏移位置计算大纹理矩形在大纹理图中的真正纹理偏移位置,对大矩形纹理进行调整,输出最终的大纹理图片。

与现有技术相比,本发明技术方案的有益效果是:

本发明提供了一种多纹理合并方法及系统,能够根据每个投影三角形的纹理坐标,将两个大小接近的投影三角形通过旋转与合并的方法得到一个小矩形纹理,将多个面积接近的小矩形的纹理先合并得到一个面积在设定范围内的大矩形纹理,然后将这些大矩形纹理按照剩余最短边长的原则合并成最终的大纹理图。这样有效地减少合并纹理图过大的问题和降低合并处理时长。

附图说明

图1为本发明一种多纹理合并方法的流程图。

图2为本发明一种实施例中投影三角形合并的示意图。

图3为本发明一种实施例中小矩形纹理块合并的示意图。

图4为本发明一种实施例中大矩形纹理合并的示意图。

图5为本发明一种实施例中条带纹理空间分割的示意图。

图6为本发明一种多纹理合并系统的示意图。

具体实施方式

为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。

在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。

实施例1

如图1所示,本发明提供了一种多纹理合并方法,本方法包括以下步骤:

S1、记录三维模型所有投影三角形的纹理坐标值和每个投影三角形的边长,排序后将数据记录至投影三角形列表。

需要说明的是,所述投影三角形为三维模型在三维世界坐标系下的三角形投影到平面影像上得到的三个纹理坐标构成的三角形,投影三角形的形态大小各异,因此两两合并的投影三角形需要形态大小相近,才能得到合理的外包矩形,即两个投影三角形的面积之和占其外包矩形面积的比例最大;而形态大小相近的判断标准是两个投影三角形边长的最长边、次长边和最短边的边长大小值都分别接近。

S2、从投影三角形列表中读取一个数据X,与投影三角形列表中其余数据进行逐一计算形态大小相近值;判断得到的最小形态大小相近值与设定的投影三角形相近阈值的数值关系,将投影三角形列表的所有数据处理后,将投影三角形以三角形独立标记或三角形合并标记记录至小矩形纹理列表中。

S3、执行投影三角形合并子流程,得到小矩形纹理列表中每个数据对应的小纹理图片。

需要说明的是,投影三角形若没有与其合适的投影三角形来合并,则处理的方法是计算其最小外包矩形与该投影三角形的角度,根据该角度对纹理块进行旋转,裁剪得到面积最小的矩形纹理块。

S4、将小矩形纹理列表中每个数据和其小纹理图片的宽、高及相对偏移位置作为一个小矩形纹理数据记录至候选大矩形纹理列表中,执行小矩形纹理合并子流程,将处理后得到的大矩形纹理数据记录至大矩形纹理列表中。

需要说明的是,通常三维模型的三角形数量众多,所以合并后的小矩形纹理数量依然较多,而且小矩形纹理彼此之间的面积可能相差较大,如果不先做处理就将这些小矩形纹理进行合并成大纹理,会造成处理时间过长和合并后的大纹理图中存在较多的无数据部分,所以为了有效解决这个问题,先将这些小矩形纹理不断地合并成一个符合软件设定的面积大小的矩形纹理,这些不断合并形成的较大矩形纹理彼此之间面积相近,有利于减少合并成一张大矩形纹理的大小。而小矩形纹理的两两合并需大小相近,大小相近的判断标准是矩形的长边和短边的边长分别相近,合并后的矩形长边要小于设定值和小矩形的面积之和与合并后矩形面积的差也在设定值的范围内才可以进行合并。以矩形中的最长一边为矩形的宽,短边为高进行合并,若原始矩形的最长边是高则先旋转,如图3所示。

S5、执行大矩形纹理排列子流程,根据剩余最短边长原则对大矩形纹理列表中的每个数据进行排列得到大纹理图片,记录每个数据在大纹理图片中的偏移位置,根据记录的偏移位置计算大纹理矩形在大纹理图中的真正纹理偏移位置,对大矩形纹理进行调整,输出最终的大纹理图片。

需要说明的是,矩形纹理合并成一张大矩形纹理是按照剩余最短边长的原则,如图4所示,在一个具体的实施例中,纹理1加入原始的条带纹理空间0并将其分割出3个的条带纹理空间。其中条带纹理空间的分割如图5所示,填入矩形纹理后,原始的条带纹理空间0分割成条带纹理空间1,条带纹理空间2,条带纹理空间3。从条带纹理空间列表中删掉条带纹理空间0并加入分割出的3个的条带纹理空间到条带纹理空间列表中。纹理2在条带纹理空间列表中所有条带纹理空间中剩余最短边长比纹理3的小,所以纹理2比纹理3先加入,并且再对其加入的条带纹理空间分割,依次操作,当所有纹理块都处理完后,裁剪掉多余的条带纹理空间,即得到最终的大纹理图。

进一步的,步骤S2具体为:从投影三角形列表中读取一个数据X,与投影三角形列表中其余数据进行逐一计算形态大小相近值,若得到的最小形态大小相近值大于设定的投影三角形相近阈值,则将数据X从列表中删去,并作为三角形独立标记记录至小矩形纹理列表中;若存在一个数据Y,使得最小形态大小相近值小于等于设定的投影三角形相近阈值,则将数据X和数据Y从列表中删去,并将数据X和数据Y作为三角形合并标记记录至小矩形纹理列表中。

在一个具体的实施例中,本发明的具体实施过程为:

步骤一:将三维模型的所有三角形,其最佳影像的名字和其投影三角形的纹理坐标值逐个记录到投影三角形列表中。

步骤二:对投影三角形列表中的每一个数据,计算其投影三角形的边长的大小,并对三条边长的值从大到小排序。

步骤三:从投影三角形列表读出一个数据,该数据与列表中除它之外的每一个数据计算其形态大小相近值(公式一)。把其中最小的形态大小相近值与软件设定的投影三角形相近阈值比较,如果小于此阈值,则代表此两个投影三角形可以合并,那么将这两个数据作为三角形合并标记,记录到小矩形纹理列表中,并且这两个数据从投影三角形列表中删除。如果大于此阈值,则将这个数据作为三角形独立标记,记录到小矩形纹理列表中,并且这个数据从投影三角形列表中删除。

distance=d1*d1+d2*d2+d3*d3        (公式一)

其中d1为两个投影三角形的最长边的差值,d2为两个投影三角形的次长边的差值,d3为两个投影三角形的最短边的差值。

步骤四:重复步骤三直到投影三角形列表为空,所有数据都处理完。

步骤五:进入三角形合并子流程处理,得到小矩形纹理列表中的每个数据对应的小纹理图片。

步骤六:进入小矩形纹理合并子流程处理,处理后的数据都记录在大矩形纹理列表中。

步骤七:进入大矩形纹理排列子流程处理,此子流程的排列原则是剩余最短边长,处理后大矩形纹理列表中每个数据记录了其在最终大纹理图中的偏移位置。

步骤八:读取大矩形纹理列表中每个数据A,根据其记录的在最终大纹理图中的偏移位置P,将数据中所包含的每个小矩形纹理数据B,计算其真正的偏移位置,真正的偏移位置Y等于小矩形纹理数据B在数据A中相对偏移位置O加上偏移位置P,如果数据B记录的小矩形宽与纹理图片的宽不一致的话此时需先对纹理图片进行90度旋转,小矩形纹理数据B的纹理图片复制填充到偏移位置Q处。

步骤九:重复步骤八直到大矩形纹理列表中每个数据都复制填充到最终大纹理图,流程结束,最终大纹理图为最后结果。

实施例2

基于上述实施例1,结合图2-图5,本实施例详细阐述本发明中投影三角形合并子流程、小矩形纹理合并子流程和大矩形纹理排列子流程具体步骤。

进一步的,步骤S3中,所述投影三角形合并子流程为:将带有三角形独立标记的投影三角形旋转后裁剪出最小外包矩形的小纹理图片;将带有三角形合并标记的投影三角形各自旋转角度后合并,再进行旋转后裁剪出最小外包矩形的小纹理图片;更新小矩形纹理列表中的纹理坐标值。

进一步的,所述投影三角形合并子流程具体包括以下步骤:

S31、从小矩形纹理列表中提取一个数据,若该数据为带有三角形独立标记的数据,则执行步骤S32,若该数据为带有三角形合并标记的数据,则执行步骤S33。

S32、根据所提取数据中投影三角形的纹理坐标值,计算其包含该投影三角形的正矩形区域大小和其最小外包矩形相对于投影三角形的角度,裁剪出该正矩形区域大小的纹理块图片,再根据计算的角度值对纹理块图片进行旋转和裁剪出该投影三角形的正矩形区域,得到面积最小的纹理块图片作为该数据的纹理块图片,更新该数据中投影三角形的纹理坐标值在面积最小的纹理块图片上的正确位置;执行步骤S35。

S33、根据所提取数据中两个投影三角形的纹理坐标值,分别计算包含所述两个投影三角形的正矩形区域大小和其旋转角度,其中旋转后投影三角形的最长边要与x轴平行;分别裁剪出两个投影三角形正矩形区域大小的纹理块图片,根据计算的角度值对纹理块图片进行旋转和裁剪出所述两个投影三角形的正矩形区域,得到两个面积最小的纹理块图片,分别更新该数据中两个投影三角形的纹理坐标值在此两个面积最小的纹理块图片上的正确位置。

S34、将步骤S33得到的两个纹理块图片进行合并,将两个投影三角形的最长边作为融合边,次长边和最短边均分别相对,计算出合并后最小外包矩形的角度,根据该角度对合并后的矩形纹理块图片进行旋转,裁剪得到面积最小的纹理块图片作为该数据的小矩形纹理块图片,更新该数据中两个投影三角形的纹理坐标值在所述小矩形纹理块图片上的正确位置,执行步骤S35。

S35、重复步骤S31直到小矩形纹理列表中所有数据都处理完成。

进一步的,步骤S4中小矩形纹理合并子流程具体为:从候选大矩形纹理列表中读取一个数据A,与候选大矩形纹理列表中其余数据进行逐一计算大小相近值及合并后的矩形面积之和;判断合并后的矩形长边是否大于设定的边长阈值,并判断小矩形面积之和与合并后矩形面积的差是否大于设定的矩形面积阈值,将符合上述判断条件的数据A从候选大矩形纹理列表中删除并记录至大矩形纹理列表;若存在一个数据B,使得合并后的矩形长边小于设定的边长阈值,同时数据A和数据B的小矩形面积之和与合并后矩形面积的差小于设定的矩形面积阈值,且数据A和数据B之间的大小相近值最小,则将数据A和数据B从候选大矩形纹理列表中删除,合并后得到数据C,并记录至大矩形纹理列表;重复小矩形纹理合并子流程直到候选大纹理矩形列表为空。

需要说明的是,两个投影三角形合并过程的示意图如图2所示,分别将两个投影三角形进行旋转,旋转后投影三角形的最长边与x轴平行,接着旋转后的两个投影三角形以最长边作为融合边,次长边和最短边都分别与之相对,进行合并后计算出其最小外包矩形的角度,根据该角度将合并后矩形纹理块进行旋转,裁剪得到面积最小的矩形纹理块。

投影三角形若没有与其合适的投影三角形来合并,则处理的方法是计算其最小外包矩形与该投影三角形的角度,根据该角度对纹理块进行旋转,裁剪得到面积最小的矩形纹理块。

在一个具体的实施例中,三角形合并子流程的实现步骤如下:步骤一:从对小矩形纹理列表中的取出一个数据,如果数据记录的标记是三角形独立标记,则进入步骤二,否则进入步骤三。

步骤二:根据投影三角形的纹理坐标值,计算其包含该投影三角形正矩形区域大小和其最小外包矩形的角度,从其记录的影像裁剪出该正矩形区域大小的纹理块图片,接着根据计算的角度值对纹理块图片进行旋转和裁剪出该投影三角形正矩形区域,得到面积最小的纹理块图片,作为该数据的纹理块图片,更新该数据中投影三角形的纹理坐标值在面积最小的纹理块图片的正确位置。进入步骤五。

步骤三:根据两个投影三角形的纹理坐标值,分别计算包含该投影三角形正矩形区域大小和其旋转角度(旋转后最长边要与x轴平行),分别从其记录的影像裁剪出该正矩形区域大小的纹理块图片,接着根据计算的角度值对纹理块图片进行旋转和裁剪出该投影三角形正矩形区域,得到两个面积最小的纹理块图片,分别更新两个投影三角形的纹理坐标值在此两个面积最小的纹理块图片的正确位置。

步骤四:进行两个纹理块图片合并,使得合并后的效果是其中的两个投影三角形以最长边作为融合边,次长边和最短边都分别与之相对,并计算出其最小外包矩形的角度,根据该角度将合并后矩形纹理块图片进行旋转,裁剪得到面积最小的矩形纹理块图片,作为该数据的纹理块图片,更新该数据的两个投影三角形的纹理坐标值在该面积最小的矩形纹理块图片中所在的正确位置。进入步骤五。

步骤五:重复步骤一直到小矩形纹理列表中每个数据都处理完。

进一步的,所述小矩形纹理合并子流程包括以下步骤:

S41、从候选大矩形纹理列表中读取一个数据A,将数据A与候选大矩形纹理列表中其余的每一个数据计算大小相近值及合并后的矩形面积之和;若存在一个数据B,使得合并后的矩形长边小于设定的边长阈值,同时小矩形的面积之和与合并后矩形面积的差小于设定的矩形面积阈值,同时符合大小相近值最小,则将数据A和数据B从候选大矩形纹理列表中删除,执行步骤S42进行合并;若不存在符合上述条件的数据B,则单独将数据A从候选大矩形纹理列表中删除并记录至大矩形纹理列表中,执行步骤S43。

S42、将数据A记录的高和宽与数据B记录的高和宽作比较,将数据B的高宽值对调,更新相对偏移位置后,与数据A的高或宽的值进行合并,并保存为新的数据C,将数据C保存至候选大矩形纹理列表中。

S43、重复步骤S41直到候选大矩形纹理列表为空。

进一步的,步骤S2中,所述形态大小相近值的数学公式为:

distance=d1*d1+d2*d2+d3*d3

其中,d1为两个投影三角形的最长边的差值,d2为两个投影三角形的次长边的差值,d3为两个投影三角形的最短边的差值。

步骤S41中,所述计算大小相近值的数学公式具体为:

Distance=m1*m1+m2*m2

其中m1为小矩形纹理块图片长边的差值,m2为小矩形纹理块图片短边的差值。

进一步的,所述步骤S42具体包括以下两种情况:

若数据A记录的高比宽的值大,且数据B记录的高比宽的值小,则将数据B记录的高和宽值对调,同时将数据B包含的所有小矩形纹理数据中的高和宽值对调,并更新相对偏移位置;更新数据B:将数据B包含的所有小矩形纹理数据的相对偏移位置加上数据A记录的宽值;将数据A和更新后的数据B的所有数据保存为新数据C,使得新数据C的高为数据A和更新后的数据B记录的高的最大值,新数据C的宽为数据A和更新后的数据B的宽的和;将新数据C记录至候选大矩形纹理列表中。

若数据A记录的宽比高的值大,且数据B记录的宽比高的值小,则将数据B记录的高和宽值对调,同时将数据B包含的所有小矩形纹理数据中的高和宽值对调,并更新相对偏移位置;更新数据B:将数据B包含的所有小矩形纹理数据的相对偏移位置加上数据A记录的高值;将数据A和更新后的数据B的所有数据保存为新数据C,使得新数据C的高为数据A和更新后的数据B记录的宽的最大值,新数据C的宽为数据A和更新后的数据B的高的和;将新数据C记录至候选大矩形纹理列表中。

其中,将数据B记录的高和宽值对调的方法为:绕自身中心顺时针旋转90度;新的相对偏移位置为:绕自身中心顺时针旋转90度后矩形四个顶点中的最小值。

在一个具体的实施例中,小矩形纹理合并子流程实现步骤如下:步骤一:从对小矩形纹理列表中的读出一个数据和其纹理块图片的宽,高,相对偏移位置(初始的相对偏移位置为0)作为一个小矩形纹理数据记录到候选大矩形纹理列表中。重复步骤一直到小矩形纹理列表的所有数据都处理了。

步骤二:候选大矩形纹理列表读出一个数据A,该数据与列表中除它之外的每一个数据,计算计算其大小相近值(公式二)和合并后的矩形面积之和。把其中合并后的矩形长边小于软件边长设定值,同时小矩形的面积之和与合并后矩形面积的差小于软件面积设定值以及大小相近值最小的数据为最佳,若存在这样的数据B,则将此两个要合并的数据从候选大矩形纹理列表中删除,进入步骤三进行合并,否则将该数据A从候选大矩形纹理列表中删除并记录到大矩形纹理列表中并且进入到步骤四。

Distance = m1*m1+m2*m2        (公式二)

其中m1为矩形长边的差值,m2为矩形短边的差值。

步骤三:两个数据的合并方法是,数据A的记录的高和宽相比较,

(1)如果高比宽的值大,如果数据B的记录高比宽的值要小,则先将数据B记录的高和宽的值对调(即绕自身中心顺时针旋转90度),并且将数据B包含的所有小矩形纹理数据中的宽和高值也对调同时更新相对偏移位置(新的相对位置为绕自身中心顺时针旋转90度后矩形四个顶点中的最小值),接下来数据A保持不变,数据B包含的所有小矩形纹理数据的相对偏移位置都要加上数据A的宽,将数据A和数据B的所有数据保存到新数据C中,更新的新数据C的高为数据A和数据B中高的最大那个值,宽为数据A和数据B宽的和,将新数据C记录到候选大矩形纹理列表中。

(2)如果宽比高的值大,如果数据B的记录宽比高的值要小,则先将数据B记录的高和宽的值对调(即绕自身中心顺时针旋转90度),并且将数据B包含的所有小矩形纹理数据中的宽和高值也对调同时更新相对偏移位置(新的相对位置为绕自身中心顺时针旋转90度后矩形四个顶点中的最小值),接下来数据A保持不变,数据B包含的所有小矩形纹理数据的相对偏移位置都要加上数据A的高,将数据A和数据B的所有数据保存到新数据C中,更新的新数据C的高为数据A和数据B中宽的最大那个值,高为数据A和数据B高的和,将新数据C记录到候选大矩形纹理列表中。

步骤四:重复步骤二直到候选大矩形纹理列表为空。

进一步的,步骤S5包括以下步骤:

S51、根据大矩形纹理列表所记录的每个矩形大小估算其最终大纹理图片的大小,初始化估算大小的一个条带纹理空间,将条带纹理空间记录到条带纹理空间列表中。

S52、从大矩形纹理列表中读取一个数据,计算所有的条带纹理空间列表中能够填充该大矩形纹理的条带纹理空间,根据剩余最短边长原则选择出填充后该条带纹理空间后剩余的边长最短的条带纹理空间,记录该数据在估算的最终大纹理图片中的偏移位置,并将该条带纹理空间分割成不包含该数据记录的矩形大小范围的三个条带纹理空间,从条带纹理空间列表中删除该条带纹理空间数据,并将新增的三个条带纹理空间记录到条带纹理空间列表中。

S53、重复步骤S52直至所有大矩形纹理列表内的数据都完成处理。

S54、根据大矩形纹理列表记录的每个矩形的大小和其在估算的大纹理图片中的偏移位置,计算包含所有大矩形纹理数据的最大范围,对估算的大纹理图片进行裁剪得到最终的大纹理图片,并且更新各个数据在最终的大纹理图片的偏移位置。

在一个具体的实施例中,大矩形纹理排列子流程实现步骤如下:

步骤一:根据大矩形纹理列表所记录的每个矩形大小估算其最终大纹理图片的大小,初始化估算大小的一个条带纹理空间,将条带纹理空间记录到条带纹理空间列表中。

步骤二:大矩形纹理列表中读出一个数据,计算所有的条带纹理空间列表中能够填充该大矩形纹理的条带纹理空间,并且从中选择出填充后该条带纹理空间后剩余的边长最短为最佳的条带纹理空间(此选择方法为剩余最短边长的原则),记录该数据在估算的最终大纹理图片中的偏移位置并且该条带纹理空间进行分割成不包含该数据记录的矩形大小范围的三个条带纹理空间(如图4所示),条带纹理空间列表删除该条带并将新增的三个条带纹理空间记录到条带纹理空间列表中。

步骤三:重复步骤二直到大矩形纹理列表中所有的数据都处理了。

步骤四:根据大矩形纹理列表所记录的每个矩形大小和其在估算的大纹理图片中的偏移位置,计算包含所有大矩形纹理数据的最大范围,对估算的大纹理图片进行裁剪得到最终的大纹理图片,并且更新各个数据在最终的大纹理图片的偏移位置。

实施例3

如图6所示,本发明还提供了一种多纹理合并系统,包括有存储器和处理器,所述存储器中包括多纹理合并程序,所述多纹理合并程序被所述处理器执行时实现如下步骤:

S1、记录三维模型所有投影三角形的纹理坐标值和每个投影三角形的边长,排序后将数据记录至投影三角形列表。

S2、从投影三角形列表中读取一个数据X,与投影三角形列表中其余数据进行逐一计算形态大小相近值;判断得到的最小形态大小相近值与设定的投影三角形相近阈值的数值关系,将投影三角形列表的所有数据处理后,将投影三角形以三角形独立标记或三角形合并标记记录至小矩形纹理列表中。

S3、执行投影三角形合并子流程,得到小矩形纹理列表中每个数据对应的小纹理图片。

S4、将小矩形纹理列表中每个数据和其小纹理图片的宽、高及相对偏移位置作为一个小矩形纹理数据记录至候选大矩形纹理列表中,执行小矩形纹理合并子流程,将处理后得到的大矩形纹理数据记录至大矩形纹理列表中。

S5、执行大矩形纹理排列子流程,根据剩余最短边长原则对大矩形纹理列表中的每个数据进行排列得到大纹理图片,记录每个数据在大纹理图片中的偏移位置,根据记录的偏移位置计算大纹理矩形在大纹理图中的真正纹理偏移位置,对大矩形纹理进行调整,输出最终的大纹理图片。

进一步的,步骤S2具体为:从投影三角形列表中读取一个数据X,与投影三角形列表中其余数据进行逐一计算形态大小相近值,若得到的最小形态大小相近值大于设定的投影三角形相近阈值,则将数据X从列表中删去,并作为三角形独立标记记录至小矩形纹理列表中;若存在一个数据Y,使得最小形态大小相近值小于等于设定的投影三角形相近阈值,则将数据X和数据Y从列表中删去,并将数据X和数据Y作为三角形合并标记记录至小矩形纹理列表中。

其中,投影三角形为三维模型在三维世界坐标系下的三角形投影到平面影像上得到的三个纹理坐标构成的三角形,投影三角形的形态大小各异,因此两两合并的投影三角形需要形态大小相近,才能得到合理的外包矩形,即两个投影三角形的面积之和占其外包矩形面积的比例最大;而形态大小相近的判断标准是两个投影三角形边长的最长边、次长边和最短边的边长大小值都分别接近。

进一步的,步骤S3中,所述投影三角形合并子流程为:将带有三角形独立标记的投影三角形旋转后裁剪出最小外包矩形的小纹理图片;将带有三角形合并标记的投影三角形各自旋转角度后合并,再进行旋转后裁剪出最小外包矩形的小纹理图片;更新小矩形纹理列表中的纹理坐标值。

进一步的,所述投影三角形合并子流程具体包括以下步骤:

S31、从小矩形纹理列表中提取一个数据,若该数据为带有三角形独立标记的数据,则执行步骤S32,若该数据为带有三角形合并标记的数据,则执行步骤S33。

S32、根据所提取数据中投影三角形的纹理坐标值,计算其包含该投影三角形的正矩形区域大小和其最小外包矩形相对于投影三角形的角度,裁剪出该正矩形区域大小的纹理块图片,再根据计算的角度值对纹理块图片进行旋转和裁剪出该投影三角形的正矩形区域,得到面积最小的纹理块图片作为该数据的纹理块图片,更新该数据中投影三角形的纹理坐标值在面积最小的纹理块图片上的正确位置;执行步骤S35。

S33、根据所提取数据中两个投影三角形的纹理坐标值,分别计算包含所述两个投影三角形的正矩形区域大小和其旋转角度,其中旋转后投影三角形的最长边要与x轴平行;分别裁剪出两个投影三角形正矩形区域大小的纹理块图片,根据计算的角度值对纹理块图片进行旋转和裁剪出所述两个投影三角形的正矩形区域,得到两个面积最小的纹理块图片,分别更新该数据中两个投影三角形的纹理坐标值在此两个面积最小的纹理块图片上的正确位置。

S34、将步骤S33得到的两个纹理块图片进行合并,将两个投影三角形的最长边作为融合边,次长边和最短边均分别相对,计算出合并后最小外包矩形的角度,根据该角度对合并后的矩形纹理块图片进行旋转,裁剪得到面积最小的纹理块图片作为该数据的小矩形纹理块图片,更新该数据中两个投影三角形的纹理坐标值在所述小矩形纹理块图片上的正确位置,执行步骤S35。

S35、重复步骤S31直到小矩形纹理列表中所有数据都处理完成。

进一步的,步骤S4中小矩形纹理合并子流程具体为:从候选大矩形纹理列表中读取一个数据A,与候选大矩形纹理列表中其余数据进行逐一计算大小相近值及合并后的矩形面积之和;判断合并后的矩形长边是否大于设定的边长阈值,并判断小矩形面积之和与合并后矩形面积的差是否大于设定的矩形面积阈值,将符合上述判断条件的数据A从候选大矩形纹理列表中删除并记录至大矩形纹理列表;若存在一个数据B,使得合并后的矩形长边小于设定的边长阈值,同时数据A和数据B的小矩形面积之和与合并后矩形面积的差小于设定的矩形面积阈值,且数据A和数据B之间的大小相近值最小,则将数据A和数据B从候选大矩形纹理列表中删除,合并后得到数据C,并记录至大矩形纹理列表;重复小矩形纹理合并子流程直到候选大纹理矩形列表为空。

进一步的,所述小矩形纹理合并子流程包括以下步骤:

S41、从候选大矩形纹理列表中读取一个数据A,将数据A与候选大矩形纹理列表中其余的每一个数据计算大小相近值及合并后的矩形面积之和;若存在一个数据B,使得合并后的矩形长边小于设定的边长阈值,同时小矩形的面积之和与合并后矩形面积的差小于设定的矩形面积阈值,同时符合大小相近值最小,则将数据A和数据B从候选大矩形纹理列表中删除,执行步骤S42进行合并;若不存在符合上述条件的数据B,则单独将数据A从候选大矩形纹理列表中删除并记录至大矩形纹理列表中,执行步骤S43。

S42、将数据A记录的高和宽与数据B记录的高和宽作比较,将数据B的高宽值对调,更新相对偏移位置后,与数据A的高或宽的值进行合并,并保存为新的数据C,将数据C保存至候选大矩形纹理列表中。

S43、重复步骤S41直到候选大矩形纹理列表为空。

进一步的,步骤S2中,所述形态大小相近值的数学公式为:

distance=d1*d1+d2*d2+d3*d3

其中,d1为两个投影三角形的最长边的差值,d2为两个投影三角形的次长边的差值,d3为两个投影三角形的最短边的差值。

步骤S41中,所述计算大小相近值的数学公式具体为:

Distance=m1*m1+m2*m2

其中m1为小矩形纹理块图片长边的差值,m2为小矩形纹理块图片短边的差值。

进一步的,所述步骤S42具体包括以下两种情况:

若数据A记录的高比宽的值大,且数据B记录的高比宽的值小,则将数据B记录的高和宽值对调,同时将数据B包含的所有小矩形纹理数据中的高和宽值对调,并更新相对偏移位置;更新数据B:将数据B包含的所有小矩形纹理数据的相对偏移位置加上数据A记录的宽值;将数据A和更新后的数据B的所有数据保存为新数据C,使得新数据C的高为数据A和更新后的数据B记录的高的最大值,新数据C的宽为数据A和更新后的数据B的宽的和;将新数据C记录至候选大矩形纹理列表中。

若数据A记录的宽比高的值大,且数据B记录的宽比高的值小,则将数据B记录的高和宽值对调,同时将数据B包含的所有小矩形纹理数据中的高和宽值对调,并更新相对偏移位置;更新数据B:将数据B包含的所有小矩形纹理数据的相对偏移位置加上数据A记录的高值;将数据A和更新后的数据B的所有数据保存为新数据C,使得新数据C的高为数据A和更新后的数据B记录的宽的最大值,新数据C的宽为数据A和更新后的数据B的高的和;将新数据C记录至候选大矩形纹理列表中。

其中,将数据B记录的高和宽值对调的方法为:绕自身中心顺时针旋转90度;新的相对偏移位置为:绕自身中心顺时针旋转90度后矩形四个顶点中的最小值。

进一步的,步骤S5包括以下步骤:

S51、根据大矩形纹理列表所记录的每个矩形大小估算其最终大纹理图片的大小,初始化估算大小的一个条带纹理空间,将条带纹理空间记录到条带纹理空间列表中。

S52、从大矩形纹理列表中读取一个数据,计算所有的条带纹理空间列表中能够填充该大矩形纹理的条带纹理空间,根据剩余最短边长原则选择出填充后该条带纹理空间后剩余的边长最短的条带纹理空间,记录该数据在估算的最终大纹理图片中的偏移位置,并将该条带纹理空间分割成不包含该数据记录的矩形大小范围的三个条带纹理空间,从条带纹理空间列表中删除该条带纹理空间数据,并将新增的三个条带纹理空间记录到条带纹理空间列表中。

S53、重复步骤S52直至所有大矩形纹理列表内的数据都完成处理。

S54、根据大矩形纹理列表记录的每个矩形的大小和其在估算的大纹理图片中的偏移位置,计算包含所有大矩形纹理数据的最大范围,对估算的大纹理图片进行裁剪得到最终的大纹理图片,并且更新各个数据在最终的大纹理图片的偏移位置。

本实施例还提出了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一个可执行指令,所述可执行指令使处理器执行如下操作:

S1、记录三维模型所有投影三角形的纹理坐标值和每个投影三角形的边长,排序后将数据记录至投影三角形列表。

S2、从投影三角形列表中读取一个数据X,与投影三角形列表中其余数据进行逐一计算形态大小相近值;判断得到的最小形态大小相近值与设定的投影三角形相近阈值的数值关系,将投影三角形列表的所有数据处理后,将投影三角形以三角形独立标记或三角形合并标记记录至小矩形纹理列表中。

S3、执行投影三角形合并子流程,得到小矩形纹理列表中每个数据对应的小纹理图片。

S4、将小矩形纹理列表中每个数据和其小纹理图片的宽、高及相对偏移位置作为一个小矩形纹理数据记录至候选大矩形纹理列表中,执行小矩形纹理合并子流程,将处理后得到的大矩形纹理数据记录至大矩形纹理列表中。

S5、执行大矩形纹理排列子流程,根据剩余最短边长原则对大矩形纹理列表中的每个数据进行排列得到大纹理图片,记录每个数据在大纹理图片中的偏移位置,根据记录的偏移位置计算大纹理矩形在大纹理图中的真正纹理偏移位置,对大矩形纹理进行调整,输出最终的大纹理图片。

在本申请所提供的实施例中,应该理解到,所揭露的系统和方法,能够通过其它的方式实现。本领域普通技术人员能够理解:实现上述方法实施例的全部或部分步骤能够通过程序指令相关的硬件来完成,前述的程序能够存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种能够存储程序代码的介质。

或者,本发明上述实施例如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也能够存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分能够以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备。

执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种能够存储程序代码的介质。

显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。附图中描述结构位置关系的图标仅用于示例性说明,不能理解为对本专利的限制。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。

技术分类

06120116085470