4 game-physics bulletphysics physics-engine three.js
使用球形节点,圆柱形骨骼和锥形扭曲约束,我设法在3维中创建一个简单的骨架.我正在使用子弹物理库的分支(@chandlerprall的physijs,以及threejs).
现在我想补充肌肉.在过去的两天里,我一直试图获得某种滑动约束或通用6自由度约束,以使肌肉能够收缩并将两个节点拉向彼此.
我得到各种疯狂的结果,我开始认为我会以错误的方式解决这个问题.我不认为我可以简单地使用两个锥形扭曲约束,然后沿着其长度轴缩放肌肉,因为缩放碰撞网格显然相当昂贵.
我需要的只是一个"肌肉",它可以连接到两个节点并"收缩"以拉入其两个节点.
任何人都可以提供一些关于如何使用子弹引擎(或者真的,任何物理引擎)最好地解决这个问题的建议吗?
编辑:如果我不需要肌肉发生碰撞怎么办?说我只需要一个约束2个节点的视觉肌肉:
这两个节点线性约束到肌肉碰撞网格,它不是一个大的网格,只是一个小的,只有在那里保持视觉肌肉的几何形状,并提供一个轴约束节点.
然后,我可以使用滑动约束附带的线性马达沿轴移动节点.任何人都可以看到这个问题吗?我最初的问题是较小的碰撞网格有点不稳定,似乎在整个地方移动......
我对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来模拟物理学.