【发布时间】:2011-06-04 13:55:42
【问题描述】:
我想问一下果冻物理学 (http://www.youtube.com/watch?v=I74rJFB_W1k),我在哪里可以找到一些开始制作类似东西的好地方?我想模拟汽车碰撞,我想使用这种果冻物理,但我找不到很多关于它们的信息。我不想使用现有的物理引擎,我想自己写:)
【问题讨论】:
标签: simulation physics
我想问一下果冻物理学 (http://www.youtube.com/watch?v=I74rJFB_W1k),我在哪里可以找到一些开始制作类似东西的好地方?我想模拟汽车碰撞,我想使用这种果冻物理,但我找不到很多关于它们的信息。我不想使用现有的物理引擎,我想自己写:)
【问题讨论】:
标签: simulation physics
看这个人的页面Maciej Matyka,软体话题
【讨论】:
那个滚动的果冻立方体视频是用 Blender 制作的,它使用 Bullet physics engine 进行软体模拟。一般来说,子弹文档非常稀少,几乎不存在软体动力学。最好的办法是阅读源代码。
然后编写你自己的版本;)
【讨论】:
不幸的是,只有 2d,但可能是 JellyPhysics 和 JellyCar
【讨论】:
类似于您在链接到的视频中看到的东西可以通过质量弹簧系统完成。然而,当你改变质量和弹簧的数量,保持你的弹簧常数不变时,你会得到非常不同的结果。简而言之,质量-弹簧系统并不是物质连续体的良好近似。
通常,这些类型的动画是使用所谓的Finite Element Method (FEM) 创建的。 FEM 确实收敛到一个连续体,这很好。尽管它确实需要比质量弹簧系统更多的专业知识,但它确实还不错。基本思想,来源于对continuum mechanics的研究,可以这样说:
将对象的体积分成许多小块(元素),通常是tetrahedra。让我们将这些元素的整个集合称为网格。您实际上需要制作此网格的两个副本。将一个标记为“rest”网格,另一个标记为“world”网格。接下来我会告诉你为什么。
对于世界网格中的每个四面体,测量它相对于其对应的静止四面体的变形程度。它变形程度的量度称为“应变”。这通常通过首先测量所谓的变形梯度(通常表示为 F)来完成。有 several good papers 描述了如何做到这一点。一旦你有了 F,定义应变 (e) 的一种非常典型的方法是: e = 1/2(F^T * F) - I。这被称为格林应变。旋转不变,非常方便。
使用您尝试模拟的材料(明胶、橡胶、钢等)的属性,并使用您在上述步骤中测量的应变,推导出每个四面体的“stress”。
对于每个四面体,访问每个节点(顶点、角、点(这些都表示相同的意思))并平均三个共享该节点的三角形面的面积加权法向量(其余形状)节点。将四面体的应力乘以该平均矢量,由于该四面体的应力,弹性力作用在该节点上。当然,每个节点都可能属于多个四面体,因此您需要能够总结这些力。
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
这是一个非常有趣的话题,祝你好运!如果您遇到困难,请给我留言。
【讨论】: