内容很多摘自
Aman JIANG(江超宇)翻译的Box2D v2.0.1 用户手册
实现 b2DebugDraw 可得到物理世界的细部图,这里是可用的实体:
• 形状轮廓
• 关节连通性
• 核心形状(用于连续碰撞)
• broad-phase的AABB,包括世界的AABB
• polygon oriented bounding boxes (OBBs)
• broad-phase pairs (potential contacts)
• 质心
这是绘制这些物理实体的首先方法,比直接访问数据要好。因为很多的必要信息只能在内部访问并时有变更。
testbed使用debug drawing和接触监听器来绘制物理实体。它本身就是个好例子,演示了怎样去实现debug drawing以及怎样会绘制接触点。
Box2D使用了一些数值近似来让模拟更高效。这就带来一些限制。
这是当前的限制:
1. 将重的物体放到相对很轻的物体上面,会不稳定。当质量比到10:1时,稳定性就会降低。
2. Polygons may not slide smoothly over chains of edge shapes or other polygon shapes that are aligned. For this reason, tile-based environments may not have smooth collision with box-like characters.这个问题在将来会被修复。
3. 用关节将body链接起来,如果是较轻的body吊着较重的物体,body链接有可能被拉伸。比如,一条很轻的锁链吊着个很重的球,就可能不稳定。当质量比超过10:1时,稳定性就会降低。
4. 通常还有约0.5cm的间隙,就检测到形状与形状碰撞。
5. 连续碰撞是按顺序处理的。在发生撞击事件时,body会向后移动,并在剩余的时间步内停留在那里。这可能会使得快速移动的物体,移动起来不太平滑。
Erin Catto 的 GDC 教程: http://code.google.com/p/box2d/downloads/list
3D交互环境下的碰撞检测(Collision Detection in Interactive 3D Environments), Gino van den Bergen, 2004
实时碰撞检测(Real-Time Collision Detection), Christer Ericson, 2005