我制作了一个基本的 .obj 网格加载器,可以在 OpenGL 中加载模型和纹理。但是,我的问题是在它们上面放置边界框的最佳解决方案是什么。例如,如果我加载一个圆形模型,那么在它周围放置一个 AABB 会是一个糟糕的解决方案吗?
我的想法是让一个对象有一个全局 AABB 框,然后模型还有一个更完美的边界框列表。
我的问题是,我应该用什么来制作这个更完美的边界框列表?
不要担心碰撞检测的“更完美的边界框”。这不是他们的重点。您想要的是一个边界元素 - 可能还有它们的层次结构 - 它允许您轻松测试交叉点并拒绝不需要执行基本交叉点测试的大量多边形/元素。
我想说,从你的 AABB 开始(或者甚至是边界球,为了它们的简单性)。并且要么自上而下,要么自下而上(使用一些适当的启发式)从它们中构造一棵树。您的顶部节点具有适合您整个模型的大型 AABB。每个分支(及其 AABB)都包含一个更小的网格子集。您希望最终的树平衡良好。
如果您注意到您的 AABB 会导致问题(例如,性能可能不够),那么您始终可以选择其他边界元素。也许是 OBB 或 k-DOP。例如,在我们的服装模拟代码中,k-DOP 已证明非常适合。
无论如何,您可能想查找“实时碰撞检测”一书。它深入探讨了这个主题,如果您对这样的主题感兴趣,恕我直言,这是一个很好的资源。但首先要保持简单。让它们工作,然后担心优化。