V7投稿 | Vert积分实现的简单绳子

最近在研究绳子,找到了一个效果还不错的绳子效果,先看效果~
move
绳子的碰撞未实现,这种绳子主要就是实现一些项目中的简单绳子的表现的~
可以看到绳子的模拟效果已经是有了。这种方式实现的绳子优缺点也很明显
1.优点是绳子的性能比较高
2.缺点是,模拟的比较简单并不能模拟真实的环境。
代码在这里~VertRope.zip (858.2 KB)
核心逻辑也比较简单
image
这张图就是实现绳子的关键了。我们将整个绳子离散为一系列的点,这些点这里我们叫做粒子(particles),每个粒子都通过vert积分算法模拟重力。且前后相邻的每两个粒子组成一个约束系统,这里我们就叫stick
每一个stick都由前后两个粒子组成,在实际的实现中,我们不需要考虑每个粒子对绳子的整体系统有何影响,只需要考虑每个stick中的两个粒子的相互关系即可
image
粒子和stick的类如上图所示
我们先来看下 vert积分公式
image

Verlet算法是经典力学(牛顿力学)中的一种最为普遍的积分方法
具体细节我们也不用管只需要知道。我们要计算 t(n+1)时刻的位置。主要知道tn时刻和t(n-1)时刻的位置
以及tn时刻的加速度a就能实现了
公式中并不需要用到速度。所以实现起来也比较简单了
image
重力模拟出来之后如果不对绳子进行约束,绳子肯定会无限下落。所以约束代码如下
image
这里的约束类似于胡克定律
image
在初始化stick时。当确定了两端的点时也就确定了原生长度,(也就是弹簧未经拉伸或者压缩的原生长度),在外力影响后,stick超过原始长度时要收缩,小于原始长度时要拉伸,也就是往stick两端的向量方向上移动。
当粒子间的移动模拟好之后。我们就只需要通过graphics绘制出来即可
image
结束语:
这个绳子的实现也只是vert积分的简单应用,还需要多多学习~希望这个绳子能帮到大家哈,技术需要分享才能不断变强!
参考文档
https://zhuanlan.zhihu.com/p/583197760

11赞

赞啊…

之前在研究我那个问题的时候,找到的一种解决方法,改改也能大致实现我那个效果 :rofl: :rofl: :rofl:

这个感觉 其实最后跟物理模拟出来的结果差不太多~~
我那个布料,也是有一种是用 这个实现

还得是算法啊

:rofl: :rofl: :rofl:学无止境啊~~

能做到你发的求助帖里的绳子效果吗?试了试感觉达不到那个效果

比较麻烦 :rofl: :rofl: :rofl:他那个效果确实很花哨,
只能是在移动过程中,动态修改弹簧的长度系数,以及重力模拟~
最近做了个大概的效果就没管了。等过两天继续搞这个游戏的时候。继续研究 :rofl: :rofl:

mark!!!!!!!!!!!!!!