Skip to content

boycottpeter/titmouse2d

 
 

Repository files navigation

titmouse是一个2d离线物理引擎(个人玩具),由于程序性能受限,所有算例都是在低分辨率下解算。titmouse2d的目标是实现各种模拟算法的2d版本。 (这个引擎算是被我写废了。随着用它实现的算法越来越多,暴露出太多问题。经常牵一发而动全身,改得乱七八糟。今年计划重写一下子。)

  • C++ 11
  • 基本的向量操作
  • 基本的数组结构
  • 基本的稠密矩阵结构
  • CSR稀疏矩阵结构
  • Iterative Solve Linea System:
    • Steepest Descent method
    • ConjugateGradient method
    • Jaocobi method
    • Gauss-Seidel method
    • Relaxation jacobi
    • Successive over relaxation
    • Jacobi PCG
    • ICCG
  • 基于网格的粒子邻近搜索结构
  • 2D情况下任意几何形状的碰撞检测与处理
  • BVH加速结构
  • 显式/隐式曲面转换
  • 常用几何形状的sdf计算
  • 有限差分计算用到的均匀网格结构
  • MarchingSquare algorthm
  • Framework or Api(使用的框架或接口):
    • OpenGL/GLUT/GLAD/GLFW
    • OpenMP

实现的流体算法:

  • APIC/FLIP/PIC + 压力泊松方程求解自由表面流
  • Euleian LevelSet free surface flow (纯欧拉视角下的levelset自由表面流体模拟)
  • SPH algorthm (光滑粒子动力学算法)(SPH的参数我也是醉了,凑合着玩玩吧)
  • Vortex Method(涡粒子法模拟流体)
  • LBM(格子-玻尔兹曼方法)
  • MPM
  • PBF
  • IISPH(隐式不可压缩SPH)
  • Eulerian Smoke
  • Shallow Wave Solver

实现的弹性体/刚体算法:

  • Constraint Dynamics (Mass-spring system)
  • 单个刚体动力学
  • 线性有限元

效果图

  • 1.FLIP算法(没有在网格上对边界条件进行处理,因此边界处速度有散度)

  • 2.advection测试

  • 3.level set free surface flow

  • 4.Marching cube2d

  • 5.SSPH

  • 6.PIC

  • 7.Vortex Particles Method

  • 8.LBM(湍流模型模拟顶盖流动)

  • 9.PBF(参数和SPH一样恶心。。。)

  • 10.IISPH

  • 11.APIC

  • 12.MLS-MPM(用了双线性插值,粘成这个样子,中间还有一块蜜汁突起,也可能是代码写错了)

  • 13.Eulerian Smoke(双线性插值,midpoint,边界还有点bug没解决,还没有加vorticity force)

  • 14.kama vortex

  • 15.shallow wave solver

  • 16.Constrained Dynamics(这玩意弹簧系数调大了是可以做刚体的,为什么会碎呢,是因为我的约束条件的问题,超过一定距离就把约束撤掉了)

  • 17.RigidBody(单个刚体的模拟,多个刚体之间碰撞尚未实现)

  • 18.Linear FEM(线性有限元)

即将实现的算法或数据结构:

  • PCISPH
  • Clebsch gauge fluid solver
  • Multigrid Method
  • FVM(有限体积法)
  • TreeCode多体问题加速
  • FMM(快速多极展开)
  • 更适合物理模拟的稀疏矩阵结构
  • PBD
  • PD

About

2d物理引擎

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages

  • C++ 84.4%
  • C 15.1%
  • Other 0.5%