Wonder暂停开发,开始写书
公告
大家好,我们决定暂时停止开发Wonder,但会继续维护当前的Wonder版本(如继续维护官网、在线编辑器、QQ群等)。
我们当前的主要任务是 写书:基于Wonder 1.0版本的开发经验,写一本 “开发3D引擎和编辑器”的实战类型的书,欢迎大家关注~
写书计划
之前我写了《用函数式编程,从0开发3D引擎和编辑器》系列中的前3篇文章,主要从 思维 层面来讨论设计和开发过程。
不过我认为这样的效果并不好,因为大部分读者都没有自己动手写过3D引擎,对他们来说,思维层面的讨论太过空泛。
因此我决定,本书从 实战 层面来讨论,让读者能真正跟着本书,一步一步地写出3D引擎和编辑器,真正体验到其中的快乐和成就感。
暂定书名
《3D编程旅程-从0开发3D引擎和编辑器》
我准备在“3D编程”的主题上写一系列的书,该系列暂名为“3D编程旅程”。后续可能会有《3D编程旅程-应用》、《3D编程旅程-模式》、《3D编程旅程-测试》等书。
主题
本书使用函数式编程范式,从0开始,通过一行一行的代码,写出了 简易的、完全可运行的 3D引擎和编辑器。
在线预览和反馈
读者反馈QQ群:
106047770
技术栈
- 使用Reasonml作为编程语言
- 使用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官网
用函数式编程,从0开发3D引擎和编辑器系列
Wonder暂停开发,开始写书的更多相关文章
- 基于 SailingEase WinForm Framework 开发优秀的客户端应用程序(1:概述)
本系统文章将详细阐述客户端应用程序的设计理念,实现方法. 本系列文章以 SailingEase WinForm Framework 为基础进行设计并实现,但其中的设计理念及方法,亦适用于任何类型的客 ...
- 基于SVN的项目管理——集中与分散
我们在此处不讨论 GIT 比 SVN 好多少,也不讨论 Maven 和 Gradle 哪个好用,基于现有的开发环境,大多数公司还是采用 SVN + Maven 来进行项目管理——因为这已经满足了大多数 ...
- Media PLayer
PotPlayer http://potplayer.daum.net/?lang=zh_CN KMPlayer 的原制作者姜龙喜先生(韩国)进入 Daum 公司后的新一代作品.PotPlayer 的 ...
- SVN的项目管理
基于SVN的项目管理——集中与分散 我们在此处不讨论 GIT 比 SVN 好多少,也不讨论 Maven 和 Gradle 哪个好用,基于现有的开发环境,大多数公司还是采用 SVN + Maven ...
- Alpha冲刺(1/10)——2019.4.23
作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Alpha冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 ...
- Selenium及Headless Chrome抓取动态HTML页面
一般的的静态HTML页面可以使用requests等库直接抓取,但还有一部分比较复杂的动态页面,这些页面的DOM是动态生成的,有些还需要用户与其点击互动,这些页面只能使用真实的浏览器引擎动态解析,Sel ...
- 如何写一个Xss Bot
如何写一个Xss Bot 现在的ctf比赛里 xss的出题方式比较特殊,一般使用xss bot,所以借鉴大佬经验尝试弄一个xss题目. xss bot 就是代替管理员去完成点击页面的任务,bot需要能 ...
- 「小技巧」使用Git从其他分支merge个别文件
小明发现在实际项目开发过程中,总会遇到各种各样的情况,比如一个大型的项目或版本迭代可能不是一次上线,可能会分好几次上线,这时候就会涉及创建多个分支,分别开发. 项目背景 产品经理:我们本次开发三个功能 ...
- Puppeteer学习笔记 (1)- 什么是Puppeteer
本文链接:https://www.cnblogs.com/hchengmx/p/11006263.html 1. phantomjs介绍 在介绍puppeteer之前必须介绍一下phantomjs,p ...
随机推荐
- Rust 入门 (一)
Rust 语言的介绍.特性什么的都不说了,如有需要,请自行了解.这里我们直接进去正题. 一.开发环境 mac或linux系统,在命令行安装 curl https://sh.rustup.rs -sSf ...
- Excel导入数据库(php版)
一.环境说明 Apache+php(PHPExcel)+HTML5+JavaScript(jQuery)+MySQL 二.前端预览 三.Excel表格 四.HTML部分 <p>按照Exce ...
- Electron存储简单数据和用户首选项推荐用electron-store
electron-store1可以用来保存Electron应用程序或模块的简单数据持久性-保存和加载用户首选项,应用程序状态,缓存等. 1https://github.com/sindresorhus ...
- SpringBoot项目集成Hystrix
Hystrix Hystrix是由Netflix开源的一个服务隔离组件,通过服务隔离来避免由于依赖延迟.异常,引起资源耗尽导致系统不可用的解决方案. 1.什么是服务熔断 服务熔断就是对该服务的调用 ...
- Spring Boot2 系列教程(二十八)Spring Boot 整合 Session 共享
这篇文章是松哥的原创,但是在第一次发布的时候,忘了标记原创,结果被好多号转发,导致我后来整理的时候自己没法标记原创了.写了几百篇原创技术干货了,有一两篇忘记标记原创进而造成的一点点小小损失也能接受,不 ...
- Prometheus Label 标签管理
目录 前言 配置测试 删除metric值 重新加载配置文件后测试 更换 重新加载配置文件后测试 删除 Label 标签 前言 在prometheus监控体系中.标签label是一个极为重要的参数,考虑 ...
- kubeadm 报错 error execution phase preflight: couldn’t validate the identity of the API Server: abort connecting to API servers after timeout of 5m0s
原因:master节点的token过期了 解决:重新生成新token 在master重新生成token # kubeadm token create 424mp7.nkxx07p940mkl2nd # ...
- surfer白化
surfer白化的方法: 方法一: 1.griddata需白化的文件(surfer处理成grd格式,也就是surfer绘图的基本数据格式) 注意:用surfer转换格式时,插值间距(spacing)大 ...
- 阿里架构师花近十年时间整理出来的Java核心知识pdf(Java岗)
由于细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容! 整理了一份Java核心知识点.覆盖了JVM.锁.并发.Java反射.Spring原理.微服务.Zooke ...
- php 设置临时内存和超时设置脚本最大执行时间
ini_set('memory_limit','3072M'); // 临时设置最大内存占用为3G set_time_limit(0); // 设置脚本最大执行时间 为0 永不过期