论文部分内容阅读
在计算机图形学、计算机动画等领域,三角网格模型求交一直都是重要的研究课题,因为它很大程度地提高了虚拟现实环境的真实感和沉浸感。然而,随着模型的三角形数量不断增长,势必导致三角网格模型求交的速度下降。如果想要保证运算的实时性和有效性,必然需要对既有的经典算法进行相应的改进。本文通过收集和研究大量的中外文献,将求交过程大致分为两步骤:第一步,求交点之前的碰撞检测。主要对目前主流的碰撞检测算法进行了总结,包括AABB包围盒、包围球、OBB包围盒、k-DOPs包围盒以及平均单元格法,并且比较它们的优缺点。第二步,求交点计算。介绍了两种经典的求交点算法,旨在快速且有效地计算出两个三角形间的相交点。层次包围盒法可以快速地排除大量无关的三角形,但随着层次的增加,树的复杂度也相应增加,使得计算速度有所下降;对于每对叶节点,在简单判断是否相交之后,只能将其中所有的三角面片进行两两求交。平均单元格法采用索引的思想,精确地将来自于两个模型的可能相交的三角形确定在一部分小单元格内。但由于未经处理的模型复杂度较高,且含有大量无关三角形,因此效率也很低下。针对上述两种算法的优缺点,本文做了相应的改进:首先,对两个模型创建各自包围盒,并使用层次包围盒法粗略地筛选出可能相交的三角形;然后,对保留的节点采用平均单元格法,将来自于不同模型的三角形限定在一个小单元格中;最后,对小单元格内的三角形进行求交计算。通过对节点的分类排序,得到正确的交线。改进算法在提高求交速度的同时,也大大减少了内存的消耗,使得该方法更适用于巨大的模型场景。三角形求交点算法,主要是将三角形间的求交运算转化为线段与三角形的求交运算。一般来说,确定2个三角形求交至少需要6次求交检测,每次求交检测对应一个三角形的边与另一个三角形。在大量三角形求交的情况下,该策略将存在大量的计算量,进而导致计算效率不高。针对以上不足,本文做出如下改进:首先,通过判断线段是否与三角形所在的平面相交,来排除不相交的线段;然后,基于线性方程组之间的强关联性,利用公共变量和线性矩阵运算来减少相应的计算量;最后,对于线段与三角形共面情况,可以转化为线段与线段求交运算,同样利用方程组之间的强关联性来减少计算量。最后,对以上两个改进算法进行了反复实现与比较。实验结果表明,两种改进算法应用于三角网格曲面求交计算,都会带来求交性能上的提高。