你们好,本系列带读者踏上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雏形的实战过程,您能够经过本系列了解到引擎提炼的思想、引擎的设计以及引擎是如何从游戏中提炼的,学习引擎开发的知识。但愿对您能有所帮助!
若是读者想要学习“面向对象设计+前端架构”,推荐阅读前端的架构设计与演化实例:
本文介绍我在实际的前端项目中的架构设计,展现由于需求变化而致使架构变化的过程。
全文分为三个阶段,分别对应三次需求的变化,给出了对应的架构设计。
在第一个阶段中,我使用面向过程设计;在第二个阶段和在第三个阶段中,我使用面向对象设计。