用函數式編程,從0開發3D引擎和編輯器(一)

介紹

你們好,歡迎你踏上3D編程之旅~html

本系列的素材來自咱們的產品:Wonder-WebGL 3D引擎和編輯器 的整個開發過程,探討了在從0開始構建3D引擎和編輯器的過程當中,每個重要的功能點、設計方案的思考、討論、總結和延伸。git

本系列避免陷入細節的實現代碼,使用僞代碼代替。因此沒有可直接運行的代碼,取而代之的是通過抽象和提煉的僞代碼/模式。github

爲何要寫這個系列

我有三個小目標:
1.徹底創造
徹底從0開始,創造一個有深度、有難度、有挑戰的產品。
因此Wonder被創造出來了,而且會持續地發展。編程

2.徹底紀錄
徹底紀錄創造的過程,把我整我的生都沉澱下來。
因此有了打造3D引擎,第8000小時開始api

3.徹底分享
徹底分享全部的創造、紀錄,把我走過的路分享給須要的人。
因此有了Wonder開源多線程

本系列爲了完成第2個和第3個目標,會把開發Wonder的思考沉澱下來,進行提煉和昇華,分享給世界,也分享給我本身。架構

但願對你有所幫助~框架

技術棧

  • 使用Reason語言寫僞代碼編輯器

  • 使用WebGL做爲底層api函數式編程

本系列特點

1.徹底從0開始,素材來自咱們的產品Wonder

咱們會一邊開發Wonder,一邊在本系列寫文章分享。
由於Wonder在不斷更新中,因此本系列也會不斷更新。

2.徹底、完全地使用函數式編程。

如今3D領域使用函數式編程的資料不多,主流仍是使用面向對象。
我之前也是用面向對象,不過自從我開始接觸函數式編程,就擁抱了它。
面向對象很好,函數式編程也很好。使用哪個,是每一個人的自由。

本系列但願能擴展你們的視野和思惟,展現函數式編程的魅力。

3.不只探討3D引擎,並且以編輯器做爲主線。

討論編輯器的資料不多,討論3D引擎+編輯器的更少。

本系列徹底基於咱們的實戰經驗,以編輯器做爲主線,3D引擎做爲底層實現。

二者的關係以下圖:

編輯器引擎關係2.png-6.7kB

4.重點放在設計和思考上,避免實現細節

本系列但願展現來自於實戰的思考和設計,在較高的層面進行探討,因此會用僞代碼做爲實現的說明,避免細節的干擾。

5.類型驅動設計。儘可能用Type和僞代碼替代UML來探討設計。

Curry-Howard 同構:

類型即命題,程序即證實

類型既然對應邏輯命題,那能用它來表示設計嗎?
具體就是:
1)能表達領域模型嗎?

2)能表達領域模型的交互關係嗎?

3)能替代單元測試?

使用類型進行約束,而後在編譯時檢查和發現錯誤,從而再也不須要單元測試。

4)能驅動設計嗎?

這樣就能快速驗證設計方案:
經過定義類型來描述需求和設計,不須要具體實現;
驗證經過後,再一一實現。

本系列使用Reason語言,大部分知足1和2,部分知足3和4。

這是由於Reason語言的類型沒有Idris強大,因此3和4不能徹底知足。。。。。。

或許之後可使用Idris來重寫。。。。。。

不過總的來講,我對Reason語言仍是很是滿意的,詳見咱們在知乎上的總結-如何評價 reasonml ?

  • 參考資料

程序與證實
Designing with types

能給你帶來什麼收益?

1.瞭解Wonder的技術內幕

2.學習從0開發3D引擎和編輯器

3.學習函數式編程及其在3D領域的應用

4.學習3D編程的功能實現,如紋理、光照、模型等功能的實現

5.學習設計和架構,如Data Oriented、多線程、管道job等設計

寫做規劃

Wonder目前開發到1.0版本,所以本系列對應Wonder 0.1 - 1.0版本的內容。
(隨着Wonder不斷更新新版本,本系列也會對應更新)

Wonder 1.0產品展現:

editor_show.gif-1353.8kB

本系列目錄

  • 序言
  • 函數式編程準備
  • 初步需求分析
  • 初步設計
  • 搭建基礎框架
  • 操做GameObject
  • 操做Component
  • Redo/Undo
  • 端對端測試
  • 輸出
  • 多線程渲染
  • 運行/中止
  • 事件和CameraContronller組件
  • IMGUI
  • 增長資產Asset
  • 導入/導出
  • 發佈本地包
  • 快捷鍵
  • Picking
  • Transform Gizmo
  • PWA

致謝

感謝你能讀到這裏,歡迎你提出各類建議或意見,爲你服務是個人榮幸~感謝~

參考資料

Wonder-WebGL 3D引擎和編輯器
Curry-Howard 同構
程序與證實
Designing with types
Reason語言

歡迎瀏覽下一篇博文:用函數式編程,從0開發3D引擎和編輯器(二):函數式編程準備

相關文章
相關標籤/搜索