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