我想咨询一下果冻物理(http://www.youtube.com/watch?v=I74rJFB_W1k ),我该在哪里找到一个好的起点来制作类似的东西?我想模拟汽车碰撞,并使用这种果冻物理,但我找不到太多相关信息。我不想使用现有的物理引擎,我想编写自己的。
我想咨询一下果冻物理(http://www.youtube.com/watch?v=I74rJFB_W1k ),我该在哪里找到一个好的起点来制作类似的东西?我想模拟汽车碰撞,并使用这种果冻物理,但我找不到太多相关信息。我不想使用现有的物理引擎,我想编写自己的。
您在链接视频中看到的东西可以用质点弹簧系统实现。但是,如果您改变质点和弹簧的数量,同时保持弹簧常数不变,结果会大相径庭。简而言之,质点弹簧系统不能很好地近似物质的连续体。
通常,这些类型的动画使用所谓的有限元法(FEM)创建。 FEM 确实收敛于连续体,这很好。虽然它需要比质点弹簧系统更多的专业知识,但实际上并不太难。从连续介质力学的研究中得出的基本思想可以这样表达:
将对象的体积分成许多小块(元素),通常使用tetrahedra。我们称这些元素的整个集合为网格。您实际上需要制作两个此网格的副本。一个标记为“rest”网格,另一个标记为“world”网格。我会告诉你下一步的原因。
对于世界网格中的每个四面体,测量其相对于其相应的rest四面体的变形程度。它的变形程度的度量被称为“应变”。这通常是通过首先测量所谓的变形梯度(通常表示为F)来完成的。有几篇 好的 论文 描述了如何做到这一点。一旦您有了F,定义应变(e)的一种非常典型的方法是: e= 1/2(F^T * F) - I。这被称为Green应变。它对旋转不变,这使得它非常方便。
使用您尝试模拟的材料的属性(明胶、橡胶、钢等),并使用您在上一步中测量的应变,导出每个四面体的“应力”。
对于每个四面体,访问共享该节点的三个三角形面的面积加权法线向量(在rest状态下)。将四面体的应力乘以该平均向量,即为由于该四面体的应力而作用于该节点的弹性力。当然,每个节点可能属于多个四面体,因此您需要能够总结这些力。
整合!有易于实现和困难的方法。无论哪种方式,您都需要循环遍历世界网格中的每个节点,并将其力除以其质量以确定其加速度。从这里开始,简单的方法是:
此方法称为显式向前欧拉积分。您将不得不使用非常小的dt值才能使其正常工作,但它非常容易实现,因此作为起点效果很好。
重复步骤2到5,直到您想要结束。
我省略了很多细节和花哨的额外内容,但希望你能推断出我所省略的大部分。这里是一个链接,指向我第一次尝试这个操作时使用的一些说明。该网页包含一些有用的伪代码,以及一些相关材料的链接。
http://sealab.cs.utah.edu/Courses/CS6967-F08/Project-2/
以下链接也非常有用:http://sealab.cs.utah.edu/Courses/CS6967-F08/FE-notes.pdf
这是一个非常有趣的话题,我祝你好运!如果你遇到困难,只需在评论中留言。
然后编写自己的版本;)