一种适用于三维场景中三维模型并行绘制的方法与流程

文档序号:12273151阅读:339来源:国知局
一种适用于三维场景中三维模型并行绘制的方法与流程

本发明涉及信息处理技术领域,特别涉及一种适用于三维场景中三维模型并行绘制的方法。



背景技术:

在地理信息场景三维中,要准确再现地表场景不免要用到数字高程模型数据、数字正射影像数据以及三维模型数据。随着社会经济的快速发展,三维地理信息场景在社会各个领域的运用而生,其中三维模型能够准确的模拟现实环境,不同行业根据自身要求对三维模型设计也不同,有精细模型和简化的模型之分。

快速地将三维地理信息场景在计算机终端显示器上展现,一直是各种地理信息三维场景软件系统需要解决的问题。如何在三维场景中快速高效地绘制显示三维模型一直是三维场景系统关心的问题,这也是具有挑战性的问题。

三维模型能够在计算机终端快速绘制显示,必然要能够快速的访问数据实体。在三维场景中海量的三维模型中,需要设计高效的数据管理方法和索引机制,另外,三维模型的渲染绘制,需要在三维场景中根据三维模型与视点的位置,在不影响三维模型外观的情况下,实时动态地简化三维模型以使得三维模型能够快速渲染绘制。

随着多核CPU技术体系的出现,在应用上的有两个方面的优势:为用户带来更强大的计算性能;满足用户同时进行多任务处理、多任务计算环的要求。在三维场景中海量的三维模型绘制显示,能够利用多核CPU实时动态并行简化、渲染绘制三维模型。

当前在地理信息系统领域,大多数的三维地理信息系统软件在进行三维场景渲染的过程中,仍然是采用传统的串行处理方式,采用单线程模式循环遍历每个三维模型进行绘制。三维场景中需要很强的交互性,对于每绘制一次海量的三维模型数据,需要用户等待,用户体验感极差。在早期的单核CPU计算机硬件水平条件下,这种绘制方式是可行的,随着多核CPU的计算出现,这种串行的绘制已经不是最优处理方式,它既不能提高三维模型的效率,也不能有效地利用多核CPU的硬件优势。另外,在多数的三维软件系统中三维模型的渲染绘制仍就采用原始模型渲染绘制,不论离视点多远都采用原始精细程度的模型绘制,这也是导致渲染效率不高的原因。

因此,目前急需一种能够提高三维模型显示的效率的、新型的适用于三维场景中三维模型绘制方法。



技术实现要素:

本发明提出一种适用于三维场景中三维模型并行绘制的方法,可充分地消除由于现有技术的限制和缺陷导致的一个或多个问题。

本发明在三维场景中基于CPU核数构建线程队列模型,线程队列模型中每个线程包含数据获取和数据渲染两个互斥线程,在线程队列中并行获取、简化、渲染三维模型数据;建立显示列表模型,每个三维模型对应一个显示符号,渲染绘制过程中实时更新屏幕,把三维模型渲染绘制结果生成显示符号,并放入显示列表管理。

本发明另外的优点、目的和特性,一部分将在下面的说明书中得到阐明,而另一部分对于本领域的普通技术人员通过对下面的说明的考察将是明显的或从本发明的实施中学到。通过在文字的说明书和权利要求书及附图中特别地指出的结构可实现和获得本发明目的和优点。

本发明提供了一种适用于三维场景中三维模型并行绘制的方法,其特征在于,所述方法包括以下步骤:

步骤S101,对不同数据格式、不同来源的三维模型数据进行预处理,得到预处理后的三维模型数据;

步骤S102,根据计算机终端的CPU的核数建立线程队列模型,其中,所述线程模型队列中包括多个线程模型,每个线程模型均优选的包括IO线程和RC线程,线程模型队列中所有的线程模型并行工作,每个线程模型输出一个模型符号,每个模型符号对应一个三维模型;

步骤S103,根据三维模型的数量建立显示列表模型,其中,一个三维模型对应一个显示符号,所有三维模型的显示符号均由显示列表模型管理。

步骤S104,利用每个线程模型的IO线程并行获取所述预处理后的三维模型数据;

步骤S105,利用每个线程模型的IO线程并行简化通过步骤S104获得的三维模型数据;

步骤S106,利用每个线程模型的RC线程对所述简化后的多个三维模型进行并行渲染绘制以得到与每个所述三维模型对应的显示符号,并终端屏幕上显示所述显示符号。

优选的,所述步骤S105具体包括以下子步骤:

步骤S1051,计算三维模型的所有顶点的剔除值;

步骤S1052,选取最大剔除值,设最大剔除值为cost(a,b);

步骤S1053,剔除所有包含以顶点a和顶点b组成的边的三角面;

步骤S1054,重新计算与顶点a相邻顶点的剔除值。

步骤S1055,将顶点a移动到顶点b,以顶点b替换顶点a;

重复上述步骤S1052-S1055,直到处理完三维模型的所有顶点,并对三维模型的顶点按照剔除值由小到大的顺序进行排序。

优选的,所述步骤S1051具体包括:

通过下述公式计算三维模型的某个顶点a的剔除值:

其中,表示顶点a的剔除值,顶点b是与顶点a相邻的一个顶点,表示包含顶点a的三角形的集合,表示同时包含顶点a和顶点b的三角形的集合,表示三角面n的法线向量值。

优选的,所述步骤S106具体包括以下子步骤:

步骤S1061,判断待渲染绘制的三维模型是否存在显示符号,如果存在,则直接转入步骤S1062,否则,先依次执行步骤S104和S105,获得简化后的三维模型,然后再转入步骤S1062;

步骤S1062,判断三维模型与视点的距离是否发生变化,如果是,则转入步骤S1063,否则,转入步骤S1067;

步骤S1063,计算待渲染的顶点个数;

步骤S1064,根据步骤S1063的计算结果,对简化后的三维模型进行渲染绘制;

步骤S1065,将渲染绘制后的三维模型生成显示符号并将生成的显示符号放入显示列表;

步骤S1066,对每个三维模型,根据三维模型与视点的距离,按照由近到远的顺序依次从显示列表中取出该三维模型的显示符号并在屏幕上显示;

步骤S1067,直接从显示列表中取得该三维模型的显示符号并在屏幕上显示。

优选的,所述步骤S101具体包括:将不同数据格式、不同来源的三维模型数据转化为统一格式并进行存储。

优选的,转化为统一格式的三维模型由多个三角面组成,每个三角面包括三个顶点,每个顶点均包含xyz空间坐标。

优选的,将转化为统一格式的三维模型数据存储到关系型数据库(Oracle、MySql、Access)中,所述关系数据库包括三维模型数据表,所述三维模型数据表包含空间索引字段

优选的,空间索引字段采用四叉树索引策略,为三维模型数据提供空间索引,以便能够快速定位获取数据。

本发明提供了三维模型快速绘制的方法,即在线程队列中并行获取三维模型数据并简化三维模型,根据与视点距离关系,实时计算要渲染简化后三维模型的顶点个数、渲染三维模型,把渲染结果生成显示符号放入显示列表管理,在下次绘制三维模型与视点距离不变时,直接从显示列表中取出上一次的渲染结果显示到计算机屏幕。本发明能够快速获取三维模型数据,加快三维模型渲染绘制时间,提高三维模型的显示效率,提升用户在三维场景中交互的体验感,充分发挥了计算机的高性能计算优势。该方法在地理信息系统及相关行业三维软件中使用和推广,将会产生良好的社会经济效益。

附图说明

图1是根据本发明实施例的、适用于三维场景中三维模型并行绘制方法的流程图。

图2是根据本发明实施例的三维模型数据结构的示意图。

图3是根据本发明实施例的三维模型数据并行获取、简化、渲染的线程队列模型。

图4是根据本发明实施例的三维模型简化算法示意图。

图5是根据本发明实施例的三维模型简化流程图。

图6是根据本发明实施例的三维模型渲染流程图。

具体实施方式

下面参照附图对本发明进行更全面的描述,其中说明本发明的示例性实施例。

如图1所示,本发明实施例提出的适用于三维场景中三维模型并行绘制方法主要包括以下步骤:

步骤S101,对不同数据格式、不同来源的三维模型数据进行预处理。

实现海量三维模型数据并行绘制方法,前期要大量的准备工作,例如数据格式的统一、三维模型数据空间索引策略等,步骤S101主要对不同数据格式、不同来源的三维模型数据进行预处理,其中,步骤S101具体包括将不同数据格式、不同来源的三维模型数据转化为统一格式并进行存储。

图2示出了根据本发明实施例的,转化为统一格式的三维模型数据结构的示意图。如图2所示,转化为统一格式的三维模型由多个三角面(T1、T2、T3、…、Tn)组成,每个三角面T均包括三个顶点(V1、V2、V3),每个顶点V均包含xyz空间坐标。

将图2所示的转化为统一格式的三维模型数据存储到关系型数据库(Oracle、MySql、Access)中,所述关系数据库包括三维模型数据表,所述三维模型数据表包含ObjectId字段、三维模型数据流字段、空间索引字段以及辅助信息字段,其中,空间索引字段采用四叉树索引策略,为三维模型数据提供空间索引,以便能够快速定位获取数据。

步骤S102,根据计算机终端的CPU的核数建立线程队列模型,其中,所述线程模型队列中包括多个线程模型,每个线程模型均包括IO线程和RC线程,线程模型队列中所有的线程模型并行工作,每个线程模型输出一个模型符号,每个模型符号对应一个三维模型。

具体如图3所示,其中,线程模型队列中包括多个线程模型(如图3所示的线程模型1、线程模型2、线程模型3),每个线程模型均包括IO(Input/Output)线程和RC(Renderer Context)线程,这两个线程是对应的互斥线程,其中,IO线程用于获取三维模型数据并简化三维模型,RC线程用于计算要绘制的顶点个数,以及渲染绘制模型数据。IO线程和RC线程保持并行同步,如图3所示,线程模型1、线程模型2、线程模型3分别输出模型符号1、模型符号2、模型符号3,每个模型符号对应一个三维模型,随后进行三维模型的串行显示,从而实现了本发明所提出的三维模型数据的并行获取、并行简化和并行渲染绘制,加快了三维模型渲染绘制时间,提高了三维模型的显示效率。

需要说明的是,虽然图3示出了三个线程模型,但是本发明实施例中的线程模型的数量和CPU的核数相对应,即,并不仅限于三个线程模型。

步骤S103,根据三维模型的数量建立显示列表模型,其中,一个三维模型对应一个显示符号,所有三维模型的显示符号均由显示列表模型管理。显示符号由显示列表模型管理,显示列表相当于一个容器数组,数组里面的每个元素存放与三维模型相关的显示符号信息。

步骤S104,利用每个线程模型的IO线程并行获取所述预处理后的三维模型数据。

根据本发明的实施例,在三维视场范围内获取待渲染绘制的三维模型集合,具体的,通过每个线程模型的IO线程并行获取三维模型数据。

步骤S105,利用每个线程模型的IO线程并行简化通过步骤S104获得的三维模型数据。

简化模型总要删除一些顶点,哪些点被删除总的有个条件,所以给每个顶点计算出一个删除的条件值,也就是下文所说的剔除值,简化模型的好处就是,如果一个非常精细的模型有100万顶点,组成的三角面可能是顶点数的2~3倍,要绘制出400~600万的三角面是比较耗时的,如果不减化,在场景任意位置都需要绘制精细模型就比较耗时了,如果场景中有许多个这样的模型,耗时那就可想而知了,为此,本发明利用每个线程模型的IO线程并行简化三维模型数据。

如图5所示,利用每个线程模型的IO线程并行简化通过步骤S104获得的三维模型数据具体包括以下子步骤:

步骤S1051,计算三维模型的所有顶点的剔除值。

假设一个三维模型由多个三角面组成,共有M个顶点,则计算该三维模型的所有三角面的M个顶点的剔除值,如图4所示,通过下述公式计算三维模型所有顶点的剔除值:

其中,表示顶点a的剔除值,顶点b是与顶点a相邻的一个顶点,表示包含顶点a的三角形的集合,表示同时包含顶点a和顶点b的三角形的集合,表示三角面n的法线向量值,m.normal表示三角面m的法线向量值。

依照上述公式依次计算三维模型的每个顶点的剔除值,从而得出了三维模型所有顶点的剔除值。

步骤S1052,选取最大剔除值,假设最大剔除值为cost(a,b)。

计算顶点a的剔除值时,由上述步骤S1051的公式计算每一个与a相邻顶点的cost值,并从其中选择最大的一个cost值作为顶点a的剔除值,其它顶点的剔除值计算方法类似,该实施例假设与a相邻的b点计算出的cost值,作为顶点a的剔除值。

步骤S1053,剔除所有包含以顶点a和顶点b组成的边的三角面;

步骤S1054,重新计算与顶点a相邻顶点的剔除值;

步骤S1055,将顶点a移动到顶点b,以顶点b替换顶点a;

重复上述步骤S1052-S1055,直到处理完三维模型的所有顶点,并对三维模型M个顶点按照剔除值小到大的顺序进行排序。

图5中,M是三维模型的顶点个数,t是计数器,循环计算三维模型所有顶点的剔除值,t小于等于0,退出循环结束计算,并对三维模型的M个顶点按照剔除值小到大的顺序进行排序。渲染时,要计算待渲染的三维模型顶点的个数(下文结合图6作进一步说明),然后根据计算结果从对三维模型排序后的顶点中取出相应个数(即,计算出的要渲染的三维模型顶点的个数)的顶点来进行绘制,从而达到简化模型的目的。

步骤S106,利用每个线程模型的RC线程对所述简化后的多个三维模型进行并行渲染绘制以得到与每个所述三维模型对应的显示符号,并终端屏幕上显示所述显示符号。

如图6所示,步骤S106具体包括以下子步骤:

步骤S1061,判断待渲染绘制的三维模型是否存在显示符号,如果存在,则直接转入步骤S1062,否则,先依次执行步骤S104和S105,获得简化后的三维模型,然后再转入步骤S1062;

步骤S1062,判断三维模型与视点的距离是否发生变化,如果是,则转入步骤S1063,否则,转入步骤S1067;

步骤S1063,计算待渲染的顶点个数;

例如:在视点50米范围内模型不简化;50米~200米模型简化,模型顶点数减少20%,渲染绘制时只绘制按照剔除值从小到大排序后前80%的顶点组成的三角面;200米~500米模型简化,顶点数减少40%,渲染绘制时只绘制按照剔除值从小到大排序后前60%的顶点组成的三角面;500米~1000米模型简化,顶点数减少60%,渲染绘制时只绘制按照剔除值从小到大排序后前40%的顶点组成的三角面,依次类推;大于1000米,模型不显示。

在步骤S1063计算出待渲染的顶点个数之后,从在结合图5描述的对三维模型排序后的顶点中取出相应个数的顶点来进行渲染绘制。

步骤S1064,根据步骤S1063的计算结果,对简化后的三维模型进行渲染绘制;即,从对三维模型排序后的顶点中取出步骤S1063计算的个数的顶点来进行渲染绘制。

需要指出的是,步骤S1063的顶点减少意味组成三维模型的三角面减少,为提高三维模型的绘制速度,本发明先计算绘制的模型顶点个数,然后渲染绘制。

步骤S1065,将渲染绘制后的三维模型生成显示符号并将生成的显示符号放入显示列表模型;

步骤S1066,对每个三维模型,根据三维模型与视点的距离,按照由近到远的顺序依次从所述显示列表模型中取出该三维模型的显示符号并在屏幕上显示;

步骤S1067,直接从显示列表模型中取得该三维模型的显示符号并在屏幕上显示;由于在三维模型与视点的距离不变时,本发明直接从显示列表中取得该三维模型的显示符号并在屏幕上显示,即,直接从显示列表中取出上一次的渲染结果在屏幕上显示,从而进一步提高了了三维模型的显示效率。

本发明能够快速获取三维模型数据,加快三维模型渲染绘制时间,提高三维模型的显示效率,提升用户在三维场景中交互的体验感,充分发挥了计算机的高性能计算优势。该方法在地理信息系统及相关行业三维软件中使用和推广,将会产生良好的社会经济效益。

以上内容仅为本发明的较佳实施例,对于本领域的普通技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,本说明书内容不应理解为对本发明的限制。

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