在Box2D中创建环形形状的最佳方法是什么(所谓环,我指的是一个内有空空间的动态圆,以便其他动态对象可以在其中容纳)。
谢谢你的小费。
发布于 2017-11-21 18:25:05
“最好的”当然是一个意见问题,但以下是我能想到的一些方法。请告诉我们(如在评论部分)你决定做什么。我会好奇的想知道!
静态环
如果环的形状只需要是静态的,那么构建出链条形状的环就是要走的路。如果戒指需要是动态的,这就是你所说的,然后继续读下去。
无内环摩擦动态环的/
如果你不关心物体与内环之间的摩擦或恢复,你可以用圆环的形状作为环的外径,用绳子接头来约束你想在环内的任何东西(只要接头的碰撞连接设置是假的),就可以建立物理模型。你只需要把关节的最大长度设置为一个小于圆圈半径的距离。这将允许环自然滚动(因为它的外部是一个圆),但不会给你摩擦或恢复效果的戒指与它的概念内部。
全模拟内环物理的动态环
如果环内的物体需要像其他具有摩擦和恢复力的表面一样与环相互作用,那么我建议的制作方法(除了改变Box2D代码本身)将是一堆多边形形状。这些都需要定位和大小,以使环和贴在一个单一的身体。
你必须做出决定,比如要制作多少个多边形,以及如何将它们结合在一起。越小,越多的多边形,当然越近,结果将估计一个圆环。假设你希望尽可能少的锯齿状的多边形重叠,你可能想要手动设置体重,以避免从重叠中的过度计算。
你的戒指将要求最小厚度(包括它的“皮肤”)至少2 * b2_polygonRadius。除此之外,这取决于您大小的一个多边形尺寸,以匹配的厚度,环,你想要的。
您可能需要自己编写一个函数来确定多边形的点,以便匹配相对于工作身体的位置、大小和角方向。我可以看到用三边多边形或四边多边形制作的戒指。使用四边多边形可以产生更多的对接问题(比使用三边多边形),除非你减少了内部点的间距(以匹配直径差),但是连续的四边多边形不需要像三角形多边形那样被翻转。
动态环的Box2D修改
如果您愿意/有兴趣更改Box2D代码,您可以:
考虑到我已经从Box2D导出了一个物理引擎/库,它支持使用链状形状的动态环形状(请参阅PlayRho),我有一些解决这个问题的经验;尽管是在Box2D之外。基于这一经验,如果您确实希望修改Box2D代码以解决问题,我相信从第一选择开始(选项1)至少是开始的方式。你最终会从给你的经验中获益,我认为如果你要做第二种选择,你无论如何都会需要的。
请注意,宽相位将需要一个矩形的组合(实际上是AABB),无论如何,对于环。因此,用多边形组合而成的环,虽然看起来比我能想到的其他方法记忆效率低,但在计算效率方面可能会胜出。YMMV测试将是唯一确定的方法。
或者也许.
可能有人已经为Box2D做了一个环形形状,并为它提供了来源,但是我所知道的唯一的形状扩展是胶囊形状。
https://stackoverflow.com/questions/47419079
复制相似问题