制作简单的2D物理引擎(零)

Posted 千里之行,始于足下。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了制作简单的2D物理引擎(零)相关的知识,希望对你有一定的参考价值。

最近发现了Github上的开源物理引擎项目Matter.js,对它很感兴趣,发现源码并不算长,算上注释大约1万行左右,值得剖析一番。Matter.js实现一个最小化的2D物理引擎,性能不错,故打算用C#重写并学习之。

由于JS是弱类型,而C#是强类型的,所以不得不还原相应的类型。在重写过程中,我也发现了源码中的一些问题,以及代码冗余,不过都无关紧要。在一万行之内实现一个简单的物理引擎本来就很令人激动了,这样可以以最小的工作量来熟悉物理引擎。

重写过程中,渲染用自带GDI实现,所以只需考虑物理引擎中的代码逻辑即可。因需要最简化代码,故有些内容如Sleep等就略过了,只考虑核心部分,即力的仿真和碰撞检测。

最终,我们的物理引擎有下列几个部分:

  • 几何体树
  • 物理学意义上的基本对象(如点、点集、边界等)
  • 简单的碰撞检测(宽、窄)
  • 位置修正
  • 速度修正

不过,在这之前,需要好好复习一下牛顿力学,包括平动和转动。

本章为目录,将不断更新。

以上是关于制作简单的2D物理引擎(零)的主要内容,如果未能解决你的问题,请参考以下文章

Godot 物理引擎 2D

在Android上使用libgdx-box2d物理引擎

Qt 5.10 集成 Box2D 物理引擎

Egret中使用P2物理引擎

关于Unity中物理引擎的使用

Bullet物理引擎简单说明