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