前面我们讲解了如何监听物理引擎的碰撞事件, 在物理引擎内核中如何架构与设计碰撞规则,使得物理Entity与周围的物理环境产生碰撞时,如何灵活的控制物理碰撞,本节給大家详细的讲解BEPUphysicsint 物理引擎内部是如何管理与控制碰撞规则的。本文主要讲解3个部分:
- 物理引擎碰撞计算的全流程详解;
- 用户控制碰撞关系的规则详解;
- 与物理碰撞相关的其它一些注意事项;
物理引擎碰撞计算的全流程详解
物理引擎的碰撞计算是物理引擎性能消耗的部分之一,物理引擎如何高效的做好物理碰撞计算与物理引擎内核如何标准的处理碰撞检测流程(pipeline),详细的步骤如下:
- BroadPhase 快速粗略碰撞检测。 通过这个步骤,快速的计算筛选出来可能产生碰撞的物理Entity碰撞对(Entity Collison Pair)。要实现这个设计目标我们可以从物体与场景入手,可以简化物体的形状来做碰撞检测,通过物理场景,快速的排除掉不可能发生碰撞的物体,从而替代简单的暴力搜索O(n^2)。每个物理Entity都有自己的包围盒,能包围住整个物理Entity的形状,当两个物理Entity的包围盒有重叠的时候,物理引擎会产生一个潜在可能的碰撞对,如图1.6-1

找到这个碰撞对后,就会把物理碰撞对加入到物理世界的碰撞列表中,来进行下一步计算。
- NarrowPhase 精确的计算碰撞,生成碰信息。经过第一步的粗略计算,找出来了可能发生碰撞的物理Entity碰撞对。接下来就是要根据物理Shape形状与角度来精确的计算出来是否有真实的碰撞以及详细的碰撞点位置,表面法线信息等。注意不是所有的碰撞对都会产生碰撞,如上图1.6-1所示,BroadPhase阶段产生了碰撞,但是NarrowPhase阶段,却发现没有产生碰撞。
- Collision Respones阶段: 物理碰撞系统的最后一个阶段就是迭代计算出碰撞对每个物理Entity运动改变的影响。因为物理引擎中不允许两个物理Entity穿透。所以碰撞后就会改变物理Entity的运动状态。
用户定义碰撞规则
在物理引擎Pipeline的物理碰撞计算中要筛选出物理Entity
BEPU物理引擎碰撞计算与规则设计

本文详细介绍了BEPUphysics物理引擎的碰撞计算流程,包括粗略的BroadPhase检测、精确的NarrowPhase计算,以及用户如何定义和控制碰撞规则,如碰撞分组和自定义碰撞策略。
最低0.47元/天 解锁文章
8620

被折叠的 条评论
为什么被折叠?



