你們好,本系列帶讀者踏上Web 3D編程之旅~javascript
本系列是實戰類型,從0開始帶領讀者寫出「良好架構、良好擴展性、優秀的性能、最小功能集合(MVP)」 的3D引擎。html
本系列的素材來自咱們的產品:Wonder-WebGL 3D引擎和編輯器 的整個開發過程。前端
本系列是我正在寫的書的預覽版。詳情請見:Wonder暫停開發,開始寫書java
本系列與個人「用函數式編程,從0開發3D引擎和編輯器」系列博文的區別:ios
本系列是它的重寫版git
本系列是實戰類型,而它是經驗總結類型github
本系列只寫引擎,而它既寫引擎又寫編輯器編程
爲何本系列只寫引擎?後端
由於大部分人更關心引擎瀏覽器
爲了加快寫做速度,省略須要較多篇幅的編輯器
1.徹底從0開始,強調實戰
2.保持精簡,只實現最小功能,重點強調架構、擴展、性能
3.徹底、完全地使用函數式編程
如今3D領域使用函數式編程的資料不多,主流仍是使用面向對象。 我之前也是用面向對象,不過自從我開始接觸函數式編程,就擁抱了它。 但願能經過本系列,向讀者展現函數式編程的魅力,擴展讀者的視野和思惟。
1.手把手教讀者如何從0開發3D引擎 2.學習函數式編程及其在3D領域的應用 3.學習3D編程中基礎的功能實現,如紋理、光照、模型等 4.學習引擎的設計和架構,如Data Oriented、多線程等
本系列從第三部分開始,會開始寫程序,開發引擎。建議讀者從這部分開始,不要按照文中給出的程序實現,本身再一行一行地重寫一遍。由於這樣效率低下,並且有可能會出錯(雖然「程序實現」試圖給出完整的代碼,但仍然有可能遺漏了一些細節。這會致使讀者若是本身照着寫的話,本身寫的程序可能會運行失敗),因此建議讀者閱讀每篇文章,理解程序的實現,而後在文末查看該文的完整項目代碼。
Reason是在Ocaml語言的基礎上修改而來,專門提供給前端開發者使用。
Reason是函數式編程語言,使用Bucklescript編譯器編譯成javascript語言。
在我看來,至少有兩大優勢: 1.編譯後的javascript優化得很是好,讓咱們可以高性能地使用函數式編程。 2.強類型和類型推導,讓咱們既不用向Typescript那樣定義不少類型(Reason會幫咱們推導類型),又能夠享受強類型約束的好處(編譯時能檢查更多的錯誤)。
咱們Wonder已經使用Reason兩年的時間了,全部產品,包括前端後端,都用Reason語言寫,很是好用。
Reason的相關評價詳見: 如何評價 reasonml ? -> Wonder的回答 如何評價 Facebook 推出的編程語言 Reason?
爲了引擎能跑在移動端,咱們選擇WebGL 1.0而不是WebGL 2.0。
函數式編程
使用「函數式反應式編程」(FRP)實現異步
多線程渲染
Data Oriented
契約檢查
基於job的可擴展的渲染管道
重點支持桌面端瀏覽器(引擎的多線程渲染等功能只能在桌面端開啓):
也可以支持移動端瀏覽器:
本系列分紅六個部分:
主要內容:
主要內容:
學習函數式編程
學習函數式反應式編程
學習Reason
主要內容:
編寫最小的3D程序
從中提煉引擎
改進引擎架構
主要內容:
增長基礎功能
加入Scene Graph
主要內容:
加入腳本組件
加入自定義材質
加入其它可能的擴展,如ui擴展等
主要內容:
經過引擎支持的擴展,加入實際應用須要的功能(如picking等)
實現幾個完整的3D應用
若是讀者想全面瞭解Web 3D的相關學習資料,推薦閱讀分享收集的Web 3D學習資源:
本文中分享了我收集的Web 3D相關的博客、書籍、教程、demo等內容
若是讀者想要學習「敏捷開發+領域模型驅動+2D遊戲開發」,推薦閱讀炸彈人遊戲開發系列:
本系列博文記錄了炸彈人遊戲迭代開發的過程。在開發的過程當中,代碼會不斷重構,領域模型會不斷演變,高層劃分也會不斷變化。
若是讀者想要學習「開發2D引擎」,推薦閱讀提煉遊戲引擎系列:
本系列記錄了從炸彈人遊戲中提煉2D遊戲引擎YEngine2D雛形的實戰過程,您能夠經過本系列了解到引擎提煉的思想、引擎的設計以及引擎是如何從遊戲中提煉的,學習引擎開發的知識。但願對您能有所幫助!
若是讀者想要學習「面向對象設計+前端架構」,推薦閱讀前端的架構設計與演化實例:
本文介紹我在實際的前端項目中的架構設計,展現由於需求變化而致使架構變化的過程。 全文分爲三個階段,分別對應三次需求的變化,給出了對應的架構設計。 在第一個階段中,我使用面向過程設計;在第二個階段和在第三個階段中,我使用面向對象設計。
Wonder-WebGL 3D引擎和編輯器 「用函數式編程,從0開發3D引擎和編輯器」系列博文
原文出處:https://www.cnblogs.com/chaogex/p/12133853.html