从哪里开始将 3D 网格封装在边界体积层次结构中
我正在为我的研究开发一个相当基本的刚体物理模拟器。我需要非常细粒度的碰撞检测。也就是说,我需要网格体碰撞多边形的 XYZ 点。我不能仅仅将网格封装在粗略的边界体积中,并将碰撞响应基于它们。
因此,对于具有大量多边形的网格,我显然需要 BVH(或等效的东西)。我需要帮助的是我可以在预处理步骤中运行的算法,该算法可以从网格生成 BVH。我的背景是游戏,迄今为止我发现的所有资源都将整个网格包裹在凸多面体中,并且没有测试网格本身。这是因为游戏可以摆脱像这样的粗糙物理现象。
我目前正在阅读 Ericson 的实时碰撞检测,这非常有帮助,但我想知道是否有人知道专门处理这个问题的任何书籍/论文。
我还计划从多边形生成 AABB。在遍历 BVH 时的每一帧,我都会通过刚体的变换矩阵来变换 AABB,从而创建 OABB。然后我会测试 OABB 的交叉点。我还没有实现这个,目前都是理论技术。如果有人有这样做的经验,任何提示或更有效的算法将不胜感激!
I am working on a rather rudimentary rigid body physics simulator for my studies. I require very fine-grain collision detection. That is, I require the XYZ point of colliding polygons of the meshes. I cannot just encapsulate the meshes in rough bounding volumes and base my collision responses on them.
So, for meshes with a high number of polygons I obviously need a BVH (or something equivalent). Where I need help is an algorithm I can run in a pre-processing step which generates a BVH from the mesh. My background is games and all of the resources I have found thus far wrap entire meshes in convex polyhedra, and do not go as far as testing the meshes themselves. This is because games can get away with rough physics such as this.
I am currently reading through Ericson's Real Time Collision Detection which is quite helpful, but I am wondering if anyone knows of any books/papers which specifically deal with this problem.
I also was planning on generating AABB's from the polygons. Each frame while traversing the BVH I would transform the AABB by the rigid body's transformation matrix, creating an OABB. Then I would test the OABB's for intersection. I have not implemented this yet and is all theorycraft at the moment. If anyone has any experience doing this, any tips or more efficient algorithms would be greatly appreciated!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
性能的一大优势是使用线性规划技术来实现最优性和点减少。其中一种求解器是 GJK 或 Gilbert, Johnson Keerthi 求解器。
还有其他简单的求解器,但实际上,当涉及到 NP 完全问题的优化时,它仍然是一个有效的研究主题并可供讨论。
One benefactor to performance is using linear programming techniques for optimality and point reduction. One such solver is the GJK or Gilbert, Johnson Keerthi solver.
There are other simplice solvers out there, but really when it comes to optimization of NP complete problems, it is still a valid research topic and open for discussion.
您可以实现三角形缓存,这是一种非常简单的技术。本质上,您保存了两个发生碰撞的 BVH 中的一对叶节点。下次检查这两个 BVH 之间的冲突时,首先立即测试保存的两个叶节点。如果帧到帧的一致性很高(游戏通常就是这种情况),那么您很可能无需测试两个 BVH 就能检测到碰撞!
UNHC gamma 发表了几篇提及/描述三角形缓存的论文。例如,请参阅这篇论文(我认为它非常可读!)。
You could implement triangle caching, which is a very simple technique. In essence, you save the pair of leaf-nodes from two BVHs that collides. The next time you check for collision between these two BVHs, begin by testing the saved two leaf-nodes immediately. If frame-to-frame coherency is high, which is usually the case with games, then chances are that you will detect a collision without ever testing the two BVHs!
UNHC gamma has published several papers that mention/describe triangle cachning. For instance, see this paper (I think its very readable!).