我想问一下果冻物理学(http://www.youtube.com/watch?v=I74rJFB_W1k),在那里我可以找到一些好的地方开始制作这样的东西?我想模拟汽车碰撞,我想要使用这种果冻物理,但我找不到很多关于它们的信息。我不想使用现有的物理引擎,我想写我自己的:)
答案 0 :(得分:4)
您在链接到的视频中看到的内容可以通过质量弹簧系统完成。但是,当您改变质量和弹簧的数量时,保持弹簧常数不变,您将得到各种各样的结果。简而言之,质量弹簧系统并不是连续物质的良好近似值。
通常,使用所谓的Finite Element Method(FEM)创建这些类型的动画。 FEM 确实收敛到连续体,这很好。虽然它确实需要比质量弹簧系统更多的技术诀窍,但它确实不是太糟糕。从continuum mechanics的研究中得出的基本思想可以这样说:
将对象的体积分成许多小块(元素),通常为tetrahedra。让我们将这些元素的整个集合称为网格。你实际上想要制作这个网格的两个副本。标记一个“rest”网格,另一个标记“world”网格。我会告诉你为什么接下来。
对于世界网格中的每个四面体,测量它相对于其相应的其余四面体的变形程度。它的变形程度称为“应变”。这通常通过首先测量所谓的变形梯度(通常表示为 F )来实现。 several good papers描述了如何执行此操作。一旦你有 F ,定义应变( e )的一种非常典型的方法是: e = 1/2( F ^ T * F ) - 我。这被称为格林的应变。旋转不变,非常方便。
使用您尝试模拟的材料的属性(明胶,橡胶,钢等),并使用您在上面步骤中测量的应变,得出每个的“stress” tetrahdron。
对于每个四面体,访问每个节点(顶点,角点,点(这些都意味着相同的东西))并平均三个三角形面的面积加权法向量(在其余形状中)节点。将四面体的应力乘以该平均向量,并且由于该四面体的应力,存在作用在该节点上的弹力。当然,每个节点都可能属于多个四面体,所以你希望能够总结这些力量。
Integrate!有很简单的方法可以做到这一点,也有很多方法。无论哪种方式,您都需要遍历世界网格中的每个节点,并将其力量除以其质量以确定其加速度。从这里开始的简单方法是:
这种方法称为explicit forward Euler integration。您必须使用非常小的 dt 值才能使其工作而不会爆炸,但它很容易实现,因此它很适合作为起点。
根据需要重复步骤2到步骤5.
我遗漏了很多细节和花哨的演员,但希望你能推断出我遗漏的很多东西。 Here is a link我第一次使用时所用的一些说明。该网页包含一些有用的伪代码,以及一些相关材料的链接。
http://sealab.cs.utah.edu/Courses/CS6967-F08/Project-2/
以下链接也非常有用:
http://sealab.cs.utah.edu/Courses/CS6967-F08/FE-notes.pdf
这是一个非常有趣的话题,祝你好运!如果你遇到困难,请给我发表评论。
答案 1 :(得分:1)
滚动果冻立方体视频是用Blender制作的,它使用Bullet physics engine进行软体模拟。子弹文档一般非常稀疏,软体动力学几乎不存在。你最好的选择是阅读源代码。
然后编写自己的版本;)
答案 2 :(得分:0)
Here是一个包含一些相当不错的教程的页面。您正在寻找的那个可能是(反向)运动学和 Mass& Spring模型部分。
提示:果冻可以看作3维cloth; - )
另外,试着看看弹簧压力软体模型的搜索结果 - 它们可能会让你朝着正确的方向前进: - )
答案 3 :(得分:0)
查看此人的页面Maciej Matyka,软体主题
答案 4 :(得分:0)
不幸的是,只有2d可能会开始JellyPhysics和JellyCar