zoukankan      html  css  js  c++  java
  • 从0开发3D引擎(一):开篇

    介绍

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

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

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

    本系列是我正在写的书的预览版。详情请见:Wonder暂停开发,开始写书

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

    • 本系列是它的重写版

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

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

    为什么本系列只写引擎?

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

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

    上一篇博文

    从0开发3D引擎:目录

    下一篇博文

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

    本系列特色

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

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

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

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

    能给读者带来什么收益?

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

    读者如何学习本系列

    本系列从第三部分开始,会开始写程序,开发引擎。建议读者从这部分开始,不要按照文中给出的程序实现,自己再一行一行地重写一遍。因为这样效率低下,而且有可能会出错(虽然“程序实现”试图给出完整的代码,但仍然有可能遗漏了一些细节。这会导致读者如果自己照着写的话,自己写的程序可能会运行失败),所以建议读者阅读每篇文章,理解程序的实现,然后在文末查看该文的完整项目代码。

    本系列技术选型

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

    Reason是在Ocaml语言的基础上修改而来,专门提供给前端开发者使用。

    Reason是函数式编程语言,使用Bucklescript编译器编译成javascript语言。

    在我看来,至少有两大优点:
    1.编译后的javascript优化得非常好,让我们能够高性能地使用函数式编程。
    2.强类型和类型推导,让我们既不用向Typescript那样定义很多类型(Reason会帮我们推导类型),又可以享受强类型约束的好处(编译时能检查更多的错误)。

    我们Wonder已经使用Reason两年的时间了,所有产品,包括前端后端,都用Reason语言写,非常好用。

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

    • 使用WebGL 1.0作为底层API

    为了引擎能跑在移动端,我们选择WebGL 1.0而不是WebGL 2.0。

    引擎的特色

    • 函数式编程

    • 使用“函数式反应式编程”(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应用

    推荐我发布的相关的精品资料

    如果读者想全面了解Web 3D的相关学习资料,推荐阅读分享收集的Web 3D学习资源

    本文中分享了我收集的Web 3D相关的博客、书籍、教程、demo等内容

    如果读者想要学习“敏捷开发+领域模型驱动+2D游戏开发”,推荐阅读炸弹人游戏开发系列

    本系列博文记录了炸弹人游戏迭代开发的过程。在开发的过程中,代码会不断重构,领域模型会不断演变,高层划分也会不断变化。

    如果读者想要学习“开发2D引擎”,推荐阅读提炼游戏引擎系列

    本系列记录了从炸弹人游戏中提炼2D游戏引擎YEngine2D雏形的实战过程,您可以通过本系列了解到引擎提炼的思想、引擎的设计以及引擎是如何从游戏中提炼的,学习引擎开发的知识。希望对您能有所帮助!

    如果读者想要学习“面向对象设计+前端架构”,推荐阅读前端的架构设计与演化实例

    本文介绍我在实际的前端项目中的架构设计,展示因为需求变化而导致架构变化的过程。
    全文分为三个阶段,分别对应三次需求的变化,给出了对应的架构设计。
    在第一个阶段中,我使用面向过程设计;在第二个阶段和在第三个阶段中,我使用面向对象设计。

    本文参考资料

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

  • 相关阅读:
    Dubbo架构设计及原理详解
    Zookeeper+Dubbo+SpringMVC环境搭建
    Java 延迟队列使用
    深入理解Spring Redis的使用 (九)、通过Redis 实现 分布式锁 的 BUG,以及和数据库加锁的性能测试
    深入理解Spring Redis的使用 (八)、Spring Redis实现 注解 自动缓存
    深入理解Spring Redis的使用 (七)、Spring Redis 使用 jackson序列化 以及 BaseDao代码
    深入理解Spring Redis的使用 (六)、用Spring Aop 实现注解Dao层的自动Spring Redis缓存
    深入理解Spring Redis的使用 (五)、常见问题汇总
    深入理解Spring Redis的使用 (四)、RedisTemplate执行Redis脚本
    深入理解Spring Redis的使用 (三)、使用RedisTemplate的操作类访问Redis
  • 原文地址:https://www.cnblogs.com/chaogex/p/12133853.html
Copyright © 2011-2022 走看看