一种基于GPU的海量模型并行碰撞检测方法与流程

文档序号:15590004发布日期:2018-10-02 18:50阅读:649来源:国知局

本发明属于碰撞检测领域,涉及一种基于gpu的海量模型并行碰撞检测方法。



背景技术:

随着计算机技术的发展与成熟,虚拟现实技术蓬勃发展,越来越多的应用到了航空航天、生物医学、机械制造等多方面领域。为保障场景模拟的真实性,碰撞检测的准确性及效率极其重要。在广域场景中可能包含着成千上万个模型,如何有效地对广域场景中海量模型进行碰撞检测处理,提高检测效率,降低资源利用率,提高场景仿真的执行效率。这就对高性能数据处理能力提出了较高的要求。

传统的模型碰撞检测处理是基于层次包围树进行的多线程处理,在多处理器和云计算技术兴起后,以上处理进行了并行化,提高了处理速度。但是,由于广域场景中海量模型的碰撞检测处理的精度要求,同时海量模型碰撞检测具有密集数值计算特点,将这类数据用多处理器和云计算技术进行处理,浪费了以上计算设施的大量逻辑分析资源。

随着微电子技术的发展,新型计算技术也层出不穷,基于gpu的通用异构计算技术,为处理密集型数值计算提供一种高效的并行处理手段。实质上,gpu的通用异构计算技术是一种simd处理技术,非常适合虚拟现实仿真过程中相关的处理操作,如海量模型的碰撞检测。

传统的碰撞检测是通过逐层的对模型进行遍历构建层次包围树,直至各包围盒中只包含基本的几何元素。可是传统方法并不适用于广域场景中,由于大规模环境仿真中,许多模型的碰撞检测的精确度要求不高。



技术实现要素:

有鉴于此,本发明的目的在于提供一种基于gpu的海量模型并行碰撞检测方法。

为达到上述目的,本发明提供如下技术方案:

一种基于gpu的海量模型并行碰撞检测方法,该方法步骤为:利用适用于广域场景中海量模型碰撞检测方法,进行广域场景包围盒遍历获取海量模型数据并利用显示存储器进行模型数据提取与存储,通过基于图形处理器gpu的通用计算方法,简化碰撞检查处理过程,允许海量模型同时进行碰撞检测处理。

具体为:

s1:设置两个位置存储器,分别用于存储当前模型所在位置及移动后模型所在位置,为后续碰撞检测作为支撑;

s2:根据当前模型当前移动速度与朝向,计算出移动后模型所在位置,并存储于移动后模型所在位置存储器中;

s3:在移动前后两点间构建连线段,判断在连线段上是否有模型与之相交,并将检测结果存储于碰撞检测结果存储器中;

s4:根据结果存储器中的结果,判断是否在模型移动的过程中存在碰撞;若不存在,则意味着移动可以发生,将移动后模型所在位置存储器中的结果返回到当前模型所在位置,实现模型移动;若存在,则意味着移动不能发生,返回当前模型所在位置存储器中的值,模型不发生移动。

进一步,所述适用于广域场景中海量模型碰撞检测方法为:根据模型在发生模型移动的前后,模型的质心初始点与终止点之间的连线,是否会与其他模型出现碰撞,阻挡模型移动,从而建立一种适用于广域场景中海量模型的碰撞检测方法。

进一步,所述广域场景包围盒遍历获取海量模型数据并利用显示存储器进行模型数据提取与存储为:在主机端,首先通过对整个场景进行遍历获取场景中海量模型数据,再将待处理的模型数据存储在高速存储器中,当进行碰撞检测时,直接从纹理寄存器中提取和调用数据。

进一步,所述基于图形处理器gpu的通用计算方法为:根据异构通用计算编程架构,进行数据结构的安排,每对模型对应一个单一的线程块block,而各线程块有统一的构成一个网格,在进行碰撞检测时,每个thread均对应于kernel程序,从而使各个线程并行完成各模型对的碰撞检测。

基于所述方法的cuda技术广域场景中海量模型数据并行碰撞检测方法,包括以下步骤:

s51:在主机端对场景包围树进行遍历,获取整个场景中的模型数据,拷贝到设备端等待处理;

s52:根据模型数量,在设备端分配存储空间,即按照模型对数分配存储块,设碰撞检测模型对数为n,在设备端分配n个存储块,每一个存储块对应存储一对模型;由cuda中线程与存储块的关系得到,每一个存储块对应一个线程块;每一对模型都对应一个存储块,每一个存储块对应一个线程块,一模型质心移动轨迹与另一模型的各结点对应于线程块中的一个处理线程;

s53:当设备端存储空间分配结束,利用适用于广域场景中海量模型碰撞检测的相关算法,对每个处理线程进行计算,以完成相关的图像处理操作;

s54:待碰撞检测处理结束,将设备端的实验结果拷贝回主机端,并在广域场景仿真过程中显示结果。

本发明的有益效果在于:本发明利用gpu的多处理器特点,适用于广域场景中海量模型的并行碰撞检测。

附图说明

为了使本发明的目的、技术方案和有益效果更加清楚,本发明提供如下附图进行说明:

图1为适用于广域场景中海量模型的碰撞检测方法流程图;

图2为基于cuda算法的大量图像并行处理流程简图;

图3为设备端存储空间分配;

图4为具体实施运用示意图。

具体实施方式

下面将结合附图,对本发明的优选实施例进行详细的描述。

1.如图1所示,为适用于广域场景中海量模型的碰撞检测方法流程图。

首先,设置两个位置存储器,分别用于存储当前模型所在位置及移动后模型所在位置,为后续碰撞检测作为支撑。

其次,根据当前模型当前移动速度与朝向,计算出移动后模型所在位置,并存储于移动后模型所在位置存储器中。

之后,在移动前后两点间构建连线段,判断在连线段上是否有模型与之相交,并将检测最后,根据结果存储器中的结果,判断是否在模型移动的过程中存在碰撞。若不存在则意味着移动可以发生,将移动后模型所在位置存储器中的结果返回到当前模型所在位置,实现模型移动。若存在则意味着移动不能发生,返回当前模型所在位置存储器中的值,模型不发生移动。

2.如图2所示,基于cuda技术的广域场景中海量模型数据并行碰撞检测流程简图

首先,在主机端(一般为cpu)对场景包围树进行遍历,获取整个场景中的模型数据,拷贝到设备端(一般为gpu)等待处理。

之后,根据模型数量,在设备端分配存储空间,即按照模型对数分配存储块,为便于叙述,这里设碰撞检测模型对数为n。因此可以在设备端分配n个存储块。每一个存储块对应存储一对模型。由cuda中线程与存储块的关系可以知道,每一个存储块对应一个线程块。由图3可以知道,每一对模型都对应一个存储块,每一个存储块对应一个线程块,一模型质心移动轨迹与另一模型的各结点对应于线程块中的一个处理线程。

然后,当设备端存储空间分配结束,利用适用于广域场景中海量模型碰撞检测的相关算法,对每个处理线程进行计算,以完成相关的图像处理操作。

最后,待碰撞检测处理结束,将设备端的实验结果拷贝回主机端,并在广域场景仿真过程中显示结果。

首先,对广域场景包围盒进行遍历,获取各模型结点信息,之后,将海量模型数据从主机端拷贝到设备端等待处理。在设备端,首先根据待处理的模型对数目进行存储空间分配,每一对模型对应一个线程块,从而进行碰撞检测处理。待处理结束后,将处理结果反送回主机端,之后,在广域场景仿真中显示碰撞检测结果,具体的流程如图4所示。

最后说明的是,以上优选实施例仅用以说明本发明的技术方案而非限制,尽管通过上述优选实施例已经对本发明进行了详细的描述,但本领域技术人员应当理解,可以在形式上和细节上对其作出各种各样的改变,而不偏离本发明权利要求书所限定的范围。

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