用于2D中碰撞检测的技术资源?

时间:2008-08-27 20:21:09

标签: algorithm collision-detection

您认为在2D环境中描述用于碰撞检测的算法或技术的最佳资源(书籍或网页)是什么?

我只是渴望学习不同的技巧来制作更复杂,更高效的游戏。

5 个答案:

答案 0 :(得分:13)

碰撞检测通常是一个两阶段过程。某种“宽相”算法,用于确定两个对象是否有可能重叠(试图避免n ^ 2比较),然后是“窄相”碰撞检测算法,该算法基于应用程序的几何要求

对于经历相对物理运动的物体(快速移动或具有大不相同的尺寸和边界的物体),

Sweep and Prune是一种成熟的高效宽相算法(有少数变体可能适合或不适合您的应用)区域可能使这不适合)。 Bullet库有一个3d实现供参考。

窄相位碰撞通常可以像“CircleIntersectCircle”一样简单。 Bullet库再次具有良好的参考实现。在3d土地中,当任意物体需要更精确的探测时,GJK是当前的作物之一 - 据我所知,没有任何东西可以阻止它适应2d(但它最终可能比暴力强迫慢你所有的边缘;)

最后,在进行碰撞检测后,您经常需要某种碰撞响应。 Box 2d是物理响应解决方案的良好起点。

答案 1 :(得分:2)

就个人而言,我喜欢Paul Bourke的作品。

此外,Paul Nettle曾经写过这个话题。他有一个完整的3D碰撞检测库,但您可能对这些库背后的想法更感兴趣(这些库非常适用于2D)。为此,请参阅General Collision Detection for Games Using Ellipsoids

答案 2 :(得分:2)

Metanet Software已发布some relevant tutorials。 Metanet开发N(基于Flash,适用于Windows,Mac,Linux)和N+(适用于X360,DS和PSP)。

答案 3 :(得分:1)

Christer Ericson撰写的“实时碰撞检测”(ISBN:1-55860-732-3)是最近(2005年)被广泛称赞的书,应该给你一些好的答案。

首先介绍一些您需要了解的数学基础知识,然后介绍碰撞检测中常用的各种类型的边界体积(球体,轴对齐边界框,定向边界框)。

接下来讨论的是用于检测各种基元组合之间碰撞的众多算法,例如线条,三角形,球体,多边形,平面,边界体积等。

同样重要的是覆盖对象的空间划分和组织的一些主要方法(卷层次结构,BSP树,八叉树等)。这实质上加速了碰撞检测,因为它允许你细分你的对象,这样你就可以避免对象之间不必要的比较(例如我从我的数据结构中知道对象A太远而无法击中对象B,所以我甚至都不会这样做距离检查)。

它还包括一些关于如何实际检查移动物体之间碰撞(间隔等)的内容,但要注意即使这是一本相当大的书并且很好地覆盖了材料,它也适用于碰撞检测< / em>,而不是解决方案响应。因此,它将帮助您确定两个对象是否发生了碰撞,但实际上并不知道该怎么做,即如何解决它。交叉测试通常会为您提供做出此类决策所需的数据,但是就编写求解器的一般问题而言,它使用碰撞检测例程来检测碰撞,然后决定如何处理他们,这本书没有深入探讨。

答案 4 :(得分:0)

如果您的对象在2D空间中表示为点,则可以使用线交点来确定两个对象是否已发生碰撞。您可以使用类似的逻辑来检查对象是否在另一个对象内(因此它们甚至碰撞了它们的任何线当前都不相交)。 math to do this非常简单,任何有关基本几何的教科书都应该涵盖{{3}}。检测对象是否已完全通过对象可能会有点棘手。