在 Box2D 中创建环形的最佳方法是什么(我所说的环形是指内部有空白空间的动态圆,以便其他动态对象可以放入其中)。
谢谢你的提示。
“最好”当然是见仁见智,但这里有一些我能想到的方法。请告诉我们(如在评论部分)您决定使用什么。我会很想知道的!
静环用
如果环的形状只需要是静态的,那么从链形中构建环是可行的方法。但是,如果环需要是动态的,这就是您所说的,请继续阅读。
用于无内圈摩擦/恢复的动态环
如果您不关心物体对内环的摩擦或恢复,您可以通过使用圆形作为环的外径并使用绳索接头来约束环内您想要的任何东西(所以更长,因为关节的碰撞连接设置为假)。您只需将关节的最大长度设置为小于圆半径的距离。这将允许环自然滚动(因为它的外部是一个圆圈),但不会给你在环内与它的概念内部产生摩擦或恢复效果。
对于具有完全模拟的内环物理的动态环
如果环内的对象需要能够像任何其他具有摩擦和恢复力的表面一样与环交互,那么我建议的制作方式(不更改 Box2D 代码本身)将是一堆多边形形状。这些都需要定位和调整尺寸以制作戒指并固定在一个单一的身体上。
您必须做出决定,例如制作环的多边形数量以及如何将它们对接在一起。多边形越小,数量越多,结果当然越接近圆环。假设您希望多边形重叠的锯齿尽可能少,您可能需要手动设置体重以避免重叠的过度计算。
您的戒指需要的最小厚度(包括其“表皮”)至少为2 * b2_polygonRadius
. 除此之外,由您决定多边形尺寸之一以匹配您想要的戒指的厚度。
您可能希望自己编写一个函数,该函数确定您需要匹配位置大小和相对于工作主体的角度方向所需的多边形点。我可以看到用 3 面多边形或 4 面多边形制作环。使用 4 面多边形可能会产生更多对接问题(比使用 3 面多边形),除非您将内部点间隔得更小(以匹配直径差异),但是连续的 4 面多边形不需要像 for三角形的。
通过修改 Box2D 获得动态环
如果您愿意/有兴趣更改 Box2D 代码,您可以:
鉴于我已经从 Box2D 派生了一个物理引擎/库,它支持使用链形的动态环形(参见PlayRho),我有一些解决这个问题的经验;尽管在 Box2D 之外。根据这一经验,如果您确实想修改 Box2D 代码来解决问题,我相信从第一个选择(选项 #1)开始至少是开始的方式。你最终会从经验中受益,如果你要做第二种选择,我认为无论如何你都需要这些经验。
请注意,宽相无论如何都需要矩形的组合(实际上是 AABB)。因此,用多边形组合制作环虽然看起来内存效率低于我能想到的其他方法,但在计算效率方面可能会胜出。YMMV。测试将是唯一确定的方法。
或者可能...
可能有人已经为 Box2D 制作了一个环形并为其提供了资源,但我知道的唯一形状扩展是胶囊形状。