这是我的问题。我正在创建一个游戏,我想知道如何进行碰撞。我有几个案例要分析并找到最佳解决方案。
我会提前说,我没有使用任何第三方物理库,但我会在内部进行。(因为这是一个教育项目,我没有时间表,我想学习)
我有 2 种类型的网格,我必须为它们进行碰撞:
1) 静态网格体(在屏幕上移动,但没有任何动画)
2)蒙皮/骨骼网格(动画)
其实我有这个解决方案(很hacky :|)
首先,我对包含完整网格(在我的情况下为胶囊)的一些边界体积进行了测试,之后:
1)对于静态网格,我将它们手动划分为块(在建模器上),对于每个块,我使用球体/AABB 测试。(工作正常,但是切割每个网格有点混乱:P)(我尝试了一个自动系统将网格划分为平面,但它给出了不好的结果:()
2) 对于动画网格 ATM,我在运行时将网格划分为 x 个块(其中 x 是骨骼数)。每个块都包含该骨骼是主要影响因素的顶点。(有时有效,有时会产生非常糟糕的结果。:|)
请注意,网格的划分是在加载时完成的,而不是每次都完成(否则它会像幻灯片一样运行:D)
这是问题:
对于这两种情况,最明智的想法是什么?有什么材料可以让我学习这些方法吗?(有一些源代码和解释会更好(语言不重要,当我理解算法时,实现很容易))你能论证为什么这个解决方案比其他解决方案更好吗?我听到很多关于 kd-tree、octree 等的讨论。虽然我了解它们的结构,但我想念它们在碰撞检测场景中的实用性。
非常感谢解答!!!
编辑:试图在网上找到一个带有一些解释的 K-Dop 示例。仍然没有找到任何东西。:( 有什么线索吗?我对如何使用其他类型的包围盒等有效地测试 K-Dop 很感兴趣……但是网上的文档似乎非常缺乏。:(