论文部分内容阅读
本论文主要研究了三角网格模型求交算法。三角面片的剔除很大程度上影响了求交算法的效率,而这类剔除工作是基于碰撞检测来实现的。碰撞检测的目的就是检测多个模型在空间位置上是否部分或完全重合,这样就可以在模型进行求交之前剔除大量不相交的三角面片。虽然碰撞检测技术已经比较成熟,有很多经典的研究成果,但随着计算机图形学的快速发展,三角网格模型的复杂度不断提升,导致求交算法需要处理的三角面片数量也成倍增加。为了满足人们对场景真实性、交互实时性的更高需求,寻求一种快速准确的碰撞检测算法成为当前需要迫切解决的问题。本文在研究和分析了大量碰撞检测算法的基础上,总结了目前主流碰撞检测算法各自的优缺点。这些算法包括空间剖分法、AABB层次包围盒树方法和OBB层次包围盒树算法,对如何将这些算法进行适当的结合和改进,以提高碰撞检测过程的效率并应用于模型间的求交计算进行了一定的探索性研究。空间剖分算法需要判断每个三角面片所占的空间小立方体,这样可以一步定位两个模型的相交情况,但效率不高,尤其是模型复杂度较高时,问题就更加突出。OBB层次包围盒树方法可以用比较快的速度剔除大量不相交的三角面片,但定位可能相交的三角面片这一操作却是一个层层迭代的过程,从这个角度来说就会降低一定的效率。针对两个算法各自的问题,本文对其进行了改进:只对一个求交模型建立包围盒并进行剖分,进一步确定组成模型的三角面片所占的空间小立方体,进行第一次的剔除。然后再对剩余的模型用OBB层次包围盒树进行剔除操作,最后对剩下的三角面片进行求交。改进后的算法在一定程度上提高了求交前期三角面片间的碰撞检测效率,并能剔除较多的三角面片,为下一步的求交工作减轻负担。AABB层次包围盒树方法相对OBB层次包围盒,包围盒紧密性比较差,可能会导致大量冗余的包围盒需要进行相交测试,但这种方法构造简单、操作简便。本文结合了AABB层次包围盒和OBB层次包围盒的优点,提出一种新的求交算法。每次求交操作都直接作用于模型的包围盒,求出包围盒的相交部分,然后将相交包围盒以外的三角面片全部剔除。对剩余的三角面片重建包围盒再次进行求交剔除操作,当剩余的模型三角面片达到某个设定的阈值之后包围盒求交停止进行。通过这一操作,能够剔除较多数量的三角面片,一定程度上减少了进入下一阶段求交的三角面片数。然后再利用OBB层次包围盒对剩余的三角面片进行进一步的剔除,最后对剩余的三角面片进行两两求交。最后,我们使用VC++与OpenGL实现了上述的两个改进的算法,实验表明,两种算法应用于三角网格模型间的求交计算,求交性能有所提高。