实现三维模型索引缓冲共享、体系创建的方法和系统的制作方法

文档序号:6627765阅读:269来源:国知局
实现三维模型索引缓冲共享、体系创建的方法和系统的制作方法
【专利摘要】本发明公开了一种实现三维模型索引缓冲共享、体系创建的方法和系统,涉及三维空间模型建模【技术领域】。包括如下步骤:设置三维模型索引缓冲的排列方式;加载第m-1个三维模型,根据所述索引缓冲的排列方式,生成第m-1索引缓冲,并存储;所述第m-1索引缓冲为全局变量;加载第m个三维模型,通过比较所述第m-1个三维模型的顶点个数和所述第m个三维模型的顶点个数,判断是否要根据所述索引缓冲的排列方式,更新所述第m-1索引缓冲,生成第m索引缓冲,确定共享索引缓冲,并存储;重复上一步骤,直到n个三维模型均加载完成;m、n均为自然数,2≤m≤n。本发明降低了创建多个三维模型时,内存资源的占用率,提高了系统的运行效率。
【专利说明】实现三维模型索引缓冲共享、体系创建的方法和系统

【技术领域】
[0001]本发明涉及三维空间模型建模【技术领域】,尤其涉及一种实现三维模型索引缓冲共享、体系创建的方法和系统。

【背景技术】
[0002]目前,在三维建模领域中,为了减少计算机内存的占用率,提高图形渲染速度,一般每个模型都使用独立的顶点缓冲(Vertex Buffer)和独立的索引缓冲(Index Buffer)。其中,索引缓冲用于保存顶点缓冲的内存资源,用来告诉三维引擎渲染顶点的顺序,使用索引缓冲可以避免不必要重复资源在内存中出现。
[0003]但是,当一个三维模型体系中存在多个模型时,由于每个模型都使用独立的索引缓冲,所以,多个模型的大量的索引缓冲依然会消耗大量内存,从而导致系统运行效率下降甚至崩溃。


【发明内容】

[0004]本发明的目的在于提供一种实现三维模型索引缓冲共享、体系创建的方法和系统,从而解决现有技术中存在的前述问题。
[0005]为了实现上述目的,本发明采用的技术方案如下:
[0006]一种实现三维模型索引缓冲共享的方法,包括如下步骤:
[0007]S101,设置三维模型索引缓冲的排列方式;
[0008]S102,加载第m-Ι个三维模型,根据所述索引缓冲的排列方式,生成第m-Ι索引缓冲,并存储;所述第m-Ι索引缓冲为全局变量;
[0009]S103,加载第m个三维模型,通过比较所述第m_l个三维模型的顶点个数和所述第m个三维模型的顶点个数,判断是否要根据所述索引缓冲的排列方式,更新所述第m-Ι索引缓冲,生成第m索引缓冲,确定共享索引缓冲,并存储;
[0010]S104,重复步骤S103,直到η个三维模型均加载完成;
[0011]其中,m、n均为自然数,2彡m彡η。
[0012]进一步地,步骤SlOl之前,还包括步骤,设置三维模型的顶点的排列方式。
[0013]具体地,所述第m-Ι索引缓冲具体为类的静态变量。
[0014]其中,步骤S103具体为,加载第m个三维模型,比较所述第m_l个三维模型的顶点个数和所述第m个三维模型的顶点个数,如果第m个三维模型的顶点个数大于第m-Ι个三维模型的顶点个数,则根据所述索引缓冲的排列方式,更新所述第m-Ι索引缓冲,生成第m索引缓冲作为共享索引缓冲,并存储;如果第m个三维模型的顶点个数小于或等于第m-Ι个三维模型的顶点个数,则保持所述第m-Ι索引缓冲,作为共享索引缓冲。
[0015]一种实现三维模型索引缓冲共享的系统,包括,
[0016]设置模块:用于设置三维模型索引缓冲的排列方式;
[0017]比较判断模块:用于比较第m-Ι个三维模型的顶点个数和第m个三维模型的顶点个数,并用于判断是否要根据所述索引缓冲的排列方式,更新所述第m-Ι索引缓冲,生成第m索引缓冲,确定共享索引缓冲,并存储;
[0018]索引缓冲生成模块:用于生成和/或更新索引缓冲;
[0019]三维模型加载模块:用于加载三维模型。
[0020]一种实现三维模型体系创建的方法,包括如下步骤,
[0021]S201,记录每个三维模型使用的索引缓冲的起始值和终止值;
[0022]S202,将上述生成的共享索引缓冲、步骤S201中得到的每个三维模型使用的索引缓冲的起始值和终止值均发送到三维引擎;
[0023]S203,利用所述三维引擎绘制每个三维模型,创建三维模型体系。
[0024]具体地,所述三维引擎包括OPENGL和DIRECTX。
[0025]一种实现三维模型体系创建的系统,包括,
[0026]上述实现三维模型索引缓冲共享的系统;
[0027]记录模块:用于记录每个三维模型使用的索引缓冲的起始值和终止值;
[0028]转发模块:用于将权利要求1-4任一项中生成的共享索引缓冲、步骤S201中得到的每个三维模型使用的索引缓冲的起始值和终止值均发送到三维引擎;
[0029]三维引擎:用于绘制每个三维模型,创建三维模型体系。
[0030]具体地,所述三维引擎包括OPENGL和DIRECTX。
[0031]本发明的有益效果是:本发明通过获取多个三维模型中最大的索引缓冲,进而使多个三维模型共享该最大的索引缓冲,创建多个三维模型时,降低了内存资源的占用率,进而提闻了系统的运行效率。

【专利附图】

【附图说明】
[0032]图1是本发明实施例提供的一种实现三维模型索引缓冲共享的方法流程示意图;
[0033]图2是本发明实施例提供的一种实现三维模型体系创建的方法流程示意图;
[0034]图3是本发明实验例一提供的三维模型共享索引缓冲的示意图;
[0035]图4是本发明实验例二提供的三维模型共享索引缓冲的示意图;
[0036]图5是本发明实验例三提供的创建太阳系三维模型体系时共享索引缓冲的示意图;
[0037]图6是本发明实验例四提供的创建井筒三维模型体系时共享索引缓冲的示意图。

【具体实施方式】
[0038]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的【具体实施方式】仅仅用以解释本发明,并不用于限定本发明。
[0039]在目前两大流行的三维引擎opengl和DIRECTX中,都使用顶点缓冲(VertexBuffer)和索引缓冲(Index Buffer)来减少计算机内存占用、提高图形渲染速度。索引缓冲用于保存顶点索引的内存资源,用来告诉三维引擎渲染顶点的顺序,使用索引缓冲可以避免不必要重复资源在内存中出现。
[0040]比如,画两个没有索引缓冲的三角形,由于每个三角形有三个顶点,因此2个三角形需要6个顶点。而第一个三角形的顶点O和第二个三角形的顶点4是重合的,第一个三角形的顶点2和第二个三角形的顶点5是重合的,在这样情况下,如果使用索引缓冲的话,索引缓冲可以记录顶点的顺序,并将渲染顶点的顺序告诉三维引擎,则只需要4个点就可以绘制这2个三角形。
[0041]可见,每个顶点缓冲的顶点包含X、y、z坐标,还可能包含纹理坐标、颜色属性等,而每个索引缓冲的顶点只是一个整数值,因此在顶点数量较多时,使用索引缓冲可以显著降低顶点的数量,避免重复数据占用大量内存。在三维建模领域中,一般情况下都是每个模型都使用独立的顶点缓冲和独立的索引缓冲来减少模型占用内存。
[0042]但是,当一个三维场景中模型很多时,即便每个模型都使用索引缓冲,依然会消耗大量内存,从而导致系统运行效率下降甚至崩溃。为了减小多个三维模型的多个索引缓冲占用的内存量,本发明实施例提供了一种多个三维模型共享一个索引缓冲的方法,使多个三维模型能够共享同一个索引缓冲,从而解决每个三维模型都使用独立的索引缓冲带来的内存占用量大的问题。
[0043]如图1所示,本发明实施例提供了一种实现三维模型索引缓冲共享的方法,包括如下步骤:
[0044]S101,设置三维模型索引缓冲的排列方式;
[0045]S102,加载第m-Ι个三维模型,根据所述索引缓冲的排列方式,生成第m_l索引缓冲,并存储;所述第m-Ι索引缓冲为全局变量;
[0046]S103,加载第m个三维模型,通过比较所述第m_l个三维模型的顶点个数和所述第m个三维模型的顶点个数,判断是否要根据所述索引缓冲的排列方式,更新所述第m-Ι索引缓冲,生成第m索引缓冲,确定共享索引缓冲,并存储;
[0047]S104,重复步骤S103,直到η个三维模型均加载完成;
[0048]其中,m、n均为自然数,2彡m彡η。
[0049]由于η个三维模型均根据相同的索引缓冲的排列方式加载,对应的η个索引缓冲,均是其中最大的一个索弓I缓冲的子集,所以,只要加载η个三维模型时,均根据相同的索引缓冲的排列方式进行加载,并找到η个三维模型对应的多个索引缓冲中的最大的索引缓冲,将该最大的索引缓冲作为共享的索引缓冲,即η个三维模型只是用一个共享索引缓冲,这样,就可以减少内存占用资源。
[0050]本发明实施例中,通过上述方法,找到了 η个三维模型对应的η个索引缓冲中最大的索引缓冲,从而使η个三维模型可以共享一个索弓I缓冲。
[0051]本发明实施例中,步骤SlOl之前,还包括步骤,设置三维模型的顶点的排列方式。三维模型的顶点的排列方式固定后,三维模型的索引缓冲的排列方式也就固定了,本发明实施例中,通过设置三维模型的顶点的排列方式来设置三维模型的索引缓冲的排列方式,简单、易于操作。
[0052]本发明实施例中,第m-Ι索引缓冲具体为类的静态变量。对于C#、JAVA等编程语言,可以将第m-Ι索引缓冲设置为类的静态变量,使其成为全局变量,能够被其他的三维模型访问。
[0053]本发明实施例中,步骤S103具体为,加载第m个三维模型,比较所述第m_l个三维模型的顶点个数和所述第m个三维模型的顶点个数,如果第m个三维模型的顶点个数大于第m-1个三维模型的顶点个数,则根据所述索引缓冲的排列方式,更新所述第m-Ι索引缓冲,生成第m索引缓冲作为共享索引缓冲,并存储;如果第m个三维模型的顶点个数小于或等于第m-Ι个三维模型的顶点个数,则保持所述第m-1索引缓冲,作为共享索引缓冲。通过采用这种方法,就可以得到m个三维模型中最大的索引缓冲,其余的三维模型的索引缓冲是这个最大的索引缓冲的自己,从而使所有的三维模型共享该最大的索引缓冲。
[0054]本发明实施例还提供了一种实现三维模型索引缓冲共享的系统,包括,
[0055]设置模块:用于设置三维模型索引缓冲的排列方式;
[0056]比较判断模块:用于比较第m-Ι个三维模型的顶点个数和第m个三维模型的顶点个数,并用于判断是否要根据所述索引缓冲的排列方式,更新所述第m-Ι索引缓冲,生成第m索引缓冲,并存储;
[0057]索引缓冲生成模块:用于生成和/或更新索引缓冲;
[0058]三维模型加载模块:用于加载三维模型。
[0059]该实现三维模型索引缓冲共享的系统用于实现上述实施例提供的实现三维模型索引缓冲共享的方法,以减小多个三维模型使用独立的多个索引缓冲的内存占用率,进而提高系统的运行效率以及便于内存的管理。
[0060]本发明实施例还提供了一种实现三维模型体系创建的方法,包括如下步骤,
[0061]S201,记录每个三维模型使用的索引缓冲的起始值和终止值;
[0062]S202,将采用上述实施例中的实现三维模型索引缓冲共享的方法生成的共享索引缓冲、步骤S201中得到的每个三维模型使用的索引缓冲的起始值和终止值均发送到三维引擎;
[0063]S203,利用所述三维引擎绘制每个三维模型,创建三维模型体系。
[0064]本发明实施例提供的三维模型体系的创建方法,在创建三维模型体系过程中,体系中的多个三维模型共享索引缓冲,多个三维模型共享索引缓冲的方法为本发明上述实施例提供的,采用这种三维模型体系的创建方法,减小了内存的占用率,进而提高了系统创建三维模型体系的运行速率。
[0065]其中,在创建三维模型体系中,使用的三维引擎包括OPENGL和DIRECTX。使用三维引擎创建三维模型过程中,需要获取三维模型使用的索引缓冲,如果三维模型的索引缓冲是共享索引缓冲的子集时,则还需要获取该三维模型使用的索引缓冲的起始值和终止值。从而对三维模型进行绘制和渲染。
[0066]本发明实施例还提供了一种实现三维模型体系创建的系统,包括,
[0067]本发明上述实施例提供的实现三维模型索引缓冲共享的系统;
[0068]记录模块:用于记录每个三维模型使用的索引缓冲的起始值和终止值;
[0069]转发模块:用于将权利要求1-4任一项中生成的共享索引缓冲、步骤S201中得到的每个三维模型使用的索引缓冲的起始值和终止值均发送到三维引擎;
[0070]三维引擎:用于绘制每个三维模型,创建三维模型体系。
[0071]该实现三维模型体系创建的系统用于实现上述实施例提供的实现三维模型体系创建的方法,以减小多个三维模型使用独立的多个索引缓冲的内存占用率,进而提高系统的运行效率以及便于内存的管理。
[0072]其中,所述三维引擎包括OPENGL和DIRECTX。这两种三维引擎,技术先进且成熟,能够满足所有的三维模型的创建。
[0073]实验例一
[0074]如图3所示,4个模型尽管顶点缓冲数据可能不同,但是他们的索引缓冲却是相同的,所以,这4个模型可以共享一个索弓I缓冲。
[0075]实验例二
[0076]如图4所示,4个模型从左至右依次为模型A、模型B、模型C和模型D。从图中可以看出,4个模型的索引缓冲都不一样,所以4个模型不能简单的共享索引缓冲。但是模型A的索引缓冲只是模型B的索引缓冲的一个子集,模型C、D的索引缓冲也分别是模型B的索引缓冲的一个子集,也就是说,在4个模型中,其他三个模型的索引缓冲都是其中的一个模型的索引缓冲的子集,那么这4个模型共享最大的模型的索引缓冲,即模型A、B、C、D共享模型B的索引缓冲。
[0077]实验例三
[0078]如图5所示,要创建一个三维太阳系模型,太阳系有8大行星和成千上万的小行星,在创建过程中,为了减小内存占用率,使所有的代表行星的球体共享一个索引缓冲,甚至只创建一个顶点缓冲让这些球体共享数据。这样,尽管三维太阳系模型中的球体成千上万,但是创建过程中占用的内存却很小。但是,为了使所有的代表行星的球体共享一个索引缓冲,必须保证在创建过程中,所有的球体的索引缓冲的排列方式都要参照最大的球体的索引缓冲的排列方式。
[0079]实验例四
[0080]如图6所示,要创建成千上万的三维井筒体系模型,这些井筒的深度范围各不相同,走向也不同,因此构建时使用的顶点数据和索引数据就不同。如果每个井筒都是用独立的顶点数据和索引数据,则会占用大量的内存,本实验例中,让所有的三维井筒共享一个索引缓冲,只需要在构建三维井筒时,为采样数(顶点数)最多的那个井筒构建索引缓冲,其余井筒就可以共享这个索引缓冲。因为其余井筒的索引缓冲数据只是这个最大的索引缓冲数据的一部分。但是在创建过程中,所有的井筒的索引缓冲的排列方式都要参照最大的井筒的索引缓冲的排列方式。
[0081]通过采用本发明公开的上述技术方案,得到了如下有益的效果:本发明通过获取多个三维模型中最大的索引缓冲,进而使多个三维模型共享该最大的索引缓冲,降低了存在多个三维模型时,内存资源的占用率,进而提高了系统的运行效率。
[0082]本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
[0083]本领域人员应该理解的是,上述实施例提供的方法步骤的时序可根据实际情况进行适应性调整,也可根据实际情况并发进行。
[0084]上述实施例涉及的方法中的全部或部分步骤可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机设备可读取的存储介质中,用于执行上述各实施例方法所述的全部或部分步骤。所述计算机设备,例如:个人计算机、服务器、网络设备、智能移动终端、智能家居设备、穿戴式智能设备、车载智能设备等;所述的存储介质,例如:RAM、ROM、磁碟、磁带、光盘、闪存、U盘、移动硬盘、存储卡、记忆棒、网络服务器存储、网络云存储坐寸ο
[0085]最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
[0086]以上所述仅是本发明的优选实施方式,应当指出,对于本【技术领域】的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。
【权利要求】
1.一种实现三维模型索引缓冲共享的方法,其特征在于,包括如下步骤: S101,设置三维模型索引缓冲的排列方式; S102,加载第m-Ι个三维模型,根据所述索引缓冲的排列方式,生成第m-Ι索引缓冲,并存储;所述第m-Ι索引缓冲为全局变量; S103,加载第m个三维模型,通过比较所述第m-Ι个三维模型的顶点个数和所述第m个三维模型的顶点个数,判断是否要根据所述索引缓冲的排列方式,更新所述第m-Ι索引缓冲,生成第m索引缓冲,确定共享索引缓冲,并存储; S104,重复步骤S103,直到η个三维模型均加载完成; 其中,m、η均为自然数,2彡m彡η。
2.根据权利要求1所述的实现三维模型索引缓冲共享的方法,其特征在于,步骤SlOl之前,还包括步骤,设置三维模型的顶点的排列方式。
3.根据权利要求1所述的实现三维模型索引缓冲共享的方法,其特征在于,所述第m-1索引缓冲具体为类的静态变量。
4.根据权利要求1所述的实现三维模型索引缓冲共享的方法,其特征在于,步骤S103具体为,加载第m个三维模型,比较所述第m-Ι个三维模型的顶点个数和所述第m个三维模型的顶点个数,如果第m个三维模型的顶点个数大于第m-Ι个三维模型的顶点个数,则根据所述索引缓冲的排列方式,更新所述第m-Ι索引缓冲,生成第m索引缓冲作为共享索引缓冲,并存储;如果第m个三维模型的顶点个数小于或等于第m-Ι个三维模型的顶点个数,则保持所述第m-Ι索引缓冲,作为共享索引缓冲。
5.一种实现三维模型索引缓冲共享的系统,其特征在于,包括, 设置模块:用于设置三维模型索引缓冲的排列方式; 比较判断模块:用于比较第m-Ι个三维模型的顶点个数和第m个三维模型的顶点个数,并用于判断是否要根据所述索引缓冲的排列方式,更新所述第m-Ι索引缓冲,生成第m索引缓冲,确定共享索引缓冲,并存储; 索引缓冲生成模块:用于生成和/或更新索引缓冲; 三维模型加载模块:用于加载三维模型。
6.一种实现三维模型体系创建的方法,其特征在于,包括如下步骤, S201,记录每个三维模型使用的索引缓冲的起始值和终止值; S202,将权利要求1-4任一项中生成的共享索引缓冲、步骤S201中得到的每个三维模型使用的索引缓冲的起始值和终止值均发送到三维引擎; S203,利用所述三维引擎绘制每个三维模型,创建三维模型体系。
7.根据权利要求6所述的实现三维模型体系创建的方法,其特征在于,所述三维引擎包括 OPENGL 和 DIRECTX。
8.一种实现三维模型体系创建的系统,其特征在于,包括, 权利要求5所述的实现三维模型索引缓冲共享的系统; 记录模块:用于记录每个三维模型使用的索引缓冲的起始值和终止值; 转发模块:用于将权利要求1-4任一项中生成的共享索引缓冲、步骤S201中得到的每个三维模型使用的索引缓冲的起始值和终止值均发送到三维引擎; 三维引擎:用于绘制每个三维模型,创建三维模型体系。
9.根据权利要求8所述的实现三维模型体系创建的系统,其特征在于,所述三维引擎包括 OPENGL 和 DIRECTX。
【文档编号】G06T17/00GK104200053SQ201410486310
【公开日】2014年12月10日 申请日期:2014年9月22日 优先权日:2014年9月22日
【发明者】李生龙 申请人:克拉玛依红有软件有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1