制作简单的2D物理引擎(零)
最近發(fā)現(xiàn)了Github上的開源物理引擎項(xiàng)目Matter.js,對(duì)它很感興趣,發(fā)現(xiàn)源碼并不算長(zhǎng),算上注釋大約1萬行左右,值得剖析一番。Matter.js實(shí)現(xiàn)一個(gè)最小化的2D物理引擎,性能不錯(cuò),故打算用C#重寫并學(xué)習(xí)之。
由于JS是弱類型,而C#是強(qiáng)類型的,所以不得不還原相應(yīng)的類型。在重寫過程中,我也發(fā)現(xiàn)了源碼中的一些問題,以及代碼冗余,不過都無關(guān)緊要。在一萬行之內(nèi)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的物理引擎本來就很令人激動(dòng)了,這樣可以以最小的工作量來熟悉物理引擎。
重寫過程中,渲染用自帶GDI實(shí)現(xiàn),所以只需考慮物理引擎中的代碼邏輯即可。因需要最簡(jiǎn)化代碼,故有些內(nèi)容如Sleep等就略過了,只考慮核心部分,即力的仿真和碰撞檢測(cè)。
最終,我們的物理引擎有下列幾個(gè)部分:
- 幾何體樹
- 物理學(xué)意義上的基本對(duì)象(如點(diǎn)、點(diǎn)集、邊界等)
- 簡(jiǎn)單的碰撞檢測(cè)(寬、窄)
- 位置修正
- 速度修正
代碼在Github上:https://github.com/bajdcc/PhysicsEngine
不過,在這之前,需要好好復(fù)習(xí)一下牛頓力學(xué),包括平動(dòng)和轉(zhuǎn)動(dòng)。
本章為目錄,將不斷更新。
- 第一章——?jiǎng)恿W(xué)基礎(chǔ)
轉(zhuǎn)載于:https://www.cnblogs.com/bajdcc/p/5925837.html
總結(jié)
以上是生活随笔為你收集整理的制作简单的2D物理引擎(零)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Gradient Boost Decis
- 下一篇: 51nod1179【思维】