一种纹理合并方法及系统与流程

文档序号:13513934阅读:355来源:国知局
一种纹理合并方法及系统与流程

本发明涉及地理空间信息系统技术领域,更具体地说,涉及一种纹理合并方法及系统。



背景技术:

在利用纹理进行场景渲染时,为了提高场景渲染的渲染效率,往往需要对小的、零散的小纹理合并成大纹理。

现有的一种纹理合并方法中,合并后的大纹理的形状为正方形,大纹理边长的默认值是1024,外界人员可以根据实际需要更改大纹理的边长。

然而,现有的一种纹理合并方法,有时会出现外界人员无规则设置的大纹理的边长过大,导致大纹理的大小过大的情况,造成大纹理资源浪费的情况。

综上所述,如何减少大纹理资源浪费的情况是目前本领域技术人员亟待解决的问题。



技术实现要素:

本发明的目的是提供一种纹理合并方法,其能在一定程度上解决如何减少大纹理资源浪费的情况的技术问题。本发明还提供了一种纹理合并系统。

为了实现上述目的,本发明提供如下技术方案:

一种纹理合并方法,包括:

获取待合并的数量为n的小纹理;

计算n个所述小纹理的面积之和,基于所述小纹理的面积之和计算所述小纹理合并后的大纹理的起始边长值,所述起始边长值为使所述大纹理的面积等于或大于所述小纹理的面积之和的最小值;

遍历n个所述小纹理的宽度值和高度值,在所述宽度值和所述高度值中挑选数值最大的值作为最大值;

判断所述起始边长值是否大于或等于所述最大值,若是,则将所述起始边长值作为所述大纹理的最终边长值,若否,则将所述最大值作为所述大纹理的最终边长值,以供将所述小纹理合并至边长为所述最终边长值的所述大纹理中。

优选的,所述基于所述小纹理的面积之和计算所述小纹理合并后的大纹理的起始边长值,包括:

按照下列公式计算所述小纹理合并后的大纹理的起始边长值:

pow(4,i-1)≤sunsize,pow(4,i)≥sunsize,tsize1=pow(2,i);

其中,pow函数为幂函数,sunsize为所述小纹理的面积之和,tsize1为所述小纹理合并后的大纹理的起始边长值,i为所述起始边长值对应的幂的大小,初始化时i=0。

优选的,判断所述起始边长值是否大于或等于所述最大值来确定所述大纹理的最终边长值,包括:

按照下列公式确定所述大纹理的最终边长值:

size≤pow(2,(i+n)),size≥pow(2,(i+n-1)),tsize=pow(2,(i+n));

其中size为所述最大值,tsize为所述大纹理的最终边长值,初始化时n=0。

优选的,确定所述大纹理的最终边长值之后,还包括:

判断所述大纹理的最终边长值是否大于预先设定的阈值,若是,则调整所述大纹理的最终边长值为所述预先设定的阈值,若否,则不做调整。

本发明还提供了一种纹理合并系统,包括:

获取模块,用于获取待合并的数量为n的小纹理;

计算模块,用于计算n个所述小纹理的面积之和,基于所述小纹理的面积之和计算所述小纹理合并后的大纹理的起始边长值,所述起始边长值为使所述大纹理的面积等于或大于所述小纹理的面积之和的最小值;

遍历模块,用于遍历n个所述小纹理的宽度值和高度值,在所述宽度值和所述高度值中挑选数值最大的值作为最大值;

判断模块,用于判断所述起始边长值是否大于或等于所述最大值,若是,则将所述起始边长值作为所述大纹理的最终边长值,若否,则将所述最大值作为所述大纹理的最终边长值,以供将所述小纹理合并至边长为所述最终边长值的所述大纹理中。

优选的,所述计算模块包括:

计算单元,用于按照下列公式计算所述小纹理合并后的大纹理的起始边长值:

pow(4,i-1)≤sunsize,pow(4,i)≥sunsize,tsize1=pow(2,i);

其中,pow函数为幂函数,sunsize为所述小纹理的面积之和,tsize1为所述小纹理合并后的大纹理的起始边长值,i为所述起始边长值对应的幂的大小,初始化时i=0。

优选的,所述判断模块包括:

判断单元,用于按照下列公式确定所述大纹理的最终边长值:

size≤pow(2,(i+n)),size≥pow(2,(i+n-1)),tsize=pow(2,(i+n));

其中size为所述最大值,tsize为所述大纹理的最终边长值,初始化时n=0。

优选的,还包括:

调整模块,用于在所述判断模块确定所述大纹理的最终边长值后,判断所述大纹理的最终边长值是否大于预先设定的阈值,若是,则调整所述大纹理的最终边长值为所述预先设定的阈值,若否,则不做调整。

本发明提供的一种纹理合并方法,包括:获取待合并的数量为n的小纹理;计算n个小纹理的面积之和,基于小纹理的面积之和计算小纹理合并后的大纹理的起始边长值,起始边长值为使大纹理的面积等于或大于小纹理的面积之和的最小值;遍历n个小纹理的宽度值和高度值,在宽度值和高度值中挑选数值最大的值作为最大值;判断起始边长值是否大于或等于最大值,若是,则将起始边长值作为大纹理的最终边长值,若否,则将最大值作为大纹理的最终边长值,以供将小纹理合并至边长为最终边长值的大纹理中。本发明提供的一种纹理合并方法,基于待合并的数量为n的小纹理的面积之和计算合并后的大纹理的起始边长值;再遍历所有小纹理的宽度值和高度值,挑选数值最大的值作为最大值;接着判断计算得到的大纹理的起始边长值是否大于或等于最大值,若是,则将起始边长值作为合并后的大纹理的最终边长值,若否,则将最大值作为合并后的大纹理的最终边长值。本发明提供的一种纹理合并方法基于小纹理的面积之和计算大纹理的起始边长值,起始边长值为使大纹理的面积等于或大于小纹理的面积之和的最小值,从而使得大纹理的面积在理论上最接近小纹理的面积之和,接着判断起始边长值和最大值的大小来确定大纹理的最终边长值,使得大纹理能够包括所有小纹理,与现有技术中外界人员无规则的设置大纹理的边长相比,计算得到的大纹理的边长值更加符合小纹理实际需要的大纹理的边长值,从而减少了大纹理资源浪费的情况。综上所述,本发明提供的一种纹理合并方法在一定程度上解决了如何减少大纹理资源浪费的情况的技术问题。本发明提供的一种纹理合并系统也解决了相应的技术问题。

附图说明

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

图1为本发明实施例提供的一种纹理合并方法的流程图;

图2为本发明实施例提供的一种纹理合并系统的结构示意图。

具体实施方式

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

请参阅图1,图1为本发明实施例提供的一种纹理合并方法的流程图。

本发明实施例提供的一种纹理合并方法可以包括以下步骤:

步骤s101:获取待合并的数量为n的小纹理。

实际应用中,可以先获取待合并的数量为n的小纹理,这里的n可以是根据实际需要确定的正整数。可以将获取的数量为n的小纹理放入预先设定的纹理集中,这样方便对小纹理的管理。

步骤s102:计算n个小纹理的面积之和,基于小纹理的面积之和计算小纹理合并后的大纹理的起始边长值,起始边长值为使大纹理的面积等于或大于小纹理的面积之和的最小值。

在获取到小纹理后,便可以计算n个小纹理的面积之和,然后基于小纹理的面积之和计算小纹理合并后的大纹理的起始边长值,起始边长值为使大纹理的面积等于或大于小纹理的面积之和的最小值。由于小纹理要合并到大纹理中,所以大纹理的面积必须大于或等于小纹理的面积,而大纹理一般是正方形,所以计算大纹理的边长值即可根据该边长值确定大纹理的面积。这里基于小纹理的面积之和计算大纹理的起始边长值是为了在理论上让大纹理的面积大于或等于小纹理的面积之和,且最后的起始边长值使得大纹理的面积最接近小纹理的面积之和。

步骤s103:遍历n个小纹理的宽度值和高度值,在宽度值和高度值中挑选数值最大的值作为最大值。

在遍历小纹理的宽度值和高度值后,便可在遍历得到的宽度值和高度值中挑选出数值最大的值作为最大值。

步骤s104:判断起始边长值是否大于或等于最大值,若是,则将起始边长值作为大纹理的最终边长值,若否,则将最大值作为大纹理的最终边长值,以供将小纹理合并至边长为最终边长值的大纹理中。

实际应用中,可能会出现因为小纹理过宽或过高而导致该小纹理不能合并到大纹理中的情况,所以这里需要判断起始边长值是否大于或等于最大值;如果起始边长值大于或等于最大值,这需要将起始边长值作为大纹理的最终边长值;如果起始边长值小于最大值,这时需要将最大值作为大纹理的最终边长值,这样可以使得最终确定的大纹理的面积大于或等于小纹理的面积之和,而且大纹理可以包括每一个小纹理,不会出现小纹理超出大纹理的情况。在确定大纹理的最终边长值后,便可以将小纹理合并到边长为最终边长值的大纹理中,合并过程可以如下:按照预先设定的规则将小纹理排序,再将排序后的小纹理合并到大纹理中。预先设定的规则可以是将数量为n的小纹理按照每个小纹理的最大值由高到低的顺序排序,这里所说的每个小纹理的最大值是指该小纹理的宽度值和高度值中的最大值,由于对小纹理按照一定的规则进行了排序,增加了小纹理的条理性,从而可以方便将小纹理合并到大纹理中。

本发明提供的一种纹理合并方法,包括:获取待合并的数量为n的小纹理;计算n个小纹理的面积之和,基于小纹理的面积之和计算小纹理合并后的大纹理的起始边长值,起始边长值为使大纹理的面积等于或大于小纹理的面积之和的最小值;遍历n个小纹理的宽度值和高度值,在宽度值和高度值中挑选数值最大的值作为最大值;判断起始边长值是否大于或等于最大值,若是,则将起始边长值作为大纹理的最终边长值,若否,则将最大值作为大纹理的最终边长值,以供将小纹理合并至边长为最终边长值的大纹理中。本发明提供的一种纹理合并方法,基于待合并的数量为n的小纹理的面积之和计算合并后的大纹理的起始边长值;再遍历所有小纹理的宽度值和高度值,挑选数值最大的值作为最大值;接着判断计算得到的大纹理的起始边长值是否大于或等于最大值,若是,则将起始边长值作为合并后的大纹理的最终边长值,若否,则将最大值作为合并后的大纹理的最终边长值。本发明提供的一种纹理合并方法基于小纹理的面积之和计算大纹理的起始边长值,起始边长值为使大纹理的面积等于或大于小纹理的面积之和的最小值,从而使得大纹理的面积在理论上最接近小纹理的面积之和,接着判断起始边长值和最大值的大小来确定大纹理的最终边长值,使得大纹理能够包括所有小纹理,与现有技术中外界人员更改大纹理的边长相比,计算得到的大纹理的边长值更加符合小纹理实际需要的大纹理的边长值,从而减少了大纹理资源浪费的情况。综上所述,本发明提供的一种纹理合并方法在一定程度上解决了如何减少大纹理资源浪费的情况的技术问题。

本发明实施例提供的一种纹理合并方法中,基于小纹理的面积之和计算小纹理合并后的大纹理的起始边长值,可以包括:

按照下列公式计算小纹理合并后的大纹理的起始边长值:

pow(4,i-1)≤sunsize,pow(4,i)≥sunsize,tsize1=pow(2,i);

其中,pow函数为幂函数,sunsize为小纹理的面积之和,tsize1为小纹理合并后的大纹理的起始边长值,i为起始边长值对应的幂的大小。初始化时i=0。

实际应用中,可以通过公式pow(4,i-1)≤sunsize,pow(4,i)≥sunsize,tsize1=pow(2,i)计算小纹理合并后的大纹理的起始边长值,这样使得计算起始边长值的过程简单易实现。其中,pow函数为幂函数;4为pow函数的底数,因为纹理的宽度值和高度值一般是以2为底数的幂值,而纹理的面积为宽度值与高度值的乘积,所以这里在计算大纹理的起始边长值时将幂函数的底数设置为4;sunsize为小纹理的面积之和;tsize1为小纹理合并后的大纹理的起始边长值;i为pow函数的幂,一般将i的起始值设为0,且i一般是正整数。当然还有其他计算起始边长值的方法,本发明在这里不做具体限定。

本发明实施例提供的一种纹理合并方法中,判断起始边长值是否大于或等于最大值来确定大纹理的最终边长值,可以包括:

按照下列公式确定大纹理的最终边长值:

size≤pow(2,(i+n)),size≥pow(2,(i+n-1)),tsize=pow(2,(i+n));

其中size为最大值,tsize为大纹理的最终边长值,初始化时n=0。

实际应用中,可以通过公式size≤pow(2,(i+n)),size≥pow(2,(i+n-1)),tsize=pow(2,(i+n))来确定大纹理的最终边长值,其中size为最大值,tsize为大纹理的最终边长值,初始化时n=0,i为大纹理的起始边长值对应的幂。因为n一般为大于或等于0的整数,所以(i+n)的值大于或等于i,即tsize≥size,所以最后确定的大纹理的最终边长值一定是大于或等于起始边长值,且一定是大于或等于最大值的。这样可以使得确定大纹理的最终边长值的过程简便易实现。

实际应用中,比如在计算4个256*256的小纹理合并后的大纹理的最终边长值时,这时,sunsize=256*256*4,size=256,将其代入上述公式的计算过程如下:

通过公式pow(4,i-1)≤256*256*4,pow(4,i)≥256*256*4计算得出i=9;将i=9代入公式256≤pow(2,(i+n)),256≥pow(2,(i+n-1))计算得出i+n=9,此时n=0;最后得出的大纹理的最终边长值为tsize=pow(2,9)=512。计算得出的大纹理的最终边长值使得大纹理的面积刚好为小纹理的面积之和,没有资源浪费,而且不会出现小纹理的一部分超出大纹理的情况。

本发明实施例提供的一种纹理合并方法中,确定大纹理的最终边长值之后,还可以包括:

判断大纹理的最终边长值是否大于预先设定的阈值,若是,则调整大纹理的最终边长值为预先设定的阈值,若否,则不做调整。

实际应用中,大纹理的边长不可能是无限大的,所以可以在确定大纹理的最终边长值后,判断大纹理的最终边长值是否大于预先设定的阈值,这里所说的预先设定的阈值也即大纹理所能达到的边长最大值,若是,则调整大纹理的最终边长值为预先设定的阈值,这时,可以创建多个边长为预先设定的阈值的大纹理用来合并小纹理;若否,则可以不进行操作,这时,可以将数量为n的小纹理合并到一个边长为最终边长值的大纹理中。

本发明还提供了一种纹理合并系统,其具有本发明实施例提供的一种纹理合并方法具有的对应效果。请参阅图2,图2为本发明实施例提供的一种纹理合并系统的结构示意图。

本发明实施例提供的一种纹理合并系统可以包括:

获取模块a1,用于获取待合并的数量为n的小纹理;

计算模块a2,用于计算n个小纹理的面积之和,基于小纹理的面积之和计算小纹理合并后的大纹理的起始边长值,起始边长值为使大纹理的面积等于或大于小纹理的面积之和的最小值;

遍历模块a3,用于遍历n个小纹理的宽度值和高度值,在宽度值和高度值中找出数值最大的值作为最大值;

判断模块a4,用于判断起始边长值是否大于或等于最大值,若是,则将起始边长值作为大纹理的最终边长值,若否,则将最大值作为大纹理的最终边长值,以供将小纹理合并至边长为最终边长值的大纹理中。

本发明实施例提供的一种纹理合并系统中,计算模块可以包括:

计算单元,用于按照下列公式计算合并后的大纹理的起始边长值:

pow(4,i-1)≤sunsize,pow(4,i)≥sunsize,tsize1=pow(2,i);

其中,pow函数为幂函数,sunsize为小纹理的面积之和,tsize1为小纹理合并后的大纹理的起始边长值,i为起始边长值对应的幂的大小,初始化时i=0。

本发明实施例提供的一种纹理合并系统中,判断模块可以包括:

判断单元,用于按照下列公式确定大纹理的最终边长值:

size≤pow(2,(i+n)),size≥pow(2,(i+n-1)),tsize=pow(2,(i+n));

其中size为最大值,tsize为大纹理的最终边长值,初始化时n=0。

本发明实施例提供的一种纹理合并系统中,还可以包括:

调整模块,用于在判断模块确定大纹理的最终边长值后,判断大纹理的最终边长值是否大于预先设定的阈值,若是,则调整大纹理的最终边长值为预先设定的阈值,若否,则不做调整。

本发明实施例提供的一种纹理合并系统中相关部分的说明请参见本发明实施例提供的一种纹理合并方法中对应部分的详细说明,在此不再赘述。另外,本发明实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。

对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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