代码之家  ›  专栏  ›  技术社区  ›  feal87

真实应用程序中的冲突

  •  15
  • feal87  · 技术社区  · 16 年前

    这是我的问题。我正在制作一个游戏,我想知道如何进行碰撞。我有几个案例需要分析,并找到最佳解决方案。

    我有两种类型的网格,我必须对其进行碰撞:

    1) 静态网格(在屏幕上移动,但没有任何动画)

    实际上,我有这个解决方案(相当粗糙:|)

    首先,我对包围整个网格的一些边界体积进行了测试(在我的例子中是胶囊),之后:

    1) 对于静态网格,我将它们手动划分为块(在modeler上),对于每个块,我使用sphere/AABB测试(工作很好,但是对每个网格进行切片有点混乱:P)(我尝试了一个自动系统来通过平面分割网格,但结果不好:()

    2) 对于动画网格ATM,我在运行时将网格划分为x个块(其中x是骨骼的数量)。每个块都包含该骨骼是其主要影响因素的顶点(有时有效,有时效果很差

    问题是:

    对于这两种情况,最明智的想法是什么? 你能论证为什么这个解决方案比其他的好吗?

    谢谢你的回答!!!

    编辑:试图在网上找到一个K-Dop示例,并给出一些解释。仍然没有找到任何东西有什么线索吗? 我对如何使用其他类型的边界卷等有效地测试K-Dop感兴趣……但网上的文档似乎非常缺乏:(

    4 回复  |  直到 16 年前
        1
  •  5
  •   KeyC0de    6 年前

    当前许多AAA游戏中最常用的方法是静态网格的“k-DOP”简化碰撞,以及骨骼网格的简化物理实体表示。

    如果你搜索“kDOP碰撞”或“离散方向多面体”,你应该找到足够的参考资料。这基本上是由几个平面定义的边界体积,这些平面从外部向网格移动,直到发生三角形碰撞。kDOP中的“k”定义了这些平面的使用数量,并且根据您的几何体和“k”,您可以得到非常好的近似值。

    对于骨骼网格,最常用的技术是定义附着到特定骨骼的简单几何体。此几何体可能是长方体或球体。此碰撞模型可用于相当精确的动画网格碰撞检测。

    如果你需要每次三角形碰撞,“分离轴定理”是你选择的谷歌搜索词。这在特定情况下非常有用,但上述方法应涵盖75%的碰撞检测需求。

    请记住,您很可能需要比边界体积更高级别的早期碰撞拒绝。一旦世界上有很多对象,就需要使用“空间分区”尽早拒绝进一步测试的对象组。

        2
  •  6
  •   Finglas    16 年前

    在执行复杂碰撞检测之前,您应该执行基本检测。

    使用球体或矩形作为边界体积是最好的选择。然后,如果检测到冲突,请转到更复杂的方法。

    与游戏编程一样,有多种碰撞检测方法。我的建议是从简单开始。拿一个立方体,在上面完善你的程序,然后理论上你应该能够使用任何其他模型。至于例子,我要查一查 gamedev.net 因为他们有一些好文章。很多或者我自制的碰撞检测是许多方法的组合,所以我不能真正推荐确定的资源。

        3
  •  3
  •   Paul Nathan    16 年前

    答案归结为

    显然,球体边界框是最简单的。在比例的另一侧,有一个完整的三角形网格碰撞检测,

    游戏开发物理引擎依赖于近似的艺术(几年前我潜伏在GameDev.net的数学和物理论坛中)。

    我的意见是,您需要与每个对象关联的某种边界椭球体。对象可以是常规多重网格对象、网格或子网格。这应该提供一个“适当”的近似值。

        4
  •  2
  •   Crashworks    16 年前

    Christer Ericson's 书, Real-Time Collision Detection

    在阅读文章时,请记住,在现实世界的游戏应用程序中,您将在严格的内存和时间限制下工作-每帧16.6ms,仅此而已!因此,对于任何没有认真讨论其算法的内存和CPU占用的文章或论文,都要小心。

    推荐文章