制作簡單的2D物理引擎(零)


最近發現了Github上的開源物理引擎項目Matter.js,對它很感興趣,發現源碼並不算長,算上注釋大約1萬行左右,值得剖析一番。Matter.js實現一個最小化的2D物理引擎,性能不錯,故打算用C#重寫並學習之。

由於JS是弱類型,而C#是強類型的,所以不得不還原相應的類型。在重寫過程中,我也發現了源碼中的一些問題,以及代碼冗余,不過都無關緊要。在一萬行之內實現一個簡單的物理引擎本來就很令人激動了,這樣可以以最小的工作量來熟悉物理引擎。

重寫過程中,渲染用自帶GDI實現,所以只需考慮物理引擎中的代碼邏輯即可。因需要最簡化代碼,故有些內容如Sleep等就略過了,只考慮核心部分,即力的仿真和碰撞檢測。

最終,我們的物理引擎有下列幾個部分:

  • 幾何體樹
  • 物理學意義上的基本對象(如點、點集、邊界等)
  • 簡單的碰撞檢測(寬、窄)
  • 位置修正
  • 速度修正

代碼在Github上:https://github.com/bajdcc/PhysicsEngine

不過,在這之前,需要好好復習一下牛頓力學,包括平動和轉動。

本章為目錄,將不斷更新。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM