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