8年,從2D到3D,個人學習之路

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

我也來寫一篇,介紹個人學習之路,但願對你們有所幫助,謝謝你們~前端

個人學習方法

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

個人學習經歷

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

第一年從0開始,作一個行業平臺的網站

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

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

經過該項目,我學習了測試驅動的思想(後端和邏輯層寫了不少測試)、分層架構、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編輯器

相關文章
相關標籤/搜索