Box2D建模灵活的头发状物体

时间:2011-06-16 11:30:51

标签: box2d

我正在寻找一些瘦身和模型。 Box2D中有弹性线/毛/刺/线,我想知道最好的方法是什么。我用谷歌搜索并看到了一些叫做线段(http://www.box2d.org/forum/viewtopic.php?f=8&t=1437)的东西,但它似乎只是Flash端口的扩展 - 我希望以平台无关的方式做到这一点。

我猜我将不得不用薄盒链做到这一点,但有没有人有任何建议或注意事项?

更新:由于下面的反馈,目前的选项是:

  • 通过跟踪角度和设置电机速度来制作弹性旋转关节 - 在Box2D论坛上有一个线程: http://www.box2d.org/forum/viewtopic.php?f=3&t=1007
  • 在段之间连接弹性距离接头(参见图表 - 类似于人们接近软体的方式)。

    Distance joint example

  • Drop Box 2D并使用verlet / particle系统,如果必须进行最小的碰撞(不幸的是我不可能)。

3 个答案:

答案 0 :(得分:4)

这取决于他们需要多少物理世界,以及你想要与“头发”的所有部分碰撞的准确程度。如果碰撞不是最重要的,您可以使用链中减少的箱数进行近似,并根据其位置的样条进行渲染。如果涉及非常小的碰撞,你甚至可以使用verlet集成,这非常容易编码并且在CPU上更轻。

虽然只有10个,但我希望你可以用旋转关节完全模拟它们,虽然不是限制我会控制它们,以便他们不断尝试拉直链条,但调整每个关节的最大扭矩,以便他们不要有足够的力量完全伸直。如果你走这条路,要记住的一点是它有助于使基部附近的部分更重,并且朝向末端逐渐变浅。电机强度也需要在尖端较弱。

答案 1 :(得分:2)

你们提出了关于表现的好点。

尝试模拟每条线将非常昂贵。 您可以做的是模拟在表面上均匀分布的少量股线。 然后使用这些股线作为参考来绘制中间股线。

投入一些随机性可以产生很好的效果。

我写了一篇关于模拟相关树干的文章,可能对某些人有用:http://aaronfarr.com/coding/simulating-a-tree-in-box2dweb/

更新:我使用这个想法汇总了草模拟的演示:http://aaronfarr.com/coding/simulating-grass-using-box2d/

Example of simulated grass in Box2D

答案 2 :(得分:1)

哇......可以想象你可以使用许多旋转关节,并在其运动(旋转)上设置限制,但我认为你的CPU和内存使用会迅速失控。其他人可能有更好的答案,但您可能希望使用少数预呈现/预生成对象。你也可以用粒子系统做到这一点。它不会在物理模拟中渲染出来,但如果你想要的那样它看起来很酷。

可能我最好的建议是结合使用这些东西。如果我觉得我真的必须这样做并且必须至少在物理模拟中完成它,我会结合使用旋转关节和粒子。我会根据物体的移动方式绘制不同的粒子文件。

对不起,我不能给你具体的例子,因为我从来没有必要做这样的事情。