# 写书计划

之前我写了[《用函数式编程，从0开发3D引擎和编辑器》系列中的前3篇文章](https://zhuanlan.zhihu.com/p/64398870)，主要从 **思维** 层面来讨论设计和开发过程。

不过我认为这样的效果并不好，因为大部分读者都没有自己动手写过3D引擎，对他们来说，**思维**层面的讨论太过空泛。

因此我决定，本书从 **实战** 层面来讨论，让读者能真正跟着本书，一步一步地写出3D引擎和编辑器，真正体验到其中的快乐和成就感。

### 暂定书名

《3D编程旅程-从0开发3D引擎和编辑器》

我准备在“3D编程”的主题上写一系列的书，该系列暂名为“3D编程旅程”。后续可能会有《3D编程旅程-应用》、《3D编程旅程-模式》、《3D编程旅程-测试》等书。

### 主题

本书使用函数式编程范式，从0开始，通过一行一行的代码，写出了 简易的、完全可运行的 3D引擎和编辑器。

### 在线预览和反馈

在线阅读地址：<https://yangyuanchao.gitbook.io/0-3d/>

读者反馈QQ群： 731632604

### 技术栈

* 使用[Reasonml](https://reasonml.github.io/docs/en/what-and-why)作为编程语言
* 使用[Reason-React](https://reasonml.github.io/reason-react/)作为编辑器ui
* 使用WebGL 1作为底层api

### 篇幅

本书保持精简，专注在实现最小功能上，因此使用较少的篇幅。

#### 规划

4个月完成初稿，6个月发布

总字数20w字以内

总页数400页以内

#### 策略

* 尽量多章节，每个章节内容尽可能独立和精简，减少读者负担

### 重点

* 设计

  3D编程比较复杂，要让各个部分统一协调地工作，还要尽量地提高性能、增强扩展性。

  本书会展示很多设计层面的思考，仔细地设计架构，不断地重构，提高代码质量。
* 实现

  本书旨在让读者以最小的成本，快速实现一个简易的3D引擎和编辑器。因此，本书不讨论 **测试**、**工程化** 等内容。

### 特色

1.完全从0开始，强调实战

2.保持精简，只实现核心功能

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

现在3D领域使用函数式编程的资料很少，主流还是使用面向对象。 我以前也是用面向对象，不过自从我开始接触函数式编程，就拥抱了它。 面向对象很好，函数式编程也很好。使用哪一个，是每个人的自由。

本系列希望能扩展大家的视野和思维，展示函数式编程的魅力。

4.不仅探讨3D引擎，而且以编辑器作为主线。

讨论编辑器的资料很少，讨论3D引擎+编辑器的更少。

本系列完全基于我们的实战经验，以编辑器作为主线，3D引擎作为底层实现。

5.类型驱动设计。 尽量用类型和伪代码来探讨设计。

### 能给你带来什么收益？

1.读者能够在本书指引下，从0开发自己的3D引擎和编辑器

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

3.学习3D编程中基础的功能实现，如纹理、光照、模型等

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

### 目标读者群

尽管本书使用的是WebGL这个Web 3D编程的API，但本书的设计和实现的思想是通用的，适合整个3D编程领域。

* 3D编程爱好者
* 函数式编程爱好者
* Web 3D开发工程师
* 3D引擎开发工程师
* 3D编辑器及工具开发工程师

### 章节安排

#### 第一部分：基础准备

* 函数式编程思想
* Reason语言基础语法
* WebGL基础
* 开发环境准备

#### 第二部分：实现Demo

* 快速写一个最小Demo
* 提出3D引擎
* 提出编辑器
* 优化

#### 第三部分：提出基本架构

* 提出基本架构
* 改进引擎架构，支持多种应用场景
* 改进引擎，支持多线程
* 重构：提出微服务

#### 第四部分：增加功能

* 编辑器增加Redo/Undo功能
* 编辑器增加场景管理功能
* 编辑器增加Inspector功能
* 编辑器增加控制台功能
* 增加camera
* 编辑器增加run/stop功能
* 编辑器增加grid plane 功能
* 编辑器增加camera/light gizmo功能
* 编辑器增加资产功能
* 增加light material组件
* 增加texture
* 编辑器增加导入/导出功能
* 编辑器增加发布本地包功能
* 增加event
* 编辑器增加picking功能
* 编辑器增加显示轮廓功能
* 编辑器增加transform gizmo功能
* 编辑器增加pwa功能

### 相关资料

[Wonder官网](https://www.wonder-3d.com) [用函数式编程，从0开发3D引擎和编辑器系列](https://www.cnblogs.com/chaogex/category/1456108.html)
