你們好,歡迎你踏上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引擎做爲底層實現。
二者的關係以下圖:
4.重點放在設計和思考上,避免實現細節
本系列但願展現來自於實戰的思考和設計,在較高的層面進行探討,因此會用僞代碼做爲實現的說明,避免細節的干擾。
5.類型驅動設計。儘可能用Type和僞代碼替代UML來探討設計。
類型即命題,程序即證實
類型既然對應邏輯命題,那能用它來表示設計嗎?
具體就是:
1)能表達領域模型嗎?
2)能表達領域模型的交互關係嗎?
3)能替代單元測試?
使用類型進行約束,而後在編譯時檢查和發現錯誤,從而再也不須要單元測試。
4)能驅動設計嗎?
這樣就能快速驗證設計方案:
經過定義類型來描述需求和設計,不須要具體實現;
驗證經過後,再一一實現。
本系列使用Reason語言,大部分知足1和2,部分知足3和4。
這是由於Reason語言的類型沒有Idris強大,因此3和4不能徹底知足。。。。。。
或許之後可使用Idris來重寫。。。。。。
不過總的來講,我對Reason語言仍是很是滿意的,詳見咱們在知乎上的總結-如何評價 reasonml ?。
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產品展現:
感謝你能讀到這裏,歡迎你提出各類建議或意見,爲你服務是個人榮幸~感謝~
Wonder-WebGL 3D引擎和編輯器
Curry-Howard 同構
程序與證實
Designing with types
Reason語言
歡迎瀏覽下一篇博文:用函數式編程,從0開發3D引擎和編輯器(二):函數式編程準備