从0开发3D引擎(一):开篇
介绍
大家好,本系列带你踏上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引擎(一):开篇的更多相关文章
- 从0开发3D引擎(二):准备预备知识
大家好,本文介绍了开发3D引擎需要的预备知识,给出了相关的资源. 上一篇博文 从0开发3D引擎(一):开篇 了解Web 3D Web 3D的历史 目前Web 3D是基于WebGL这个Web端3D AP ...
- 从0开发3D引擎:目录
介绍 大家好,本系列带你踏上Web 3D编程之旅- 本系列是实战类型,从0开始带领读者写出"良好架构.良好扩展性.优秀的性能.最小功能集合(MVP)" 的3D引擎. 本系列的素材来 ...
- 用函数式编程,从0开发3D引擎和编辑器(一)
介绍 大家好,欢迎你踏上3D编程之旅- 本系列的素材来自我们的产品:Wonder-WebGL 3D引擎和编辑器 的整个开发过程,探讨了在从0开始构建3D引擎和编辑器的过程中,每一个重要的功能点.设计方 ...
- 用函数式编程,从0开发3D引擎和编辑器(三):初步需求分析
大家好,本文介绍了Wonder的高层需求和本系列对应的具体功能点. 确定Wonder高层需求 业务目标 Wonder是web端3D开发的解决方案,包括引擎.编辑器,致力于打造开放.分享.互助的生态. ...
- 用函数式编程,从0开发3D引擎和编辑器(二):函数式编程准备
大家好,本文介绍了本系列涉及到的函数式编程的主要知识点,为正式开发做好了准备. 函数式编程的优点 1.粒度小 相比面向对象编程以类为单位,函数式编程以函数为单位,粒度更小. 正所谓: 我只想要一个香蕉 ...
- 从0开发3D引擎(三):搭建开发环境
本系列使用Reason语言,因此需要搭建它的开发环境. 上一篇博文 从0开发3D引擎(二):准备预备知识 搭建开发环境 建议使用VSCode编辑器来开发Reason,因为它的插件支持得最好. 具体搭建 ...
- 从0开发3D引擎(四):搭建测试环境
目录 上一篇博文 了解自动化测试 单元测试 集成测试 端对端测试 通过打印日志来调试 了解运行测试 断点调试 通过Spector.js测试WebGL 通过log调试Shader 移动端测试 了解性能测 ...
- 从0开发3D引擎(五):函数式编程及其在引擎中的应用
目录 上一篇博文 函数式编程的优点与缺点 优点 缺点 为什么使用Reason语言 函数式编程学习资料 引擎中相关的函数式编程知识点 数据 不可变数据 可变数据 函数 纯函数 高阶函数 柯西化 参考资料 ...
- 从0开发3D引擎(六):函数式反应式编程及其在引擎中的应用
目录 上一篇博文 介绍函数式反应式编程 函数式反应式编程学习资料 函数式反应式编程的优点与缺点 优点 缺点 异步处理的其它方法 为什么使用Most库 引擎中相关的函数式反应式编程知识点 参考资料 大家 ...
随机推荐
- Mysql——ERROR 1045 (28000): Access denied for user 'root'@'localhost'
1.修改my.ini,最后一行添加 skip-grant-tables ,保存关闭.(win10默认安装路径:C:\ProgramData\MySQL\MySQL Server 5.7) 2.重启 ...
- 2018-8-10-WPF-修改按钮按下的颜色
title author date CreateTime categories WPF 修改按钮按下的颜色 lindexi 2018-08-10 19:16:53 +0800 2018-03-15 2 ...
- mysql format时间格式化说明
原文地址为:mysql format时间格式化说明 date_format(datetime,formatting)可以格式日期和时间(例如 YYYY-MM-DD HH:MM:SS)和(HH:MM:S ...
- 数据库设计mysql字段不默认为NULL原因搜集
索引不会包含有NULL值的列 只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的.所以我们在数据库设计时不要让字段的默认值为NULL ...
- Java排序算法总结
1.冒泡排序 冒泡排序是排序算法中最基本的一种排序方法,该方法逐次比较两个相邻数据的大小并交换位置来完成对数据排序,每次比较的结果都找出了这次比较中数据的最大项,因为是逐次比较,所以效率是O(N^2) ...
- 禁用GPU版本TensorFlow,切换到CPU版本TensorFlow。
#禁用gpu版本TensorFlow,因为CUDA号码从0开始,这里直接让CUDA使用-1的GPU,自然就无法使用gpu了. 代码前面加入: import osos.environ["CUD ...
- GPUtil是一个Python模块,使用nvidia-smi从NVIDA GPU获取GPU状态
GPUtil是一个Python模块,使用nvidia-smi从NVIDA GPU获取GPU状态 一个Python模块,用于在Python中使用nvidia-smi以编程方式从NVIDA GPU获取GP ...
- 什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的 IE?
响应式网站设计(Responsive Web design)的理念是:集中创建页面的图片排版大小,可以智能地根据用户行为以及 使用的设备环境(系统平台.屏幕尺寸.屏幕定向等)进行相对应的布局,无论用户 ...
- POJ 2251宽搜、
因为这个题做了两次犯了两次不同的错误. 第一次用的dfs死活都超时 第二次把定义队列定义在了全局变量的位置,导致连WA了几次.最后找到原因的我真的想一巴掌拍死自己 #include<cstdio ...
- Native memory allocation (mmap) failed to map 142606336 bytes for committing reserved memory.
这里写链接内容 问题描述 Java程序运行过程中抛出java.lang.OutOfMemoryError: unable to create new native thread,如下所示: [java ...