一种面向GPU的三角网格碰撞检测方法技术

技术编号:15692084 阅读:96 留言:0更新日期:2017-06-24 05:49
本发明专利技术公开了一种面向GPU的三角网格碰撞检测方法,包括基本碰撞算法部分和算法优化部分。其中,基本碰撞算法的具体步骤包括:步骤11、进行三角形相交测试;步骤12、进行两个物体间的碰撞检测;算法优化部分利用减少内存访问策略和共享内存策略两种策略进行加速,具体步骤包括:步骤21(通过减少内存访问次数的策略,对基本碰撞算法进行优化)、步骤22(通过内存共享的策略,对基本碰撞算法进行优化)、步骤23(结合减少内存访问的次数和内存共享,对基本碰撞算法进行优化)。本发明专利技术的一种面向GPU的三角网格碰撞检测方法,适用于中等复杂度的模型,降低了算法复杂度,提高了碰撞检测算法的性能。

A triangle mesh collision detection method for GPU

The invention discloses a triangular mesh collision detection method for GPU, which comprises a basic collision algorithm part and an algorithm optimization part. Among them, the basic steps of collision algorithm comprises the following steps: step 11, triangle intersection test; step 12, the collision detection between two objects; algorithm optimization using strategies to reduce memory access and shared memory strategies two strategies are accelerated, the specific steps include: step 21 (the basic algorithm is optimized by reducing the collision the number of memory access strategies), step 22 (the basic collision algorithm is optimized through shared memory strategies), step 23 (combined to reduce the number of memory access and sharing, to optimize the basic collision algorithm). The invention relates to a triangular mesh collision detection method for GPU, which is suitable for a model with medium complexity, reduces the complexity of the algorithm and improves the performance of the collision detection algorithm.

【技术实现步骤摘要】
一种面向GPU的三角网格碰撞检测方法
本专利技术涉及计算机图形学领域,尤其涉及一种面向GPU的三角网格碰撞检测方法。
技术介绍
碰撞检测(CollisionDetection,简称CD)技术用于检测空间中的一个或多个几何物体之间是否存在重叠,如果存在则识别重叠特征。碰撞检测算法被广泛地应用在计算机图形学领域的多方面应用中,包括基于物理的动画、几何建模、6-DOF触觉渲染、机器人路径规划、医学成像、交互式计算机游戏等。随着多核图形处理器(GraphicsProcessingUnit,简称GPU)这样的大规模并行处理器的快速发展,以及NVIDA推出的通用并行计算架构CUDA(ComputeUnifiedDeviceArchitecture,简称CUDA)。许多基于单处理器的算法已经利用CUDA技术扩展到GPU上。如层次包围盒(BoundingVolumeHierarchy,简称BVH)结构就是提高碰撞检测性能很好的技术。但是由于一般的串行算法对数据依赖较高,从存储器结构访问数据会有延迟。如BVH这类空间数据结构的算法复杂度较高,很多都需要进行预处理或是代价较高的数据结构重构。为了解决这些问题,首先,需要将这些有效的串行算法重新设计适用于大规模的并行处理器,其次,需要在保证碰撞检测性能提高的基础上,摒弃预处理以及代价较高的数据结构重构操作。因此,本领域的技术人员致力于开发一种面向GPU的三角网格碰撞检测方法,利用对基本的碰撞检测算法的优化在GPU上进行大规模并行计算来对物体进行快速、准确的碰撞检测,算法适用于中等复杂度的模型,涉及基于分离轴的三角形相交测试、减少内存访问优化策略、共享内存优化策略等方法,降低了算法复杂度,提高了碰撞检测算法的性能。
技术实现思路
有鉴于现有技术的上述缺陷,本专利技术所要解决的技术问题是开发一种面向GPU的三角网格碰撞检测方法,利用对基本的碰撞检测算法的优化在GPU上进行大规模并行计算来对物体进行快速、准确的碰撞检测,算法适用于中等复杂度的模型,涉及基于分离轴的三角形相交测试、减少内存访问优化策略、共享内存优化策略等方法,降低了算法复杂度,提高了碰撞检测算法的性能。为实现上述目的,本专利技术提供了一种面向GPU的三角网格碰撞检测方法,包括基本碰撞算法部分和算法优化部分,其中,基本碰撞算法的具体步骤包括:步骤11、进行三角形相交测试;步骤12、进行两个物体间的碰撞检测;算法优化部分利用减少内存访问策略和共享内存策略,具体步骤包括:步骤21、通过减少内存访问次数的策略,对基本碰撞算法进行优化;步骤22、通过内存共享的策略,对基本碰撞算法进行优化;步骤23、结合减少内存访问的次数和内存共享,对基本碰撞算法进行优化。进一步地,步骤11具体为:步骤111、寻找三角形对之间所有的潜在分离轴;步骤112、利用分离轴方式进行三角形相交测试。寻找潜在的分离轴方式:假设有三角形x1x2x3和三角形x4x5x6,π1、π2分别是三角形x1x2x3和三角形x4x5x6的平面法线,ei(i=1,…6)为三角形x1x2x3和三角形x4x5x6的边,令L为潜在的分离轴,对于三维空间的两个三角形,分离测试只要考虑有限集合的潜在的分离轴,这里的分离轴包括π1,π2,ei×ej(i=1,2,3;j=4,5,6),π1×ei(i=1,2,3),π2×ej(j=4,5,6)。进一步地,如果存在一条潜在分离轴L,通过将两个三角形投影到分离轴L上进行相交测试。三角形x1x2x3在L上的投影区间被设置为三角形x4x5x6在L上的投影区间被设置为当I0与I1两个投影区间不相交,判定两个三角形不相交。特别的,当两个三角形在L上的投影区间满足或者时,这两个三角形显然是不相交的。进一步地,利用分离轴理论进行三角形相交测试时,相交测试的投影和区间测量方式操作类似,所以,已知任意一个投影区间不相交,就不用进行剩余的分离轴测试。如果所有分离轴测试结束,没有一个区间是分离的,那么这两个凸集必定相交。进行物体碰撞检测,由于测试的物体是由三角形构成的网状物体,所以利用三角形相交测试方法,将任意物体A和B之间的碰撞检测转化为A与B之间两组三角形之间的相交计算。进一步地,两个物体间的碰撞检测具体为:每一个CUDA线程读取物体A中的一个三角形a和物体B中的一个三角形b,然后计算它们对应的相交状态;当三角形a和三角形b相交,它们对应的三角形索引号被存储。进一步地,步骤21具体为:三角形数据被设置为读取一次,多次使用;每一个CUDA线程读取物体A中的一个三角形,同时读取物体B中的K个三角形,每一个CUDA线程进行K次基础碰撞检测。进一步地,步骤22具体为:从设备内存加载三角形数据到共享内存,然后将数据同步给其他所有CUDA线程,使得每个CUDA线程都可以安全读取到不同CUDA线程填充的共享内存地址;由于共享内存时稀缺资源,每次只能加载两个物体的部分三角形数据进入共享内存。从物体A和B中分别加载K个三角形数据进入共享内存,利用共享内存的数据进行碰撞测试,最后将结果写回设备内存。进一步地,步骤23具体为:利用共享内存的方式,先从物体A和物体B中分别加载K个三角形数据进入共享内存,然后利用共享内存中的三角形数据进行碰撞检测。碰撞检测时,利用减少内存访问的策略,读取物体A中的一个三角形与物体B中的所有三角形进行碰撞检测,减少不必要数据的传输。技术效果1、减少内存的访问次数,保证全局内存和设备内存之间的数据传输频率;2、使用共享内存,充分利用共享内存中的资源,共享内存的速度比全局内存快,在共享内存中进行碰撞检测,最后将碰撞结果写回设备内存;3、实现在GPU上进行大规模并行计算来对物体进行快速、准确的碰撞检测,算法适用于中等复杂度的模型,涉及基于分离轴的三角形相交测试、减少内存访问优化策略、共享内存优化策略等方法,降低了算法复杂度,提高了碰撞检测算法的性能。以下将结合附图对本专利技术的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本专利技术的目的、特征和效果。附图说明图1是本专利技术的一个较佳实施例的分离轴方式进行三角形相交测试的示意图,其中(a)给出三维空间中的两个三角形面片,(b)为两个三角形其中一条分离轴测试示意图。图2是本专利技术的一个较佳实施例的物体A和物体B在GPU上进行碰撞检测示意图。图3是本专利技术的一个较佳实施例的利用减少内存访问优化策略,物体A和物体B在GPU上进行碰撞检测示意图;图4是本专利技术的一个较佳实施例的利用共享内存优化策略,物体A和物体B在GPU上进行碰撞检测示意图;图5是本专利技术的一个较佳实施例的结合减少内存访问策略和共享内存优化策略,物体A和B在GPU上进行碰撞检测示意图。图6是本专利技术的一较佳实施例的从物体A和物体B中分别加载K个三角形进入共享内存进行碰撞检测示意图。具体实施方式如图1所示,本专利技术的一较佳实施例的一种面向GPU的三角网格碰撞检测方法,包括基本碰撞算法部分和算法优化部分,其中,基本碰撞算法的具体步骤包括:步骤11、进行三角形相交测试;优选的,使用分离轴进行三角形相交测试;具体地,步骤11包括:步骤111、寻找三角形对之间所有的潜在分离轴;步骤112、利用分离轴方式进行三角形相交测试。步骤12、进行两个物体间的碰撞检测;进行物体碰撞检本文档来自技高网
...
一种面向GPU的三角网格碰撞检测方法

【技术保护点】
一种面向GPU的三角网格碰撞检测方法,其特征在于,包括基本碰撞算法部分和算法优化部分,其中,所述基本碰撞算法的具体步骤包括:步骤11、进行三角形相交测试;步骤12、进行两个物体间的碰撞检测;所述算法优化部分利用减少内存访问策略和共享内存策略,具体步骤包括:步骤21、通过减少内存访问次数的策略,对基本碰撞算法进行优化;步骤22、通过内存共享的策略,对基本碰撞算法进行优化;步骤23、结合减少内存访问的次数和内存共享,对基本碰撞算法进行优化。

【技术特征摘要】
1.一种面向GPU的三角网格碰撞检测方法,其特征在于,包括基本碰撞算法部分和算法优化部分,其中,所述基本碰撞算法的具体步骤包括:步骤11、进行三角形相交测试;步骤12、进行两个物体间的碰撞检测;所述算法优化部分利用减少内存访问策略和共享内存策略,具体步骤包括:步骤21、通过减少内存访问次数的策略,对基本碰撞算法进行优化;步骤22、通过内存共享的策略,对基本碰撞算法进行优化;步骤23、结合减少内存访问的次数和内存共享,对基本碰撞算法进行优化。2.如权利要求1所述的一种面向GPU的三角网格碰撞检测方法,其特征在于,所述步骤11具体为:步骤111、寻找三角形对之间所有的潜在分离轴;步骤112、利用分离轴方式进行三角形相交测试。3.如权利要求2所述的一种面向GPU的三角网格碰撞检测方法,其特征在于,寻找潜在的分离轴方式具体为:假设有三角形x1x2x3和三角形x4x5x6,π1、π2分别被设置为是所述三角形x1x2x3和所述三角形x4x5x6的平面法线,ei(i=1,…6)被设置为所述三角形x1x2x3和所述三角形x4x5x6边;令L为潜在的分离轴,分离轴包括π1,π2,θi×θj(i=1,2,3;j=4,5,6),π1×θi(i=1,2,3),π2×θj(j=4,5,6)。4.如权利要求3所述的一种面向GPU的三角网格碰撞检测方法,其特征在于,所述三角形x1x2x3在直线L上的投影区间被设置为所述三角形x4x5x6在所述潜在的分离轴L上的投影区间被设置为如果存在一条直线L,使得I0与I...

【专利技术属性】
技术研发人员:张新宇任花
申请(专利权)人:华东师范大学
类型:发明
国别省市:上海,31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1