模拟骨骼中肌肉的收缩

时间:2014-03-21 03:02:40

标签: three.js game-physics physics-engine bulletphysics

使用球形节点,圆柱形骨骼和锥形扭曲约束,我设法在3维中创建一个简单的骨架。我使用子弹物理库的分支(@chandlerprall的physijs,以及threejs)。

现在我想补充肌肉。在过去的两天里,我一直试图获得某种滑动约束或一般的6自由度约束,以使肌肉能够收缩并将两个节点拉向彼此。

我得到各种疯狂的结果,我开始认为我以错误的方式解决这个问题。我不认为我可以简单地使用两个锥形扭曲约束,然后沿着它的长度轴缩放肌肉,因为缩放碰撞网格显然相当昂贵。

我所需要的只是一个肌肉'它可以连接到两个节点并且可以“收缩”。拉入两个节点。

任何人都可以提供一些关于如何使用子弹引擎(或者真的,任何物理引擎)最好地解决这个问题的建议吗?

编辑:如果我不需要为肌肉发生碰撞怎么办?说我只需要一个约束2个节点的视觉肌肉: setup 这两个节点线性约束到肌肉碰撞网格,它不是一个大的网格,只是一个小的,只有在那里保持视觉肌肉的几何形状,并提供一个轴约束节点。

然后,我可以使用滑动约束附带的线性马达沿轴移动节点。任何人都可以看到这个问题吗?我最初的问题是较小的碰撞网格有点不稳定,似乎在整个地方移动......

1 个答案:

答案 0 :(得分:7)

我对Bullet没有任何经验。然而,有一个大型学术界通过将人类塑造为刚体系统来模拟人体运动。在这些模拟中,人类是由肌肉驱动的。

在这种模拟中使用的肌肉被建模以以生理方式产生力。肌肉在任何给定时刻产生的力量取决于其长度和长度变化的速率。这篇论文描述了生物力学家可能使用的相当复杂的肌肉模型:http://nmbl.stanford.edu/publications/pdf/Millard2013.pdf

生物力学模拟中出现的肌肉建模的另一个复杂因素是肌肉的路径必须能够缠绕关节(例如膝盖)。当你提到肌肉碰撞时,这就是你想要的。这被称为肌肉包裹。请参阅http://www.baylor.edu/content/services/document.php/41153.pdf

我是一个实验室的研究生,模拟涉及许多肌肉的人类。我们使用多体动力学库(物理引擎)Simbody(http://github.com/simbody/simbody),它允许人们定义沿路径行动的力元素。这些路径可以用非常复杂的方式定义:它们可以包裹许多不同的表面。为了模拟肌肉驱动的人体运动,我们使用OpenSim(http://opensim.stanford.edu),然后使用Simbody来模拟物理。