你们好,本系列带读者踏上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