上几节,我们推导出一大推复杂无比的公式,似乎有点纸上谈兵,这节来点真的,写一个可以运行的SPH系统,下面就是SPH基本的运算流程
- 初始化粒子,为每个粒子赋上初始位置
- 根据公式3.7计算每个粒子的密度
- 根据公式3.10计算每个粒子的压强
- 根据公式3.18计算每个粒子的加速度
- 根据临界条件调整加速度
- 根据加速度计算每个粒子的速度变化
- 根据速度计算粒子位置的变化
- 绘制粒子
- 回到步骤2
下面有个简单的示例程序,运行效果如下
这个程序基本上没有怎么考虑效率,只是让系统跑起来,所以比较适合拿来对照公式学习,按照惯例,放出源代码和可执行程序
源码下载:fluid_source.zip(395KB)
可执行程序下载: fluid.zip(120KB)
SPH还有很多细节值得讨论,比如表面张力、并行计算、构建网格、真实材质的水渲染等,这些部分我会抽时间再写一些东西出来介绍。
1, 很赞噢继续关注!!!!!!!
希望写更多关于sph的文章!!!!!!!!!1
写的很好 新手受教了
写的很好 继续关注
很希望博主能对这个源码的工程结构做一个简单的介绍~
我看源码中对粒子计算化简,把世界划分成小方格,每个小方格用链表储存在这个方格内的粒子下标,但是每次迭代后,并未对方格链表进行更新,这样应该是有问题的吧,我想请教一下为什么没有更新,是疏忽还是只是示例就没有写了,谢谢
每一帧tick时,执行的m_gridContainer.insertParticles(&m_pointBuffer);
就是做这件事的
博主你好,按照你的教程,我用cocos2d引擎也实现这个效果,但是我想知道真实材质的水渲染应该怎么去做呢?期待指点,谢谢!
好希望博主把后面的mc算法也实现了
请问粒子间collision需要计算吗
博主你太厉害了!
请问楼主有没有二维的或者三维的计算近水面水下爆炸的算例程序,看过哈尔滨工程大学做过很多这方面的工作,我是做水下射流的,用的也是SPH方法,很想根据他们的程序改编成自己课题,如果楼主能提供帮助,真是太感谢类
博主你好,我在您的代码基础上添加代码用以模拟刚体受力时,发现一改libsph部分的代码就出现 连接错误 libsph.lib打不开 ,进一步发现这个 libsph.lib文件 VS不生成了。
我是VS2015。
想向您请教下,多谢了!!!
“链接错误” 打错了
你可以试一下github上的这份代码
https://github.com/thejinchao/fluid
这是我后来用cmake做的工程,DirectX用的也DX11接口
谢谢博主的文章,很适合入门,在这之后再去看经典论文就不会那么生涩了。
你好博主,有一篇《SPH算法在unity3D的编程实现》作者张凌空,2017发表的论文不知道是你本人吗,因为我看到理论图片和结果图都和你的一样,你可以关注下。
显然不是我,不过无所谓了,多谢提醒
那篇论文level太低了
老师您好,我今年刚开始学习SPH,已经利用IVF编译器转化为可执行程序,但不知道怎么进行可视化处理,能否请教一下老师啊。如果老师有空的话加一下QQ吧:289261151
你好,我是初学者,请问你解决可视化问题了嘛!
不知道楼主在做程序的时候,粒子运动的边界是怎么定义的呢?是设置出一系列位置固定不动的粒子嘛?
请问你也是在做SPH吗?可以交流一下吗
为什么我运行不出来呀,显示无法打开包括文件“dxsdkver.h”