用函数式编程,从0开发3D引擎和编辑器(一)

介绍

你们好,欢迎你踏上3D编程之旅~html

本系列的素材来自咱们的产品:Wonder-WebGL 3D引擎和编辑器 的整个开发过程,探讨了在从0开始构建3D引擎和编辑器的过程当中,每个重要的功能点、设计方案的思考、讨论、总结和延伸。git

本系列避免陷入细节的实现代码,使用伪代码代替。因此没有可直接运行的代码,取而代之的是通过抽象和提炼的伪代码/模式。github

为何要写这个系列

我有三个小目标:
1.彻底创造
彻底从0开始,创造一个有深度、有难度、有挑战的产品。
因此Wonder被创造出来了,而且会持续地发展。编程

2.彻底纪录
彻底纪录创造的过程,把我整我的生都沉淀下来。
因此有了打造3D引擎,第8000小时开始api

3.彻底分享
彻底分享全部的创造、纪录,把我走过的路分享给须要的人。
因此有了Wonder开源多线程

本系列为了完成第2个和第3个目标,会把开发Wonder的思考沉淀下来,进行提炼和升华,分享给世界,也分享给我本身。架构

但愿对你有所帮助~框架

技术栈

  • 使用Reason语言写伪代码编辑器

  • 使用WebGL做为底层api函数式编程

本系列特点

1.彻底从0开始,素材来自咱们的产品Wonder

咱们会一边开发Wonder,一边在本系列写文章分享。
由于Wonder在不断更新中,因此本系列也会不断更新。

2.彻底、完全地使用函数式编程。

如今3D领域使用函数式编程的资料不多,主流仍是使用面向对象。
我之前也是用面向对象,不过自从我开始接触函数式编程,就拥抱了它。
面向对象很好,函数式编程也很好。使用哪个,是每一个人的自由。

本系列但愿能扩展你们的视野和思惟,展现函数式编程的魅力。

3.不只探讨3D引擎,并且以编辑器做为主线。

讨论编辑器的资料不多,讨论3D引擎+编辑器的更少。

本系列彻底基于咱们的实战经验,以编辑器做为主线,3D引擎做为底层实现。

二者的关系以下图:

编辑器引擎关系2.png-6.7kB

4.重点放在设计和思考上,避免实现细节

本系列但愿展现来自于实战的思考和设计,在较高的层面进行探讨,因此会用伪代码做为实现的说明,避免细节的干扰。

5.类型驱动设计。尽可能用Type和伪代码替代UML来探讨设计。

Curry-Howard 同构:

类型即命题,程序即证实

类型既然对应逻辑命题,那能用它来表示设计吗?
具体就是:
1)能表达领域模型吗?

2)能表达领域模型的交互关系吗?

3)能替代单元测试?

使用类型进行约束,而后在编译时检查和发现错误,从而再也不须要单元测试。

4)能驱动设计吗?

这样就能快速验证设计方案:
经过定义类型来描述需求和设计,不须要具体实现;
验证经过后,再一一实现。

本系列使用Reason语言,大部分知足1和2,部分知足3和4。

这是由于Reason语言的类型没有Idris强大,因此3和4不能彻底知足。。。。。。

或许之后可使用Idris来重写。。。。。。

不过总的来讲,我对Reason语言仍是很是满意的,详见咱们在知乎上的总结-如何评价 reasonml ?

  • 参考资料

程序与证实
Designing with types

能给你带来什么收益?

1.了解Wonder的技术内幕

2.学习从0开发3D引擎和编辑器

3.学习函数式编程及其在3D领域的应用

4.学习3D编程的功能实现,如纹理、光照、模型等功能的实现

5.学习设计和架构,如Data Oriented、多线程、管道job等设计

写做规划

Wonder目前开发到1.0版本,所以本系列对应Wonder 0.1 - 1.0版本的内容。
(随着Wonder不断更新新版本,本系列也会对应更新)

Wonder 1.0产品展现:

editor_show.gif-1353.8kB

本系列目录

  • 序言
  • 函数式编程准备
  • 初步需求分析
  • 初步设计
  • 搭建基础框架
  • 操做GameObject
  • 操做Component
  • Redo/Undo
  • 端对端测试
  • 输出
  • 多线程渲染
  • 运行/中止
  • 事件和CameraContronller组件
  • IMGUI
  • 增长资产Asset
  • 导入/导出
  • 发布本地包
  • 快捷键
  • Picking
  • Transform Gizmo
  • PWA

致谢

感谢你能读到这里,欢迎你提出各类建议或意见,为你服务是个人荣幸~感谢~

参考资料

Wonder-WebGL 3D引擎和编辑器
Curry-Howard 同构
程序与证实
Designing with types
Reason语言

欢迎浏览下一篇博文:用函数式编程,从0开发3D引擎和编辑器(二):函数式编程准备

相关文章
相关标签/搜索