8年,從2D到3D,我的學習之路


Mickey 寫了一篇 《一個本科畢業生創業兩年的感悟》,從他的視角,總結了我們合作的兩年經歷。

我也來寫一篇,介紹我的學習之路,希望對大家有所幫助,謝謝大家~

我的學習方法

1.直接從0開始做項目,邊做邊學習,在做的過程中不斷思考和反思當前的設計和實現,不斷地修正,不斷地迭代。
2.做完一個項目后,沉淀和升華:
a)根據做項目中遇到的問題,針對性地看一些經典書籍和學習資料
b)寫一些文章,分享自己的學習經歷和技術心得

我的學習經歷

我從開始學編程到現在,一直都在前端領域學習。先后經歷了開發網站->開發2D游戲和引擎->開發前端富應用->開發3D引擎和編輯器。

第一年從0開始,做一個行業平台的網站

非常感謝老師對我的信任,讓我能在第一個項目就負責開發一個比較大規模的完整網站~

整個項目歷時8個月,前端、后端、數據庫我都要開發。

通過該項目,我學習了測試驅動的思想(后端和邏輯層寫了很多測試)、分層架構、MVC、重構、領域驅動的思想,學習了前端、后端、數據庫的技術。

從0開始,做Html5小游戲

再次感謝老師的支持,讓我能夠自由地研究自己感興趣的內容。

做完網站后,我先后開發了 貪吃蛇->連連看->炸彈人 這三個Html5游戲,中間又做了幾個小網站。 其中,我完全使用測試驅動來開發炸彈人游戲。

詳見:
發布我制作的jQuery貪吃蛇游戲
連連看
炸彈人游戲開發系列

通過做游戲,我學習並應用了面向對象的思想和設計模式,學習了2D游戲中的基本概念和領域模型。

從炸彈人游戲中提煉2D引擎

從做的游戲中,我看到了一些通用模式,促使我開始提煉游戲引擎。

詳見:
提煉游戲引擎系列
發布HTML5 2D游戲引擎YEngine2D

開發一個相對復雜的2D游戲,作為我的畢業設計

在拿到工作Offer后,我就開始畢業設計:使用提煉的2D引擎,開發一個即時戰略的2D游戲。我還開發了對應的編輯器,用來編輯地圖和關卡。

詳見:
發布HTML5 RTS游戲-古代戰爭

分享我在讀書階段收集的經典書

我在上學的時候,通過邊做項目邊學習,看了一些書。

此處分享我看了哪些書、看了幾遍、有什么心得,詳見:2011-2014年收集的經典書和心得

WebGL、3D引擎等方面可以參考:
分享收集的WebGL 3D學習資源
分享我收集的引擎、圖形學、WebGL方面的電子資料

開發最后一個2D游戲

我用提煉的引擎寫了個demo。

詳見:
動作類游戲demo

開發釘釘

在工作上,我有幸加入了釘釘的前端開發團隊,參與桌面版釘釘的開發。

我學習了Angular,開發了搜索、群組、快捷鍵等功能。

通過參與該項目,我學習了一個真正的商業項目是怎樣開發的,也學習了前端的更多技術,感謝項目老大~

開始學習3D

此時我看到了Babylonjs的3D demo,非常震撼。我已經迫不及待地想要學習3D技術了!我加入了北京的一個創業公司,開始接觸WebGL技術。

感謝該公司,技術上對我有很多啟發~比如我第一次看到了類似於Unity的組件化架構的引擎,而我之前一直參考Cocos 2D,用的是繼承架構。我也學習了使用渲染命令隊列來解藕邏輯和渲染的設計思想。

我是如何開始學習WebGL的呢?
1.我找到了《WebGL編程指南》這本書,把大部分demo實現了一遍;
2.再次第二遍實現demo,提煉3D引擎的雛形;
3.用提煉的引擎實現了一個“自由瀏覽場景”的demo。

開發引擎

通過學習3D,我感受到了3D引擎的巨大魅力,我決定自己開發一個3D引擎!

辭職,回家,從0開始,開發3D引擎

我學習了函數式反應編程的思想,模仿Rxjs,寫了個Wonder-FRP庫,這就花了我1個月的時間,為我以后學習函數式編程埋下了伏筆。

我出於學習的目的,盡可能地加入更多的功能(模型,動畫,地形,水,陰影。。。。。。),並沒有考慮給別人使用。

雖然引擎是全覆蓋的單元測試用例,並且我注重代碼質量,但是性能方面沒有過多地優化,也沒有外部的使用反饋。所以引擎屬於自己玩的玩具。

短暫的工作

開發了一年后,我認為需要到外界獲取一些反饋和交流,所以我參加了工作,並在工作中收集相關反饋,繼續改進引擎。

我用引擎做了一些demo,並開始應用到手機端。

同事反饋:引擎太笨重,應該更加地模塊化。感謝同事對引擎的改進建議,讓我看到了引擎很多的不足。

再次出發

辭職,回家,我決定重寫引擎。

此時我開始學習函數式編程的思想,這再次刷新了我的認知。因此我從面向對象切換到函數式編程,開始重寫設計引擎,立足於真正的商業應用,能夠支持大型場景:
1.使用js庫,進行函數式編程
2.支持多線程
3.支持WebGL2
4.支持延遲渲染

與Mickey合作,一起開發Wonder產品

隨着Mickey的加入,我們開始真正的創業:開發引擎和編輯器,打造Wonder,建立Web 3D生態。
我繼續開發引擎,Mickey開發編輯器。

再次重寫

開發一段時間后,我認為js庫進行函數式編程非常不方便,代碼不好看,而且性能也不好。

我關注到Reason的發展,認為Reason已經足夠成熟,可以使用了。

於是我們引擎和編輯器完全重寫,從Typescript切換到Reason,使用Data Oriented設計,開始真正的函數式編程。

Wonder發布1.0

從重寫到發布,《一個本科畢業生創業兩年的感悟》已經很好地總結了這段時間的經歷。

終於,Wonder 1.0正式版發布,完成了我們創業的第一步,交付了第一個可以真正使用的產品。

從學習3D,到發布1.0產品,經歷了4年。

我們的引擎和編輯器開源,詳見:
Wonder.js引擎
Wonder-Editor編輯器

未來。。。。。。

我們會繼續開發Wonder 2.0版本,打造和完善Web 3D生態,為大家帶來更多的便利和服務。

詳見路線圖

我為什么一直走這條路?

因為興趣,就會自發地想去學習,每天都有興奮感。解決一個個問題后,也很有成就感。

我也看好Web 3D的潛力,這是一個有技術門檻,需要長期鑽研,厚積薄發的領域,很適合我。

感謝互聯網的便利,所有相關的知識都可以在網上搜索到。所以現在是最好的時代,能走到哪里全憑自己驅動。

我要走向何方?

我們做的Wonder產品-3D引擎和編輯器,技術上很有挑戰,永無止境,這不就是對我最好的禮物嗎?

我會持續地學習3D開發,把Wonder打造成世界上成熟的產品,讓Web 3D開發變得輕而易舉,為世界作出貢獻。

致謝

感謝您能閱讀到這里,每天都是最好的一天!

最后附上Wonder編輯器


免責聲明!

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



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