介绍

大家好,本系列带你踏上Web 3D编程之旅~

本系列是实战类型,从0开始带领读者写出“良好架构、良好扩展性、最小功能集合(MVP)” 的3D引擎。

本系列的素材来自我们的产品:Wonder-WebGL 3D引擎和编辑器 的整个开发过程。

与我的“用函数式编程,从0开发3D引擎和编辑器”系列博文的区别:

  • 本系列是它的重写版

  • 本系列是实战类型,而它是经验总结类型

  • 本系列只写引擎,而它既写引擎又写编辑器

为什么本系列只写引擎?

  • 因为大部分人更关心引擎

  • 为了加快写作速度,省略需要较多篇幅的编辑器

本系列特色

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

2.保持精简,只实现最小功能,重点强调架构扩展

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

现在3D领域使用函数式编程的资料很少,主流还是使用面向对象。
我以前也是用面向对象,不过自从我开始接触函数式编程,就拥抱了它。
希望能通过本系列,向读者展示函数式编程的魅力,扩展读者的视野和思维。

能给你带来什么收益?

1.手把手教你如何从0开发3D引擎
2.学习函数式编程及其在3D领域的应用
3.学习3D编程中基础的功能实现,如纹理、光照、模型等
4.学习引擎的设计和架构,如Data Oriented、多线程等

本系列技术选型

  • 使用Reason语言(函数式编程语言,可编译为Javascript)

Reason的相关评价详见:
如何评价 reasonml ?
如何评价 Facebook 推出的编程语言 Reason?

  • 使用WebGL 1作为底层API

引擎的特色

  • 函数式编程

  • 使用“函数式反应式编程”(FRP)实现异步

  • 多线程渲染

  • Data Oriented

  • 契约检查

  • 基于job的可扩展的渲染管道

  • 流加载

引擎支持的运行环境

重点支持桌面端浏览器(引擎的多线程渲染等功能只能在桌面端开启):

  • Chrome
  • Firefox
  • 360 browser(v10.0及以上)
  • qq browser(v10.4及以上)

也能够支持移动端浏览器:

  • 微信浏览器(安卓4.4及以上、ios 8及以上)

内容规划

本系列分成六个部分:

第一部分:准备(没有开始写)

主要内容:

  • 准备预备知识
  • 搭建开发环境
  • 搭建测试环境

第二部分:基础(没有开始写)

主要内容:

  • 学习函数式编程

  • 学习函数式反应式编程

  • 学习Reason

第三部分:搭建雏形(没有开始写)

主要内容:

  • 编写最小的3D程序

  • 从中提炼引擎

  • 改进引擎架构

第四部分:增加功能(没有开始写)

主要内容:

  • 增加基础功能

  • 加入Scene Graph

第五部分:增强扩展性(没有开始写)

主要内容:

  • 加入脚本组件

  • 加入自定义材质

  • 加入其它可能的扩展,如ui扩展等

第六部分:应用(没有开始写)

主要内容:

  • 通过引擎支持的扩展,加入实际应用需要的功能(如picking等)

  • 实现几个完整的3D应用

参考资料

Wonder-WebGL 3D引擎和编辑器
“用函数式编程,从0开发3D引擎和编辑器”系列博文

从0开发3D引擎(一):开篇的更多相关文章

  1. 从0开发3D引擎(二):准备预备知识

    大家好,本文介绍了开发3D引擎需要的预备知识,给出了相关的资源. 上一篇博文 从0开发3D引擎(一):开篇 了解Web 3D Web 3D的历史 目前Web 3D是基于WebGL这个Web端3D AP ...

  2. 从0开发3D引擎:目录

    介绍 大家好,本系列带你踏上Web 3D编程之旅- 本系列是实战类型,从0开始带领读者写出"良好架构.良好扩展性.优秀的性能.最小功能集合(MVP)" 的3D引擎. 本系列的素材来 ...

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

    介绍 大家好,欢迎你踏上3D编程之旅- 本系列的素材来自我们的产品:Wonder-WebGL 3D引擎和编辑器 的整个开发过程,探讨了在从0开始构建3D引擎和编辑器的过程中,每一个重要的功能点.设计方 ...

  4. 用函数式编程,从0开发3D引擎和编辑器(三):初步需求分析

    大家好,本文介绍了Wonder的高层需求和本系列对应的具体功能点. 确定Wonder高层需求 业务目标 Wonder是web端3D开发的解决方案,包括引擎.编辑器,致力于打造开放.分享.互助的生态. ...

  5. 用函数式编程,从0开发3D引擎和编辑器(二):函数式编程准备

    大家好,本文介绍了本系列涉及到的函数式编程的主要知识点,为正式开发做好了准备. 函数式编程的优点 1.粒度小 相比面向对象编程以类为单位,函数式编程以函数为单位,粒度更小. 正所谓: 我只想要一个香蕉 ...

  6. 从0开发3D引擎(三):搭建开发环境

    本系列使用Reason语言,因此需要搭建它的开发环境. 上一篇博文 从0开发3D引擎(二):准备预备知识 搭建开发环境 建议使用VSCode编辑器来开发Reason,因为它的插件支持得最好. 具体搭建 ...

  7. 从0开发3D引擎(四):搭建测试环境

    目录 上一篇博文 了解自动化测试 单元测试 集成测试 端对端测试 通过打印日志来调试 了解运行测试 断点调试 通过Spector.js测试WebGL 通过log调试Shader 移动端测试 了解性能测 ...

  8. 从0开发3D引擎(五):函数式编程及其在引擎中的应用

    目录 上一篇博文 函数式编程的优点与缺点 优点 缺点 为什么使用Reason语言 函数式编程学习资料 引擎中相关的函数式编程知识点 数据 不可变数据 可变数据 函数 纯函数 高阶函数 柯西化 参考资料 ...

  9. 从0开发3D引擎(六):函数式反应式编程及其在引擎中的应用

    目录 上一篇博文 介绍函数式反应式编程 函数式反应式编程学习资料 函数式反应式编程的优点与缺点 优点 缺点 异步处理的其它方法 为什么使用Most库 引擎中相关的函数式反应式编程知识点 参考资料 大家 ...

随机推荐

  1. @bzoj - 5219@ [Lydsy2017省队十连测]最长路径

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 在Byteland一共有n个城市,编号依次为1到n,形成一个n个 ...

  2. @bzoj - 4922@ [Lydsy1706月赛]Karp-de-Chant Number

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 卡常数被称为计算机算法竞赛之中最神奇的一类数字,主要特点集中于令 ...

  3. 11 session 使用

    #session 使用app.secret_key = "dsada12212132dsad1232113"app.config['PERMANENT_SESSION_LIFETI ...

  4. vue2——指令渲染,{{}}渲染

    博客地址 :https://www.cnblogs.com/sandraryan/ 声明式的渲染,以{{}}的形式调用数据 <!DOCTYPE html> <html lang=&q ...

  5. gensim的word2vec如何得出词向量(python)

    首先需要具备gensim包,然后需要一个语料库用来训练,这里用到的是skip-gram或CBOW方法,具体细节可以去查查相关资料,这两种方法大致上就是把意思相近的词映射到词空间中相近的位置. 语料库t ...

  6. Educational Codeforces Round 12 B C题、

    B. Shopping 题意:n个顾客,每个顾客要买m个物品,商场总共有k个物品,看hint就只知道pos(x)怎么算了,对于每一个Aij在k个物品中找到Aij的位置.然后加上这个位置对于的数值,然后 ...

  7. git的安装与命令行基本的使用

    1.https://git-scm.com/ 点击这个网址进入git的官方网站 2,.进去里面会有提示,64位于32位的,根据自己的电脑安装 3 下载完了过后就直接安装,一般会安装在c盘里面 ,进入安 ...

  8. 深入java面向对象四:Java 内部类种类及使用解析(转)

    内部类Inner Class 将相关的类组织在一起,从而降低了命名空间的混乱. 一个内部类可以定义在另一个类里,可以定义在函数里,甚至可以作为一个表达式的一部分. Java中的内部类共分为四种: 静态 ...

  9. 使用jackson转json解决双向关联循环调用

    ITOO V1.0的开发算是告一段落了,现在是整理总结交接环节,在这个项目中常见的问题也该好好整理一下和大家分享了,这次主要介绍转json循环调用的问题. 一.问题背景 相信只要使用ORM映射实体关联 ...

  10. HDU 1358 Period(KMP next数组运用)

    Period Problem Description For each prefix of a given string S with N characters (each character has ...