公告

大家好,我们决定暂时停止开发Wonder,但会继续维护当前的Wonder版本(如继续维护官网、在线编辑器、QQ群等)。

我们当前的主要任务是 写书:基于Wonder 1.0版本的开发经验,写一本 “开发3D引擎和编辑器”的实战类型的书,欢迎大家关注~

写书计划

之前我写了《用函数式编程,从0开发3D引擎和编辑器》系列中的前3篇文章,主要从 思维 层面来讨论设计和开发过程。

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

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

暂定书名

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

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

主题

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

在线预览和反馈

在线阅读

读者反馈QQ群:
106047770

技术栈

篇幅

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

规划

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官网
用函数式编程,从0开发3D引擎和编辑器系列

Wonder暂停开发,开始写书的更多相关文章

  1. 基于 SailingEase WinForm Framework 开发优秀的客户端应用程序(1:概述)

    本系统文章将详细阐述客户端应用程序的设计理念,实现方法. 本系列文章以  SailingEase WinForm Framework 为基础进行设计并实现,但其中的设计理念及方法,亦适用于任何类型的客 ...

  2. 基于SVN的项目管理——集中与分散

    我们在此处不讨论 GIT 比 SVN 好多少,也不讨论 Maven 和 Gradle 哪个好用,基于现有的开发环境,大多数公司还是采用 SVN + Maven 来进行项目管理——因为这已经满足了大多数 ...

  3. Media PLayer

    PotPlayer http://potplayer.daum.net/?lang=zh_CN KMPlayer 的原制作者姜龙喜先生(韩国)进入 Daum 公司后的新一代作品.PotPlayer 的 ...

  4. SVN的项目管理

    基于SVN的项目管理——集中与分散   我们在此处不讨论 GIT 比 SVN 好多少,也不讨论 Maven 和 Gradle 哪个好用,基于现有的开发环境,大多数公司还是采用 SVN + Maven ...

  5. Alpha冲刺(1/10)——2019.4.23

    作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Alpha冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 ...

  6. Selenium及Headless Chrome抓取动态HTML页面

    一般的的静态HTML页面可以使用requests等库直接抓取,但还有一部分比较复杂的动态页面,这些页面的DOM是动态生成的,有些还需要用户与其点击互动,这些页面只能使用真实的浏览器引擎动态解析,Sel ...

  7. 如何写一个Xss Bot

    如何写一个Xss Bot 现在的ctf比赛里 xss的出题方式比较特殊,一般使用xss bot,所以借鉴大佬经验尝试弄一个xss题目. xss bot 就是代替管理员去完成点击页面的任务,bot需要能 ...

  8. 「小技巧」使用Git从其他分支merge个别文件

    小明发现在实际项目开发过程中,总会遇到各种各样的情况,比如一个大型的项目或版本迭代可能不是一次上线,可能会分好几次上线,这时候就会涉及创建多个分支,分别开发. 项目背景 产品经理:我们本次开发三个功能 ...

  9. Puppeteer学习笔记 (1)- 什么是Puppeteer

    本文链接:https://www.cnblogs.com/hchengmx/p/11006263.html 1. phantomjs介绍 在介绍puppeteer之前必须介绍一下phantomjs,p ...

随机推荐

  1. python容器类型字典的操作

    字典(dict):由大括号进行描述一组键值对,其键值对之间使用冒号隔开,键值对与键值对之间使用逗号隔开: 注意:字典的key可以为数字,但是不可以重复,因为key是唯一标识符: 1.声明一个字典:语法 ...

  2. mysql--时区问题(时间差8个小时?修改Mysql 时区)

    发现评论时间比本地时间晚8小时,原因:mysql默认时区选择了CST 解决办法: Ubuntu系统环境下: 1.检查mysql系统时区 进入mysql:mysql -u root -p mysql&g ...

  3. python 正确字符串处理(自己踩过的坑)

    不管是谁,只要处理过由用户提交的调查数据,就能明白这种乱七八糟的数据是怎么一回事.为了得到一组能用于分析工作的格式统一的字符串,需要做很多事情:去除空白符.删除各种标点符号.正确的大写格式等.做法之一 ...

  4. fastjson 1.2.24-基于JdbcRowSetImpl的PoC构造与分析

    前言: 基于fastjson的第一种payload是基于templatesImpl的方式,但是这种方式要求Feature.SupportNonPublicField才能打开非公有属性的反序列化处理,是 ...

  5. Node_exporter一键安装部署脚本(Shell)

    #!/bin/bash # # rhel7. 安装node_exporter 用于监控数据采集 # Usage: # sh addNode.sh #Logs: /var/log/messages #H ...

  6. P2415 集合求和(一道洛谷好题鸭)(虽然可以水过,但有必研究DP)

    此题坑点: 结果必须要用long long存,int存不下 如果想要像cout<<sum*pow(2,num-1)这样在输出时计算会错:long long在计算过程被隐式转换成了doubl ...

  7. tcpdump 详解

    目录 简介 安装 参数详解 案例 监听指定主机的数据包 监视指定主机和端口的数据包 监视指定网络的数据包 监视指定协议的数据包 使用tcpdump抓取HTTP包 简介 用简单的话来定义tcpdump, ...

  8. Java 从入门到进阶之路(十)

    之前的文章我们介绍了一下 Java 中的引用型数组类型,接下来我们再来看一下 Java 中的继承. 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继 ...

  9. css圆,背景,img填满等样式

    background 属性 属性值 描述 background-color 单词颜色表示法.rgb.十六进制 设置元素的背景颜色 background-image url('http://www.aa ...

  10. python让你再也不为文章配图与素材发愁,让高清图片占满你的硬盘! #华为云·寻找黑马程序员#

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...